6

我是 Web 服务的新手,我使用一种公开的方法在 Eclipse 中创建了一个基本项目。我能够部署我的网络服务并且它工作正常。代码如下。

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 吗?谢谢!

4

2 回答 2

15

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;
    }
}
于 2013-05-07T11:55:37.383 回答
1

首先,设置您的 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 的字段

于 2013-05-07T11:56:16.933 回答