Nur*_*lan 5 web-services cxf jaxb apache-camel jbossfuse
我正在使用jboss fuse 6.1-final:
这是我简单的路线:
<route>
<from uri="cxf:bean:synchronousEndpoint"/>
<log message="Service invoked." />
<process ref="simpleProcessor"/>
</route>
Run Code Online (Sandbox Code Playgroud)
并且在simpleProcessor我将正确的响应(即相应的JAXB对象)放入上下文中.但是,它以错误回应:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Marshalling Error: java.lang.Object cannot be cast to org.w3c.dom.Element</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪:
Caused by: java.lang.ClassCastException: java.lang.Object cannot be cast to org.w3c.dom.Element
Run Code Online (Sandbox Code Playgroud)
有任何提示或建议吗?
如果没有看到 simpleProcessor 的更多代码,很难说。但是,您似乎使用了错误的 dataFormat 参数。
cxf 组件有一个 dataFormat 参数,可以是以下任意一个:
POJO:POJO(普通旧 Java 对象)是在目标服务器上调用的方法的 Java 参数。支持协议和逻辑 JAX-WS 处理程序。
PAYLOAD:PAYLOAD 是应用 CXF 端点中的消息配置后的消息负载(soap:body 的内容)。仅支持协议 JAX-WS 处理程序。不支持逻辑 JAX-WS 处理程序。
MESSAGE:MESSAGE 是从传输层接收到的原始消息。它不应该触摸或更改 Stream,如果您使用这种 DataFormat,一些 CXF 拦截器将被删除,因此在不支持camel-cxf消费者和JAX-WS处理程序之后您看不到任何soap标头。
CXF_MESSAGE:Camel 2.8.2 中的新增功能,CXF_MESSAGE 允许通过将消息从传输层转换为原始 SOAP 消息来调用 CXF 拦截器的全部功能
默认值是 POJO,这意味着 Camel 传递对象时没有 XML 作为消息传递。我怀疑您可能试图将响应作为 XML 进行操作,这会导致问题。
不久前,我遇到了与此类似的情况,当我收到 POJO 时,我试图通过对 XML 进行 XPATH 查询来将 POJO 转换为 XML。