这个被接受(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/认证/",当地:"登录")。期望的元素是<{}login>,<{}password>"
<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服务端做点什么
这是显而易见的。当您定义名称空间时:http://foo.pro/Auth/
在第二个示例中,<login>
和<password>
元素被<login>
包装,属于http://foo.pro/Auth/
名称空间。因为您在根<login>
标记中使用xmlns
声明它,所以其中的所有内容都属于这个名称空间:http://foo.pro/Auth/
。在你的第一个例子中,你只通过auth
前缀分配根<login>
元素,该前缀指向:http://foo.pro/Auth/
名称空间和其他内部没有任何名称空间分配给它们,这就是你的第二个例子给你一个错误。