Java 创建具有复杂类型的web服务
我是web服务新手,我在eclipse中用一个公开的方法创建了一个基本项目。我能够部署我的Web服务,它工作得很好。代码如下Java 创建具有复杂类型的web服务,java,web-services,jax-ws,Java,Web Services,Jax Ws,我是web服务新手,我在eclipse中用一个公开的方法创建了一个基本项目。我能够部署我的Web服务,它工作得很好。代码如下 import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @WebService(targetNamespace="http://test.com", name="testService") public class WebService { @WebM
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService(targetNamespace="http://test.com", name="testService")
public class WebService {
@WebMethod(operationName="start")
public String start(@WebParam(name="inputParameter") String inputParameter) {
return startMethod(inputParameter);
}
}
我的问题是如何设置此方法来处理复杂类型。我想接收一些参数,但我不想只接收一堆字符串。我在考虑使用某种包装器对象,它包含我的方法所需的所有参数。有什么建议吗?我是否需要其他注释来创建WSDL?谢谢 JAX-WS基于JAXB,因此只能将JAXB支持的类型作为web方法参数传递。因此,任何正确注释的用户定义类(如下面提到的)都可以用作任何WebMethod的参数或返回类型
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Person")
public class Person {
@XmlElement(name = "firstName")
protected String firstName;
@XmlElement(name = "lastName")
protected String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String value) {
this.firstName = value;
}
public String getLastName() {
return lastName;
}
public void setLastName(String value) {
this.lastName = value;
}
}
首先,设置您的Web服务调用或响应在WSDL中包含的复杂类型
<xsd:element name="AWebServiceElementName">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="header" type="tns:ReplyHeader"/>
<xsd:element maxOccurs="1" minOccurs="1" name="body">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="acomplextype" type="tns:acomplextype"/>
<xsd:element maxOccurs="1" minOccurs="1" name="anothercomplextype" type="tns:anothercomplextype"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
然后定义复杂类型包含的内容:
<xsd:complexType name="acomplextype">
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="somefieldid" type="xsd:long"/>
<xsd:element maxOccurs="1" minOccurs="1" name="somestring" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="anothercomplextype">
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="somefieldid" type="xsd:long"/>
<xsd:element maxOccurs="1" minOccurs="1" name="somestring" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
在Java方面,您需要一个包装类,它包含这些字段以及getter和setter