使用JaxWS时将名称空间声明移动到根元素

时间:2014-04-25 12:20:27

标签: web-services soap jax-ws

我想使用JaxWS调用外部SOAP Web服务。 JaxWS以

的形式发送请求
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <messageRootElement xmlns="some.ns">
      <sampleChild>Content</sampleChild>
    </messageRootElement>
  </soap:Body>
</soap:Envelope>

在SoapUI中调用模拟服务设置正常。据称,实际的外部Web服务无法使用该格式(我无法使用外部Web服务进行开发)。

外部Web服务似乎与表单

的请求一起使用
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sns="some.ns">
  <soap:Body>
    <sns:messageRootElement>
      <sns:sampleChild>Content</sns:sampleChild>
    </sns:messageRootElement>
  </soap:Body>
</soap:Envelope>

这也是SoapUI如何从有问题的WSDL生成样本请求的。

我的问题是:如何告诉JaxWS以后一种形式发送请求?我认为,根据某些标准,两者都是有效的,但我没有丝毫的线索,外部Web服务所基于的技术,以及它与所涉及的标准的一致性。

向我解释说,不可能以这种方式改变JaxWS行为(如果是这种情况),也是一个有用的答案。

1 个答案:

答案 0 :(得分:1)

您需要修改 package-info.java 文件,该文件是作为Web服务调用所需实体的一部分生成的。修改文件如下:

@javax.xml.bind.annotation.XmlSchema(
    namespace = "some.ns",
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
    xmlns = {
        @javax.xml.bind.annotation.XmlNs(
            prefix = "sns",
            namespaceURI = "some.ns")
    })

package some.ns;