我正在使用jboss fuse 6.1-final:
这是我的简单路线:
<route>
<from uri="cxf:bean:synchronousEndpoint"/>
<log message="Service invoked." />
<process ref="simpleProcessor"/>
</route>
并且在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>
这里是堆栈跟踪:
Caused by: java.lang.ClassCastException: java.lang.Object cannot be cast to org.w3c.dom.Element
有任何提示或建议吗?
答案 0 :(得分:0)
如果没有从simpleProcessor中看到更多代码,就很难说。但是,您似乎使用了错误的dataFormat参数。
cxf组件有一个dataFormat参数,可以是以下任何一个参数:
POJO :POJO(普通的旧Java对象)是Java的参数 在目标服务器上调用的方法。协议和逻辑 支持JAX-WS处理程序。
PAYLOAD :PAYLOAD是消息有效负载(内容) soap:body)在CXF端点中配置消息后 应用。仅支持Protocol JAX-WS处理程序。逻辑JAX-WS 处理程序不受支持。
消息:MESSAGE是从中接收的原始消息 传输层。它不是设想触摸或改变流,一些 如果您使用这种类型的CXF拦截器将被删除 DataFormat所以你不能在camel-cxf之后看到任何soap标题 不支持使用者和JAX-WS处理程序。
CXF_MESSAGE :Camel 2.8.2中的新功能,CXF_MESSAGE允许调用 通过转换消息来获得CXF拦截器的全部功能 将传输层转换为原始SOAP消息
默认值为POJO,这意味着没有XML作为Camel传递对象的消息传递。我怀疑您可能正在尝试将响应操作为XML,这会导致问题。
当我收到POJO时,尝试在XML上执行XPATH查询时,我试图将POJO转换为XML,从而遇到类似的事情。