强制在soap消息中使用xmlns前缀

时间:2012-12-19 20:11:48

标签: xml wcf cxf

我需要强制WCF在调用java SOAP服务时使用XML名称空间前缀

我的外发肥皂消息目前看起来像这样:

<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<getStuff xmlns="http://XXXXXX.com/">
<Id>84</Id>
</getStuff>
</s:Body>

我需要利用cxf服务的命名空间前缀来正确解析消息。

<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<nsXX:getStuff xmlns:nsXX="http://XXXXXX.com/">
<nsXX:Id>84</nsXX:Id>
</nsXX:getStuff>
</s:Body>

1 个答案:

答案 0 :(得分:0)

在我继续讨论一个解决方案之前,请注意两个XML是不同的:在第一个中,元素<Id>位于http://XXXXXX.com/命名空间,而第二个位于空命名空间。这真的是你想要的吗?

如果是这样,您需要使用自定义编码器才能在编写消息时更改WCF使用的前缀。一个简单的实现是包装现有编码器并将大多数调用委托给原始编码器。在编写传出消息时,您首先将其委托给原始编码器,将其写入本地缓冲区。然后,您可以根据需要更改XML,然后将该消息返回给调用者。

http://blogs.msdn.com/b/carlosfigueira/archive/2010/06/13/changing-prefixes-in-xml-responses.aspx上的帖子显示了此方案的一种实施方式。