从Soap Response Camel CXF中删除命名空间

时间:2015-06-07 11:56:51

标签: soap cxf

以下是我在camel cxf

中托管的服务的示例Soap Response
<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”名称空间前缀。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您使用的是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中查找一个id为“myMap”的java.util.Map,这就是我们在上面定义的内容。

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

答案 1 :(得分:0)

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

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

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

&lt; entry key =“{http://test:9090/wsx/services/WemXpgPaymentService”} XpgIntegratedPaymentResponse“     值= “XpgIntegratedPaymentResponse”/&GT;