【问题标题】:Removing namespace from Soap Response Camel CXF从 Soap Response Camel CXF 中删除命名空间
【发布时间】:2015-09-10 01:30:26
【问题描述】:

以下是我在骆驼 cxf 中托管的服务的示例 Soap 响应

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns2:XpgIntegratedPaymentResponse xmlns:ns2="http://test:9090/wsx/services/WemXpgPaymentService"/>
    </soap:Body>
</soap:Envelope>

现在我不想生成“ns2”命名空间前缀作为响应。

谁能帮忙?

【问题讨论】:

  • 如果您不需要可验证的响应,请不要使用 SOAP。

标签: soap cxf


【解决方案1】:

如果您想删除该元素的命名空间,以便将其序列化为无命名空间的 XpgIntegratedPaymentResponse,常用的方法是使用 CXF 的转换功能。

在此处查看更多信息: http://cxf.apache.org/docs/transformationfeature.html#TransformationFeature-Changinginputandoutputelementnamesandnamespaces

在您的特定情况下,您将需要以下条目

http://test:9090/wsx/services/WemXpgPaymentService"}XpgIntegratedPaymentResponse" value="XpgIntegratedPaymentResponse"/>

【讨论】:

    【解决方案2】:

    您使用的是 Camel 2.11+ 吗?您可以控制命名空间映射:

    取自: http://camel.apache.org/jaxb.html

    当使用 JAXB 或 SOAP 编组时,JAXB 实现将自动分配命名空间前缀,例如 ns2、ns3、ns4 等。为了控制此映射,Camel 允许您引用包含所需映射的映射。

    请注意,这需要在类路径中包含 JAXB-RI 2.1 或更高版本(来自 SUN),因为映射功能取决于 JAXB 的实现,无论它是否受支持。

    例如,在 Spring XML 中,我们可以使用映射定义一个 Map。在下面的映射文件中,我们将 SOAP 映射为使用 soap 作为前缀。虽然我们的自定义命名空间“http://www.mycompany.com/foo/2”没有使用任何前缀。

    <util:map id="myMap">
      <entry key="http://www.w3.org/2003/05/soap-envelope" value="soap"/>
      <!-- we dont want any prefix for our namespace -->
      <entry key="http://www.mycompany.com/foo/2" value=""/>
    </util:map>
    

    要在 JAXB 或 SOAP 中使用此映射,请使用如下所示的 namespacePrefixRef 属性来引用此映射。然后 Camel 会在 Registry 中查找一个 java.util.Map,其 id 为“myMap”,这就是我们上面定义的。

    <marshal>
      <soapjaxb version="1.2" contextPath="com.mycompany.foo" namespacePrefixRef="myMap"/>
    </marshal>
    

    【讨论】:

    • 我不想生成任何类型的命名空间示例 Eg.Soap 响应(从 WEM 到 RMHP)schemas.xmlsoap.org/soap/envelope"> tempuri.org"> -1FailedRMHP Payment Effectuation xml 不符合 RMHP Effectuation Payment Schema ns2:RmhpHop3PaymentEffResponse> 。我想删除 ns2="tempuri.org" 和命名空间
    • 将 contextPath 更改为 RmhpHop3PaymentEffResponse 所在的包,这应该可以解决问题。
    • 嗨,我应该使用哪个拦截器来删除 SoapBody 中的命名空间?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多