响应中没有名称空间的 SOAP(Spring 启动)
SOAP without namespace in response (Spring Boot)
我正在关注此 example 以使用 Soap 构建 Web 服务。有没有办法删除 Soap 响应的 targetNamespace?使用 SoapUI 我得到这个响应:
<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>
并且想在没有目标命名空间的情况下获取它,例如喜欢:
...
<MyItem>
<MyItem>
<class>myClass</class>
<name>MyItemName</name>
</MyItem>
我正在发送一个空请求以获取 MyItems 列表。我的 xsd 看起来像这样:
<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>
MyItem class 将自动生成并使用以下注释:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MyItem", propOrder = {
"class",
"name",
})
public class MyItem { //....
有没有办法在没有目标命名空间的情况下获得响应?我知道它的用途,而且它实际上非常有用。但是碰巧它不能被另一个具有这个目标命名空间的工具进一步处理,看起来像这样:
<MyItem xmlns="http://spring.io/guides/gs-producing-web-service"> ...
提前致谢!
Is there any way to get a response without the target namespace?
我希望不会。 SOAP Web 服务应该有一个定义明确、已发布的接口,并且它发送的每个响应都应该符合该接口。通常,接口由 WSDL 文档描述。
And would like to get it without the target namespace
<MyItem>
<class>myClass</class>
<name>MyItemName</name>
</MyItem>
迂腐,没有命名空间前缀不代表没有命名空间。可能有一个有效的默认命名空间。所以你 可以 实现 XML 看起来和上面的完全一样,MyItem,class 和名称标签可能仍然有一个非空的命名空间。
I know its purpose and that it's actually quite useful.
XML 文档(无论是 Web 服务响应还是任何其他 XML)中命名空间的目的是避免污染全局命名空间。您真的希望 'name' 和 'class' 在您的应用程序中具有完全相同的含义吗?或者如果每个模式都可以定义自己的版本会更好吗?
But it happened that it can't be processed any further by another tool with this target namespace and looks like this:
<MyItem xmlns="http://spring.io/guides/gs-producing-web-service"> ...
这看起来是有效的 XML,问题是什么?该输出是由 'other tool' 产生的吗?还是 'other tool' 无法处理?
这是解决该问题的最简单最简单的方法。在您的模型包中创建 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 添加为“合格”。
<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">
我正在关注此 example 以使用 Soap 构建 Web 服务。有没有办法删除 Soap 响应的 targetNamespace?使用 SoapUI 我得到这个响应:
<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>
并且想在没有目标命名空间的情况下获取它,例如喜欢:
...
<MyItem>
<MyItem>
<class>myClass</class>
<name>MyItemName</name>
</MyItem>
我正在发送一个空请求以获取 MyItems 列表。我的 xsd 看起来像这样:
<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>
MyItem class 将自动生成并使用以下注释:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MyItem", propOrder = {
"class",
"name",
})
public class MyItem { //....
有没有办法在没有目标命名空间的情况下获得响应?我知道它的用途,而且它实际上非常有用。但是碰巧它不能被另一个具有这个目标命名空间的工具进一步处理,看起来像这样:
<MyItem xmlns="http://spring.io/guides/gs-producing-web-service"> ...
提前致谢!
Is there any way to get a response without the target namespace?
我希望不会。 SOAP Web 服务应该有一个定义明确、已发布的接口,并且它发送的每个响应都应该符合该接口。通常,接口由 WSDL 文档描述。
And would like to get it without the target namespace
<MyItem>
<class>myClass</class>
<name>MyItemName</name>
</MyItem>
迂腐,没有命名空间前缀不代表没有命名空间。可能有一个有效的默认命名空间。所以你 可以 实现 XML 看起来和上面的完全一样,MyItem,class 和名称标签可能仍然有一个非空的命名空间。
I know its purpose and that it's actually quite useful.
XML 文档(无论是 Web 服务响应还是任何其他 XML)中命名空间的目的是避免污染全局命名空间。您真的希望 'name' 和 'class' 在您的应用程序中具有完全相同的含义吗?或者如果每个模式都可以定义自己的版本会更好吗?
But it happened that it can't be processed any further by another tool with this target namespace and looks like this:
<MyItem xmlns="http://spring.io/guides/gs-producing-web-service"> ...
这看起来是有效的 XML,问题是什么?该输出是由 'other tool' 产生的吗?还是 'other tool' 无法处理?
这是解决该问题的最简单最简单的方法。在您的模型包中创建 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 添加为“合格”。
<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">