这里我的java组件返回了一个arrylist,我正在使用Collection splitter进行拆分,并点击列表对象。 但是当我更换原来的paylaod之后,一旦电线窃听之后,它就无法工作了。我得到了阶级演员的例外 CopyOnWriteArrayList无法强制转换为java.lang.String。我认为分裂对象在流程结束时聚合,而不使用任何额外的 聚合器,我不明白为什么我没有通过set-payload变换器获得更改的有效载荷。
下面是流程源代码 -
<flow name="StandaloneTestFlow1" doc:name="StandaloneTestFlow1">
<http:inbound-endpoint exchange-pattern="request-response" doc:name="HTTP" address="http://0.0.0.0:10114/jaxbtest"/>
<cxf:jaxws-service serviceClass="com.standalone.test.StandaloneTest" doc:name="SOAP"/>
<component doc:name="Java">
<method-entry-point-resolver>
<include-entry-point method="getxmlString"/>
</method-entry-point-resolver>
<spring-object bean="standalonBean"/>
</component>
<collection-splitter doc:name="Collection Splitter"/>
<mulexml:jaxb-object-to-xml-transformer name="autoBeanToSmartxml" jaxbContext-ref="testJaxbContext"/>
<object-to-string-transformer doc:name="Object to String"/>
<wire-tap>
<vm:outbound-endpoint address="vm://testJaxbvm"/>
</wire-tap>
<set-payload value="adfafasdfasdfasd " doc:name="Set Payload"/>
</flow>
以下是异常堆栈 -
org.apache.cxf.interceptor.Fault: java.util.concurrent.CopyOnWriteArrayList cannot be cast to java.lang.String
at org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor.handleMessage(WrapperClassOutInterceptor.java:116)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
答案 0 :(得分:1)
Mule的Collection Splitter
就是这个问题的原因。
Collection Splitter
将Collection对象拆分为单个对象,并将每个对象传递给remaining flow one at a time
的下一部分。就像它是iterating the collection
并在迭代循环中执行剩余的流程。
这是一个HTTP request-response
入站。因此,在收集拆分器拆分集合并根据集合的大小多次执行剩余流程之后。最终响应由mule汇总,并作为响应返回。但由于它是JAXWS
服务,因此方法签名可能返回了一个String。所以有一个类强制转换异常。
所以有两种选择。
Either changes the return type of the method to CopyOnWriteArraylist which provied with an output like
<response>
<greeting>adfafasdfasdfasd</greeting>
<greeting>adfafasdfasdfasd</greeting>
<greeting>adfafasdfasdfasd</greeting>
<greeting>adfafasdfasdfasd</greeting>
<greeting>adfafasdfasdfasd</greeting>
<greeting>adfafasdfasdfasd</greeting>
<greeting>adfafasdfasdfasd</greeting>
<greeting>adfafasdfasdfasd</greeting>
</response>
或
Change the logic to avoid using collection splitter.
以下是与Collection Splitter相关的更多信息。