2013-05-07 23 views
6

Web servislerine yeniyim ve bir açık yöntemle tutulmada temel bir proje oluşturdum. Web servisimi dağıttım ve gayet iyi çalışıyor. Kod aşağıda.Karmaşık türlerle bir web hizmeti oluşturma

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

Sorum şu: Karmaşık türlerle başa çıkmak için bu yöntemi nasıl kurarım. Bir dizi parametre almak istiyorum, ancak bunları sadece bir dizi ip olarak almak istemiyorum. Metoduma ihtiyacım olan tüm parametreleri içeren bir çeşit sarmalayıcı nesneye sahip olmayı düşünüyordum. Bunu nasıl yapacağınız konusunda herhangi bir tavsiyeniz var mı? WSDL'yi oluşturmak için ek açıklamalara ihtiyacım var mı? Teşekkürler!

cevap

15

JAX-WS böylece sadece JAXB bir web yöntemi parametreleri olarak türlerini desteklenen iletebilirsiniz JAXB dayanmaktadır. Yani herhangi bir kullanıcı tanımlı sınıf düzgün aşağıda belirtilen gibi parametre olarak kullanılan ya da herhangi bir WebMethod sizin WSDL içeren karmaşık ne tür sizin webservice arama veya cevap

@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

Öncelikle kurulum türünü iade edilebilir açıklamalı

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

ve sonra karmaşık türleri ne içerdiğini define: Eğer Alıcı ve ayarlayıcılarınile bu alanları içerir bir sarmalayıcı sınıf ihtiyacım Java tarafında

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