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

时间:2013-06-13 19:12:11

标签: java xml soap cxf xml-namespaces

接受这个(显式声明的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服务端

1 个答案:

答案 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/命名空间,而其中的其他元素没有分配给它们的任何命名空间,即你的第二个例子给你一个错误。