【问题标题】:How to prevent CXF from converting %gt; to > in payload?如何防止 CXF 转换 %gt;到 > 在有效载荷中?
【发布时间】:2019-07-16 19:20:39
【问题描述】:

我有一个带有 CXF 端点的骆驼适配器,用于输入(来自),配置如下:

  <camel-cxf:properties>
    <entry key="dataFormat" value="PAYLOAD"/>
    <entry key="allowStreaming" value="true"/>
    <entry key="relayHeaders" value="false"/>
  </camel-cxf:properties>

SOAP 输入在负载中包含以下元素:

<foo>here is an arrow -&gt;</foo>

但是输出看起来像这样:

<foo>here is an arrow -></foo>

我知道这不是无效的。 XML 不需要转义 >。它是“唯一”强烈推荐的(有关详细信息,请参阅this SO question)。

但我不想改变有效载荷。 CXF 应该只切断 SOAP 信封并保持其中的所有内容不变。我可以禁用 XML 负载的解析/重新序列化吗?

【问题讨论】:

    标签: xml apache-camel cxf


    【解决方案1】:

    我的一位同事发现,问题似乎在于其他组件如何使用 CXF 的 CachedCxfPayload 输出对象。 CXF 之后的处理器似乎进行了不需要的转换。

    我们的解决方案是在传递之前将 CXF 的输出转换为字符串:

    <convertBodyTo type="java.lang.String"/> 
    

    现在没有转换了。

    【讨论】:

      【解决方案2】:

      您可以将 dataFormat 更改为 MESSAEG,这样camel-cxf 将不会接触到 XML 有效负载或附件。 顺便说一句,您无法使用此数据格式访问 SOAP 标头。

      【讨论】:

      • 谢谢。但是,我需要访问 SOAP 标头,所以我将寻找不同的解决方案。
      【解决方案3】:

      看看添加一个拦截器(作为接收的最后一步),或者您可以在 cxf 步骤之后将它传递到骆驼路线中的处理器并修改主体。

      CXF Interceptor

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-21
        • 1970-01-01
        • 2016-08-19
        相关资源
        最近更新 更多