在jboss fuse中使用cxf的web服务端点

时间:2014-05-14 08:20:19

标签: web-services jaxb cxf apache-camel jbossfuse

我正在使用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

有任何提示或建议吗?

1 个答案:

答案 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,从而遇到类似的事情。