以下是我在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”名称空间前缀。
有人可以帮忙吗?
答案 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的转换功能。
在您的特定情况下,您将需要以下条目
&lt; entry key =“{http://test:9090/wsx/services/WemXpgPaymentService”} XpgIntegratedPaymentResponse“ 值= “XpgIntegratedPaymentResponse”/&GT;