接受这个(显式声明的auth名称空间)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:auth="http://foo.pro/Auth/">
<soapenv:Header/>
<soapenv:Body>
<auth:login>
<login>xxx</login>
<password>xxxx</password>
</auth:login>
</soapenv:Body>
</soapenv:Envelope>
这个给出了“Unmarshalling Error:unexpected element(uri:”http://foo.pro/Auth/“,local:”login“)。预期的元素是&lt; {} login&gt;,&lt; {} password&gt;”
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body> <login xmlns="http://foo.pro/Auth/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<login>login</login>
<password>password</password>
</login></soap:Body>
</soap:Envelope>
客户端无法修复,应该使用cxf服务端
答案 0 :(得分:2)
嗯,这很明显。在定义命名空间时:第二个示例中的http://foo.pro/Auth/
<login>
和<password>
包含<login>
的元素属于http://foo.pro/Auth/
命名空间。因为您在<login>
根目录中使用xmlns
声明它,所以其中的所有内容都属于此命名空间:http://foo.pro/Auth/
。在第一个示例中,您只是通过<login>
前缀指定根auth
元素,该前缀指向:http://foo.pro/Auth/
命名空间,而其中的其他元素没有分配给它们的任何命名空间,即你的第二个例子给你一个错误。