从 soap 响应中删除 <return> 元素 - JaxWs
Remove <return> element from soap response - JaxWs
我有以下 类,我基本上是在重写一些现有服务,不得不使用 'wsimport' 从 wsdl 生成以下 类。 Soap 响应必须与它在遗留代码中使用 return 的方式完全相似。以下是导入生成的 类。
<return>
元素以某种方式添加到 soap 响应中,我已经检查了我的 类 并且我在生成的导入中没有看到任何地方。知道如何删除这些吗?
我在这里查看了这个解决方案 Remove element <return> in JAX-WS SOAP Response 但它对我来说并不理想。
package org.openuri;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import net.tds.msa.address.addressvalues.Values;
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element ref="{http://xx.net/msa/Address/AddressValues.xsd}AddressValuesResponse"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"addressValuesResponse"
})
@XmlRootElement(name = "getPostDirectionalResponse")
public class GetPostDirectionalResponse {
@XmlElement(name = "AddressValuesResponse", namespace = "http://xx.net/msa/Address/AddressValues.xsd", required = true)
protected Values addressValuesResponse;
/**
* Gets the value of the addressValuesResponse property.
*
* @return
* possible object is
* {@link Values }
*
*/
public Values getAddressValuesResponse() {
return addressValuesResponse;
}
/**
* Sets the value of the addressValuesResponse property.
*
* @param value
* allowed object is
* {@link Values }
*
*/
public void setAddressValuesResponse(Values value) {
this.addressValuesResponse = value;
}
}
和
package net.xx.msa.address.addressvalues;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Java class for values complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType name="values">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="AddressValue" type="{http://xx.net/msa/Address/AddressValues.xsd}AddressValue" maxOccurs="unbounded" minOccurs="0"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "values", propOrder = {
"addressValue"
})
public class Values {
@XmlElement(name = "AddressValue")
protected List<AddressValue> addressValue;
/**
* Gets the value of the addressValue property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the addressValue property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getAddressValue().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link AddressValue }
*
*
*/
public List<AddressValue> getAddressValue() {
if (addressValue == null) {
addressValue = new ArrayList<AddressValue>();
}
return this.addressValue;
}
}
响应是添加<return>
元素的地方。如何在不使用 jaxws 中的 soap 处理程序的情况下删除它?
<ns3:getPostDirectionalResponse xmlns:ns2="http://xx.net/msa/Address/AddressValues.xsd" xmlns:ns3="http://www.openuri.org/">
<return>
<ns2:AddressValuesResponse>
<ns2:AddressValue>
<ns2:value>South</ns2:value>
<ns2:valueAbbrev>S</ns2:valueAbbrev>
</ns2:AddressValuesResponse>
</return>
</ns3:getPostDirectionalResponse>
在您的服务端点界面中,将 @SOAPBinding(parameterStyle=ParameterStyle.BARE)
添加到您的 @WebMethod
:
package org.openuri;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.ParameterStyle;
@WebService
public interface ExampleService {
@WebMethod
@SOAPBinding(parameterStyle=ParameterStyle.BARE)
GetPostDirectionalResponse getPostDirectional(String input);
}
这会将 getPostDirectionalResponse
元素的生成架构(对我而言)更改为:
<xs:element name="getPostDirectionalResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="AddressValuesResponse" type="tns:values" form="qualified"/>
</xs:sequence>
</xs:complexType>
</xs:element>
并且生成的 soap 响应是裸露的(展开,没有 <return>
):
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns3:getPostDirectionalResponse xmlns:ns2="http://xx.net/msa/Address/AddressValues.xsd" xmlns:ns3="http://openuri.org/">
<ns2:AddressValuesResponse>
<AddressValue>hello</AddressValue>
</ns2:AddressValuesResponse>
</ns3:getPostDirectionalResponse>
</S:Body>
</S:Envelope>
但是BARE自带a constraint——服务操作只能有一个argument/input.
您好,我遇到了同样的问题,我的解决方案是:
在网络服务文件中
@WebService(serviceName = "MyService")
public class MyService{
@WebResult(header = true, name = "ResponseLastWrapperElement", targetNamespace = "")
//服务的包含
我希望这对更多人有用!!!
我有以下 类,我基本上是在重写一些现有服务,不得不使用 'wsimport' 从 wsdl 生成以下 类。 Soap 响应必须与它在遗留代码中使用 return 的方式完全相似。以下是导入生成的 类。
<return>
元素以某种方式添加到 soap 响应中,我已经检查了我的 类 并且我在生成的导入中没有看到任何地方。知道如何删除这些吗?
我在这里查看了这个解决方案 Remove element <return> in JAX-WS SOAP Response 但它对我来说并不理想。
package org.openuri;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import net.tds.msa.address.addressvalues.Values;
/**
* <p>Java class for anonymous complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element ref="{http://xx.net/msa/Address/AddressValues.xsd}AddressValuesResponse"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"addressValuesResponse"
})
@XmlRootElement(name = "getPostDirectionalResponse")
public class GetPostDirectionalResponse {
@XmlElement(name = "AddressValuesResponse", namespace = "http://xx.net/msa/Address/AddressValues.xsd", required = true)
protected Values addressValuesResponse;
/**
* Gets the value of the addressValuesResponse property.
*
* @return
* possible object is
* {@link Values }
*
*/
public Values getAddressValuesResponse() {
return addressValuesResponse;
}
/**
* Sets the value of the addressValuesResponse property.
*
* @param value
* allowed object is
* {@link Values }
*
*/
public void setAddressValuesResponse(Values value) {
this.addressValuesResponse = value;
}
}
和
package net.xx.msa.address.addressvalues;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Java class for values complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType name="values">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="AddressValue" type="{http://xx.net/msa/Address/AddressValues.xsd}AddressValue" maxOccurs="unbounded" minOccurs="0"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "values", propOrder = {
"addressValue"
})
public class Values {
@XmlElement(name = "AddressValue")
protected List<AddressValue> addressValue;
/**
* Gets the value of the addressValue property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the addressValue property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getAddressValue().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link AddressValue }
*
*
*/
public List<AddressValue> getAddressValue() {
if (addressValue == null) {
addressValue = new ArrayList<AddressValue>();
}
return this.addressValue;
}
}
响应是添加<return>
元素的地方。如何在不使用 jaxws 中的 soap 处理程序的情况下删除它?
<ns3:getPostDirectionalResponse xmlns:ns2="http://xx.net/msa/Address/AddressValues.xsd" xmlns:ns3="http://www.openuri.org/">
<return>
<ns2:AddressValuesResponse>
<ns2:AddressValue>
<ns2:value>South</ns2:value>
<ns2:valueAbbrev>S</ns2:valueAbbrev>
</ns2:AddressValuesResponse>
</return>
</ns3:getPostDirectionalResponse>
在您的服务端点界面中,将 @SOAPBinding(parameterStyle=ParameterStyle.BARE)
添加到您的 @WebMethod
:
package org.openuri;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.ParameterStyle;
@WebService
public interface ExampleService {
@WebMethod
@SOAPBinding(parameterStyle=ParameterStyle.BARE)
GetPostDirectionalResponse getPostDirectional(String input);
}
这会将 getPostDirectionalResponse
元素的生成架构(对我而言)更改为:
<xs:element name="getPostDirectionalResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="AddressValuesResponse" type="tns:values" form="qualified"/>
</xs:sequence>
</xs:complexType>
</xs:element>
并且生成的 soap 响应是裸露的(展开,没有 <return>
):
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns3:getPostDirectionalResponse xmlns:ns2="http://xx.net/msa/Address/AddressValues.xsd" xmlns:ns3="http://openuri.org/">
<ns2:AddressValuesResponse>
<AddressValue>hello</AddressValue>
</ns2:AddressValuesResponse>
</ns3:getPostDirectionalResponse>
</S:Body>
</S:Envelope>
但是BARE自带a constraint——服务操作只能有一个argument/input.
您好,我遇到了同样的问题,我的解决方案是:
在网络服务文件中
@WebService(serviceName = "MyService")
public class MyService{
@WebResult(header = true, name = "ResponseLastWrapperElement", targetNamespace = "")
//服务的包含
我希望这对更多人有用!!!