【问题标题】:web service endpoint using cxf in jboss fuse在 jboss fuse 中使用 cxf 的 Web 服务端点
【发布时间】:2014-07-02 04:29:13
【问题描述】:

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

有什么提示或建议吗?

【问题讨论】:

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


    【解决方案1】:

    如果没有看到来自 simpleProcessor 的更多代码,这很难说。但是,您似乎使用了错误的 dataFormat 参数。

    cxf 组件有一个 dataFormat 参数,可以是以下任意一种:

    • POJO:POJO(普通旧 Java 对象)是 在目标服务器上调用的方法。协议和逻辑 支持 JAX-WS 处理程序。

    • PAYLOAD:PAYLOAD 是消息负载( soap:body) 在 CXF 端点中的消息配置之后是 应用。仅支持协议 JAX-WS 处理程序。逻辑 JAX-WS 不支持处理程序。

    • MESSAGE:MESSAGE 是从 传输层。不应触摸或更改 Stream,其中一些 如果您使用这种类型的 CXF 拦截器将被删除 数据格式,因此您在 camel-cxf 之后看不到任何肥皂标题 不支持使用者和 JAX-WS 处理程序。

    • CXF_MESSAGE:在 Camel 2.8.2 中新增,CXF_MESSAGE 允许调用 通过将消息从 将传输层转换为原始 SOAP 消息

    默认是 POJO,这意味着没有 XML 被作为消息传递 Camel 正在传递对象。我怀疑您可能正在尝试将响应作为 XML 进行操作,这会导致问题。

    不久前我遇到了与此类似的情况,我在接收 POJO 时尝试通过对 XML 执行 XPATH 查询来将 POJO 转换为 XML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多