我使用Apache CXF 2.7.3,并运行到一个命名空间的问题,我真的不明白。 我已经广泛地尝试在此搜索,但大部分是我找到的结果是不同的行为。 问题是调用Web服务时,它会在参数元素的名称空间限定失败。 消息中的元件的所有其余的是限定的,而且它接受的是,只是没有参数元素。 这里是精确的行为:
请求WITHOUT参数元素合格:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ord="http://www.example.org/order">
<soapenv:Header/>
<soapenv:Body>
<ord:getOrder>
<id>a</id>
</ord:getOrder>
</soapenv:Body>
</soapenv:Envelope>
结果是成功的:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getOrderResponse xmlns:ns2="http://www.example.org/order">
<return>
<ns2:errorCode/>
<ns2:errorMessage/>
<ns2:order>
<ns2:orderNumber>ABC123</ns2:orderNumber>
<ns2:lastName>Smith</ns2:lastName>
</ns2:order>
</return>
</ns2:getOrderResponse>
</soap:Body>
</soap:Envelope>
WITH参数合格要求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ord="http://www.example.org/order">
<soapenv:Header/>
<soapenv:Body>
<ord:getOrder>
<ord:id>a</ord:id>
</ord:getOrder>
</soapenv:Body>
</soapenv:Envelope>
导致从JAXB异常:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Unmarshalling Error: unexpected element (uri:"http://www.example.org/order", local:"id"). Expected elements are <{}id></faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
在所有我做过的研究,这通常意味着一个命名空间不匹配的地方。 但我已经彻底检查它,命名空间是相同的无处不在,包括ObjectFactory.class,包info.class和CXF-servlet.xml中的配置文件以及@WebService注释。 任何人都可以点我在正确的方向,以什么我在这里失踪?