带有HTTP inbounds的JAXB抛出异常无效的返回类型"类[B"是为变压器" JAXBMarshallerTransformer"指定的。

时间:2015-09-03 06:46:10

标签: mule

当我从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="#[&quot;Payload ----------&gt;&quot; + payload.getClass().getName()]" level="INFO" doc:name="Logger"/>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<logger message="#[&quot;Payload ----------&gt;&quot; + 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>

1 个答案:

答案 0 :(得分:1)

如果我没有错,你所看到的就是你所期望的。

JMS入站端点遵循(默认情况下,如您的情况)“单向”模式,客户端没有响应消息,因此在流程结束时对有效负载没有特殊要求。

HTTP入站端点遵循(在您的情况下,默认情况下)“请求 - 响应”模式,因此在将响应发送到客户端之前,有效负载应该是由端点管理的类型。在你的情况下,它是一个非托管类型的java对象实例,它必须转换为正确的类型(String,InputStream,byte [],...)。例如:

<mulexml:jaxb-object-to-xml-transformer />