如何在非Camel Web服务中执行XML字符串转换和XPath提取?

问题描述 投票:0回答:1

我正在开发一个处理 SOAP 响应(XML 格式)的 Web 服务,我需要:

  1. 获取原始有效负载。
  2. 对 XML 内容执行条件替换:
  • 如果正文包含字符串“is:folio”,请将其替换为“is:ApplicantDataFolio”。
  • 否则,请将第一次出现的“folio”替换为命名空间声明,然后将所有出现的“folio”替换为“is:ApplicantDataFolio”。
  1. 应用转换后,使用 XPath 提取特定的 XML 元素 (ApplicantDataFolio)。

这就是我想要实现的目标: 在 Camel 中,转换看起来像这样:

<convertBodyTo type="java.lang.String"/>
<choice>
    <when>
        <simple>${body} contains 'is:folio'</simple>
        <setBody>
            <simple>${body.replaceAll("is:folio", "is:ApplicantDataFolio")}</simple>
        </setBody>
    </when>
    <otherwise>
        <setBody>
            <simple>${body.replaceFirst("folio", "is:ApplicantDataFolio xmlns:is='urn:digimarc.com:imaging'")}</simple>
        </setBody>
        <setBody>
            <simple>${body.replaceAll("folio", "is:ApplicantDataFolio")}</simple>
        </setBody>
    </otherwise>
</choice>

<setBody>
    <xpath>//*[local-name()='ApplicantDataFolio']</xpath>
</setBody>

现在,当我尝试发送有效负载时,我得到了解组错误:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <soap:Fault>
            <faultcode>soap:Client</faultcode>
            <faultstring>Unmarshalling Error: unexpected element (uri:"urn:digimarc.com:imaging", local:"folio"). Expected elements are &lt;{urn:l1id.com:ImageServer}folio>,&lt;{urn:l1id.com:ImageServer}replaceDirective> </faultstring>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>

我的目标: 我需要在不使用 Apache Camel 的情况下复制此转换逻辑,而是在非 Camel Web 服务上下文中使用纯 Java。

java web-services apache-camel
1个回答
0
投票

您能否准确地向我们发送您想要发送的有效负载?我的意思是请求的正文。然后,我们应该尝试使用纯 java 构建正文内容。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.