如何防止 CXF 转换 %gt;到 > 在有效载荷中?

How to prevent CXF from converting %gt; to > in payload?

我有一个带有 CXF enpoint 的 camel 适配器,其配置如下:

  <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不需要转义>。 "only" 强烈推荐(详见 this SO question)。

但我不想更改有效载荷。 CXF 应该只切掉 SOAP 信封并保留其中的所有内容。我可以禁用 XML 负载的 parsing/re-serialization 吗?

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

CXF Interceptor

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

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

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

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

现在没有转换了。