补救生成的和预期的SOAP消息之间的细微差别

时间:2013-12-06 09:30:53

标签: java wcf soap interop message

我正在尝试在不同平台上托管的服务之间建立一些通信:.net< - > java的。我不可能在Java部分中更改任何内容。这是我们无法访问的第三方软件。

我的麻烦基本上归结为服务期望(使用SoapUI测试)和WCF发送的内容(通过跟踪测试)的细微差别。

预期(或至少允许):

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
     xmlns:ser="http://servicenamespace/">      
    <s:Header /> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">      
        <ser:method >           
            <param1/>
            <param2>xxx</param2>
            <param3>zzz</param3>        
        </ser:method>   
    </s:Body>
</s:Envelope>

.NET实际上尝试发送的内容:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header/>
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <method xmlns="http://servicenamespace/">
            <param1/>
            <param2>xxx</param2>
            <param3>zzz</param3>
        </method>
    </s:Body>
</s:Envelope>

如你所见,差异是微妙的。 servicen期待的是头标记中的名称空间声明...... 有没有办法解决这个问题,最好是以低影响(例如不拦截和改变消息)的方式?也许通过其他方式使用属性?

1 个答案:

答案 0 :(得分:0)

不,差异不如您想象的那么微妙,而且与命名空间声明的位置无关。它是关于paramX元素的命名空间。

  • 在您的第一个示例中,paramX元素位于 null -namespace;

  • 在您的第二个示例中,paramX元素位于http://servicenamespace/

这种差异必须在您的邮件正文的XML Schema中显而易见,并且您用于从Schema构建代码的工具必须遵守这一点。因此,您可以对代码构建工具或生成的代码进行干预。