2015-09-27 43 views
1

爲什麼不會wsimport保留我的模型類的toString()方法? 所以我有這個模型類在我的web服務:JAX-WS的wsimport不會保持toString()?

package webservice; 
public class Book { 
    private String title; 
    private int pages; 
    public String getTitle() { 
     return title; 
    } 
    public void setTitle(String title) { 
     this.title = title; 
    } 
    public int getPages() { 
     return pages; 
    } 
    public void setPages(int pages) { 
     this.pages = pages; 
    } 
    @Override 
    public String toString() { 
     return "Book [title=" + title + ", pages=" + pages + "]"; 
    } 
} 

現在,我要生成一個Web服務客戶端所需的構件:

wsimport -keep http://localhost:8080/LibraryWs/BookWebServiceService?wsdl

,並得到結果類:

package webservice; 
import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlType; 

/** 
* <p>Java class for book complex type. 
* 
* <p>The following schema fragment specifies the expected content contained within this class. 
* 
* <pre> 
* &lt;complexType name="book"> 
* &lt;complexContent> 
*  &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> 
*  &lt;sequence> 
*   &lt;element name="pages" type="{http://www.w3.org/2001/XMLSchema}int"/> 
*   &lt;element name="title" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> 
*  &lt;/sequence> 
*  &lt;/restriction> 
* &lt;/complexContent> 
* &lt;/complexType> 
* </pre> 
* 
* 
*/ 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "book", propOrder = { 
    "pages", 
    "title" 
}) 
public class Book { 

    protected int pages; 
    protected String title; 

    /** 
    * Gets the value of the pages property. 
    * 
    */ 
    public int getPages() { 
     return pages; 
    } 

    /** 
    * Sets the value of the pages property. 
    * 
    */ 
    public void setPages(int value) { 
     this.pages = value; 
    } 

    /** 
    * Gets the value of the title property. 
    * 
    * @return 
    *  possible object is 
    *  {@link String } 
    *  
    */ 
    public String getTitle() { 
     return title; 
    } 

    /** 
    * Sets the value of the title property. 
    * 
    * @param value 
    *  allowed object is 
    *  {@link String } 
    *  
    */ 
    public void setTitle(String value) { 
     this.title = value; 
    } 
} 

所以沒有toString :)我在哪裏可以找到有關此行爲的規範或我怎樣才能讓jax-ws明確包含th在我的WSDL中的方法?謝謝。

回答

2

這實際上是一個愚蠢的問題,因爲在WSDL中只有類成員變量被翻譯,而不是方法。它們編碼爲complexType。 我想說,如果你想暴露的方法,它必須進入@WebService和(可選)註釋@WebMethod。否則,只有您的webservice使用的類的屬性纔會進入WSDL。 所以這裏http://localhost:8080/LibraryWs/BookWebServiceService?xsd=1我們將有:

<?xml version='1.0' encoding='UTF-8'?><!-- Published by JAX-WS RI (http://jax-ws.java.net). RI's version is Metro/2.3.1-b419 (branches/2.3.1.x-7937; 2014-08-04T08:11:03+0000) JAXWS-RI/2.2.10-b140803.1500 JAXWS-API/2.2.11 JAXB-RI/2.2.10-b140802.1033 JAXB-API/2.2.12-b140109.1041 svn-revision#unknown. --><xs:schema xmlns:tns="http://webservice/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://webservice/"> 

<xs:element name="addBook" type="tns:addBook"/> 
<xs:element name="addBookResponse" type="tns:addBookResponse"/> 
<xs:element name="getAllBooks" type="tns:getAllBooks"/> 
<xs:element name="getAllBooksResponse" type="tns:getAllBooksResponse"/> 
<xs:complexType name="getAllBooks"> 
<xs:sequence/> 
</xs:complexType> 

<xs:complexType name="getAllBooksResponse"> 
<xs:sequence> 
<xs:element name="return" type="xs:string" minOccurs="0"/> 
</xs:sequence> 
</xs:complexType> 

<xs:complexType name="addBook"> 
<xs:sequence> 
<xs:element name="arg0" type="tns:book" minOccurs="0"/> 
</xs:sequence> 
</xs:complexType> 

<xs:complexType name="book"> 
<xs:sequence> 
<xs:element name="pages" type="xs:int"/> 
<xs:element name="title" type="xs:string" minOccurs="0"/> 
</xs:sequence> 
</xs:complexType> 

<xs:complexType name="addBookResponse"> 
<xs:sequence/> 
</xs:complexType> 
</xs:schema>