以下是spring集成流程的摘录,其中我们遇到错误,在某些机器上流量测试用例正在通过,但在某些系统上它会失败:
Spring Integration Flow:
<integration:chain input-channel="X" output-channel="Y">
<integration:transformer expression="'{1:F21XXXX}{4:{1XX:' + new java.text.SimpleDateFormat('yyMMddHHmm').format(payload.arrivalDateTime.toGregorianCalendar().getTime()) + '}{444:' + payload.statusDetail.etc + '}}'"/>
</integration:chain>
错误:
ERROR 02 / Feb / 2017 09:35:08,608 [org.springframework.jms.listener.DefaultMessageListenerContainer#48-1] springframework.integration.handler.LoggingHandler - org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 88):方法调用:在java.util.Date类型上找不到方法toGregorianCalendar() 在org.springframework.expression.spel.ast.MethodReference.findAccessorForMethod(MethodReference.java:185) 在org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:107)
我们不确定缺少什么,我们在所有机器上检查了Java(1.6.0_35)/ maven(3.0.3)及其相同内容。任何帮助都会被批准。感谢。
答案 0 :(得分:0)
方法toGregorianCalendar()在类XMLGregorianCalendar中。从例外情况可以看出,spring el试图为Date对象调用GregorianCalendar()。我想你的问题是,对于某些测试用例,你得到的是payload.arrivalDateTime作为Date对象而不是XMLGregorianCalendar对象。
https://docs.oracle.com/javase/7/docs/api/javax/xml/datatype/XMLGregorianCalendar.html