2013-05-07 36 views
6

Tôi mới sử dụng các dịch vụ web và tôi đã tạo một dự án cơ bản trong nhật thực với một phương pháp được hiển thị. Tôi đã có thể triển khai dịch vụ web của mình và nó hoạt động tốt. Mã dưới đây.Tạo một dịch vụ web với các loại phức tạp

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); 
    } 
} 

Câu hỏi của tôi là làm cách nào để thiết lập phương pháp này để xử lý các loại phức tạp. Tôi muốn nhận được một số thông số, nhưng tôi không muốn chỉ nhận chúng như một chuỗi các chuỗi. Tôi đã nghĩ đến việc có một số loại đối tượng bao bọc chứa tất cả các tham số tôi cần cho phương pháp của mình. Bất kỳ lời khuyên nào về cách thực hiện điều này? Tôi có cần thêm chú thích để tạo WSDL không? Cảm ơn!

Trả lời

15

JAX-WS dựa trên JAXB để bạn chỉ có thể chuyển các loại được hỗ trợ JAXB làm tham số phương thức web. Vì vậy, bất kỳ người dùng định nghĩa lớp đúng chú thích như đề cập dưới đây có thể được sử dụng như là tham số hoặc kiểu trả về của bất kỳ 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; 
    } 
} 
1

Thứ nhất, thiết lập những loại cuộc gọi webservice của bạn hoặc phản ứng phức tạp chứa trong WSDL của bạn

<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> 

và sau đó xác định những loại phức tạp của bạn có chứa:

 <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> 

Trên mặt Java, bạn cần lớp bao bọc có các trường này với getters và setters

Các vấn đề liên quan