JWi*_*ley 10 java error-handling exception ibm-integration-bus extended-sql
在一个项目的用例中我遇到了一个奇怪的情况:ESQL正在调用一个java方法,向它发送一个String输入参数,该方法将解组,应用一些逻辑,然后存储来自unmarshalled对象的有用信息.因此,该方法必须抛出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;
}
Run Code Online (Sandbox Code Playgroud)
但是我对这样做有什么不好的感觉.
我愿意接受任何想法或不同的解决方案,特别是如果有解决ESQL签名问题的方法.
更新:
添加有关ESQL过程无法在签名中使用throws子句调用java方法的参考.
摘自CREATE PROCEDURE语句部分下的此链接:
"您要调用的任何Java方法都必须具有以下基本签名:public static(<0 - N parameters>)其中必须位于ESQL到Java数据类型映射表中的Java IN数据类型列表中(不包括REFERENCE类型,不允许作为返回值)或Java void数据类型.参数数据类型也必须在ESQL到Java数据类型映射表中.此外,Java方法不允许有异常在其签名中抛出条款."
小智 1
这实际上并不是一个关于 Java 的问题,而是一个关于 ESQL 的问题。
ESQL 能够处理通过 JNI 抛出到 ESQL 代码中的 Java 异常,您应该会收到 BIP2917 错误。
我最初认为这可能是 ESQL 方法解析器的问题,但在 IIB v9 上我能够成功调用以下方法:
public static void sayHello() throws Exception{
System.out.println("hello");
}
Run Code Online (Sandbox Code Playgroud)
这让我觉得您的 ESQL 外部函数/过程定义可能还有其他问题?
| 归档时间: |
|
| 查看次数: |
1562 次 |
| 最近记录: |