没有命名空间的SOAP响应(Spring Boot)

时间:2015-12-18 10:11:45

标签: java soap spring-boot xml-namespaces jaxb2

我跟随此example以使用Soap构建Web服务。有没有办法删除Soap响应的targetNamespace?有了SoapUI,我得到了这个回复:

$(function() {
  var href = window.location.href;
  $('nav a').each(function(e,i) {
    if (href.indexOf($(this).attr('href')) >= 0) {
      $(this).addClass('active');
    }
  });
});

并希望在没有目标命名空间的情况下获得它,例如喜欢:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
 <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
   <ns2:getAllResponse xmlns:ns2="http://spring.io/guides/gs-producing-web-service">
    <ns2:timestamp>12/18/2015 10:51:02 AM</ns2:timestamp>
    <ns2:MyItem>
       <ns2:class>myClass</ns2:class>
       <ns2:name>MyItemName</ns2:name>
    </ns2:MyItem>
  </ns2:getAllResponse>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我发送空请求以获取MyItems列表。我的xsd看起来像这样:

...    
<MyItem>
<MyItem>
       <class>myClass</class>
       <name>MyItemName</name>
</MyItem>

MyItem类将自动生成并使用以下内容进行注释:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" 
xmlns:tns="http://spring.io/guides/gs-producing-web-service"     
targetNamespace="http://spring.io/guides/gs-producing-web-service">

 <xs:element name="getAllRequest">
    <xs:complexType>
        <xs:sequence>
        </xs:sequence>
    </xs:complexType>
 </xs:element>

 <xs:element name="getAllResponse">
    <xs:complexType>
        <xs:sequence>
            <xs:element maxOccurs="1" name="timestamp" type="xs:string"/>
            <xs:element maxOccurs="unbounded" name="MyItem" type="tns:MyItem"/>
        </xs:sequence>
    </xs:complexType>
 </xs:element>   

 <xs:complexType name="MyItem">
    <xs:sequence>
        <xs:element name="class" type="xs:string"/>
        <xs:element name="name" type="xs:string"/>
    </xs:sequence>
 </xs:complexType>
</xs:schema>

有没有办法在没有目标命名空间的情况下获得响应?我知道它的目的,它实际上非常有用。但事实是它不能被另一个具有此目标命名空间的工具进一步处理,如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MyItem", propOrder = {
   "class",
   "name",
})
public class MyItem { //....

提前致谢!

1 个答案:

答案 0 :(得分:0)

这是该问题的最简单解决方案。在模型包中创建Package-Info.Java文件,并在其中添加以下脚本。

@javax.xml.bind.annotation.XmlSchema(namespace = "http://spring.io/guides/gs-producing-web-service", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns = { @javax.xml.bind.annotation.XmlNs(namespaceURI = "http://spring.io/guides/gs-producing-web-service", prefix = "") })
package my.com.scicom.stars.model;

并在xsd或wsdl文件中将elementFormDefault添加为“ qualified”。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://spring.io/guides/gs-producing-web-service"
           targetNamespace="http://spring.io/guides/gs-producing-web-service"
           elementFormDefault="qualified">