返回类型为Exception是不错的编程?

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 外部函数/过程定义可能还有其他问题?