我在一个项目的用例中遇到了一个奇怪的情况:ESQL 正在调用一个 java 方法,向它发送一个字符串输入参数,该方法将解组,应用一些逻辑,然后存储来自解组对象的有用信息。因此,该方法必须要么抛出 JAXBException,要么使用 try catch 来处理可能的异常。
这样做的问题是,ESQL 不能调用在签名中包含 throws 的 java 方法。但是,我们希望任何错误都回落到先前调用的 MBNode 上,以便可以在那里适当地处理它,因此 trycatch 就不存在了。
让我震惊的是,嘿,当我们遇到问题时不可能返回一种类型的异常,如果不是则返回 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 语句部分下的此链接:
“您要调用的任何 Java 方法必须具有以下基本签名:public static (<0 - N parameters>) where 必须在 ESQL 到 Java 数据类型映射表中的 Java IN 数据类型列表中(不包括REFERENCE 类型,不允许作为返回值),或者 Java void 数据类型。参数数据类型也必须在 ESQL 到 Java 数据类型映射表中。另外,Java 方法不允许有异常签名中的 throws 子句。”