【发布时间】:2014-02-28 19:44:34
【问题描述】:
让我们想象一下我想将一个列表传递给一个 JDBC 转换器。
例如,我在流程中创建列表:
<scripting:transformer><scripting:script engine="groovy"><scripting:text>
// Some calculations and stuff
def single_quote_alias = "'"
def listString = seasonMbIds.join("',' ")
return single_quote_alias + listString + single_quote_alias // now it's like: '11','22','33'
</scripting:text></scripting:script></scripting:transformer>
然后将列表传递给另一个转换器:
<jdbc:outbound-endpoint connector-ref="XYZ" queryKey="someName" exchange-pattern="request-response" />
这是实际的查询:
<jdbc:query key="someName"
value="SELECT anID FROM aTable WHERE aField IN (#[payload:])" />
它给了我“超出范围的索引异常”:
Message : java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 (javax.script.ScriptException)
Code : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. Index: 0, Size: 0 (java.lang.IndexOutOfBoundsException)
java.util.ArrayList:635 (null)
2. java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 (javax.script.ScriptException)
可能有一些转义问题。我使用了不同的分隔符,问题仍然存在......
有什么建议吗?
【问题讨论】:
-
顺便说一句,您使用的是什么版本?我看到
#[payload:]所以我在想 3.2 或更高版本?否则就是#[message.payload]... -
"3.3.1 企业版" ...
-
顺便说一句,我制作了一个自定义转换器(在 Java 中)来解析该查询字符串并对其进行处理。我不太清楚为什么 IN 运算符不起作用
-
这是一个脚本错误,而不是 JDBC 错误:您确定
seasonMbIds包含某些内容吗?这个.join("',' ")也会产生'11',' 22',' 33'。最后,您是 EE 用户,因此您应该使用 JDBC EE 连接器,它比 CE 连接器更强大。还可以考虑联系 MuleSoft 专业支持,因为您使用的是 EE。 -
join 中的那个空格是 stackoverflow 编辑器中的拼写错误。是的,seasonMbIds 是一个包含元素的普通列表。我正在使用带有 EE 连接器的 JDBC。尽管如此,我还是以其他形式解决了它。现在无需致电支持。非常感谢您的回答和关注:)