CXF 不接受具有默认 xml 命名空间的 SOAP 请求



这个被接受(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/名称空间和其他内部没有任何名称空间分配给它们,这就是你的第二个例子给你一个错误。

最新更新