当我从JMS入站获得XML有效负载时,XML到JAXB按预期工作。但是当我从HTTP入站获得相同的XML有效负载时,它会引发异常
无效的返回类型"类[B"是为变压器" JAXBMarshallerTransformer"指定的。 (org.mule.api.transformer.TransformerException)
对于JAXB" XML不是一个公平的期望吗?组件从HTTP入站获得XML有效负载?请告诉我这里缺少的东西。
使用JMS和HTTP入站的流xml。只有JMS入站按预期工作,
<flow name="productdemoFlow">
<jms:inbound-endpoint queue="my.test" connector-ref="Active_MQ" doc:name="JMS">
<jms:transaction action="NOT_SUPPORTED"/>
</jms:inbound-endpoint>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
<mulexml:jaxb-xml-to-object-transformer returnClass="com.chc.model.Product" jaxbContext-ref="JAXB_Context" doc:name="XML to JAXB Object"/>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
</flow>
<flow name="productdemoFlow1">
<http:listener config-ref="HTTP_Listener_Configuration" path="/test" allowedMethods="POST" doc:name="HTTP" />
<logger message="#["Payload ---------->" + payload.getClass().getName()]" level="INFO" doc:name="Logger"/>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<logger message="#["Payload ---------->" + payload]" level="INFO" doc:name="Logger"/>
<mulexml:jaxb-xml-to-object-transformer encoding="windows-1252" mimeType="application/xml" jaxbContext-ref="JAXB_Context" doc:name="XML to JAXB Object"/>
</flow>
答案 0 :(得分:1)
如果我没有错,你所看到的就是你所期望的。
JMS入站端点遵循(默认情况下,如您的情况)“单向”模式,客户端没有响应消息,因此在流程结束时对有效负载没有特殊要求。
HTTP入站端点遵循(在您的情况下,默认情况下)“请求 - 响应”模式,因此在将响应发送到客户端之前,有效负载应该是由端点管理的类型。在你的情况下,它是一个非托管类型的java对象实例,它必须转换为正确的类型(String,InputStream,byte [],...)。例如:
<mulexml:jaxb-object-to-xml-transformer />