【发布时间】:2014-04-25 22:27:27
【问题描述】:
我在一个项目的用例中遇到了一个奇怪的情况:ESQL 正在调用一个 java 方法,向它发送一个字符串输入参数,该方法将解组,应用一些逻辑,然后存储来自解组对象的有用信息。因此,该方法必须要么抛出 JAXBException,要么使用 try catch 来处理可能的异常。
问题在于,ESQL 不能调用在签名中包含 throws 的 java 方法。但是,我们希望任何错误都回落到之前调用的 MBNode 上,以便在那里得到适当的处理,因此 trycatch 就不存在了。
让我震惊的是,嘿,当我们遇到问题时,不可能返回一种 Exception 类型,否则返回 null 吗?所以我写了一个简单的方法来做这件事,虽然我没有收到任何警告或错误,但从良好编程的意义上来说,这对我来说似乎是错误的。
例如:
public Exception doStuffAndCheckForErorrs(String inString)
{
if(inString.equals(null))
{
return new Exception("Your string is null");
}
else
return null;
}
但我只是觉得以这种方式做任何事情都很糟糕。
我愿意接受任何想法或不同的解决方案,尤其是如果有办法解决 ESQL 签名问题。
更新:
添加关于为什么 ESQL 过程无法在签名中调用带有 throws 子句的 java 方法的参考。
摘自 CREATE PROCEDURE 语句部分下的This link:
"您要调用的任何 Java 方法都必须具有以下基本签名: 公共静态() where 必须在 ESQL 到 Java 数据类型映射表中的 Java IN 数据类型列表中(不包括 REFERENCE 类型,它不允许作为返回值),或者 Java void 数据类型。参数数据类型也必须在 ESQL 到 Java 数据类型映射表中。此外,Java 方法的签名中不允许有异常 throws 子句。”
【问题讨论】:
-
你为什么要这么做?只需添加
null支票即可。如果您真的想做这样的事情,请使用布尔标志。除非你真的有这样的要求,否则返回Exception似乎是个坏主意。 -
@AniketThakur 请阅读完整的问题/帖子。是的,我确实有这样的要求,否则我不会发布问题。
-
如果您试图返回异常,请使用 throws 并让调用方法捕获异常
-
-
我宁愿通过使用未经检查的(AKA 运行时)异常来解决 ESQL 的限制。
标签: java exception error-handling ibm-integration-bus extended-sql