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

时间:2019-02-22 16:36:53

标签: xml apache-camel cxf

我有一个骆驼适配器,其CXF指定用于这样配置的输入(来自):

  <Form validated>
    <Form.Group>
      <Form.Label>Text Input</Form.Label>
      <Form.Control required type="text" value="foo"/>
    </Form.Group>
    <Form.Group>
      <Form.Label>Invalid Dropdown Input</Form.Label>
      <Form.Control required as="select" value={''}>
        <option key={'empty'} value={''}>...</option>
        <option key={'1'} value={'1'}>1</option>
        <option key={'2'} value={'2'}>2</option>
      </Form.Control>
    </Form.Group>
    <Form.Group>
      <Form.Label>Valid Dropdown Input</Form.Label>
      <Form.Control required as="select" value={'2'}>
        <option key={'empty'} value={''}>...</option>
        <option key={'1'} value={'1'}>1</option>
        <option key={'2'} value={'2'}>2</option>
      </Form.Control>
    </Form.Group>
  </Form>

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

console_scripts

但是输出看起来像这样:

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

我知道这不是无效的。 XML不需要转义>。强烈建议“仅”使用(有关详细信息,请参见this SO question)。

但我不希望更改有效负载。 CXF应该只切断SOAP信封,并将所有内容保持原样。我可以禁用XML有效内容的解析/重新序列化吗?

3 个答案:

答案 0 :(得分:1)

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

CXF Interceptor

答案 1 :(得分:1)

您可以将dataFormat更改为MESSAEG,这样,camel-cxf将不会与XML有效负载或附件联系。 顺便说一句,您不能使用此dataFormat访问SOAP Header。

答案 2 :(得分:0)

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

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

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

现在没有转换了。