2012-02-10 58 views
0

我有一個Java WebService方法,出於性能原因需要將zip對象的大對象列表返回給.NETCF應用程序。 wsdl是從Tomcat自動生成的。 我已經實現了這個代碼:使用JAX-WS聲明Web方法中未使用的類型

@WebService 
public class WS { 
    @WebMethod 
    public byte[] getData() { 
    // Get Data object list 
    List<Data> list = getDataFromDatabase(); 
    Data[] arr = new Data[list.size()]; 
    list.toArray(arr); 

    // Compress data 
    byte[] zipData = getZipData(arr); 
    return zipData; 
    } 
} 

的問題是數據對象未在WSDL中聲明,當.NETCF程序解壓縮的結果,它無法解析的類型。所以,我在WebService的實現了這個另一種方法:

@WebMethod 
public Data[] getData() { ... } 

現在,.NETCF知道數據對象的存在,因爲它出現在生成的WSDL,但我不使用這種方法的任何東西。 是否有任何方式或註解用於在不使用方法的情況下在Java WebService代碼中聲明Data對象?例如:

@WebService 
public class WS { 
    @WebType 
    public Data; 

    @WebMethod 
    public byte[] getData() { ... } 
} 

由於

回答

1

根據this,您的字節數組應該被映射到一個base64binaryhexbinary類型。 要在wsdl文件中包含複雜類型(實際上它將被放入中引用的xsd),我將@XmlAccessorType註釋添加到類定義中。例如:

@XmlAccessorType(XmlAccessType.FIELD) 
public class Data { 
... 
} 

xsd應包含該類的聲明,其中包含所有字段。

但是,如果您要從您的方法返回byte[],我不明白如何聲明Data類型將有所幫助。你必須尋找一個從返回類型到你可以在你的客戶端中使用的映射。

+0

我遵循這些步驟:當我在Java WebsService中有Data對象時,我將它序列化爲XML,然後將XML字符串轉換爲byte [],最後壓縮這些字節併發送。當.NETCF接收到byte []時,解壓縮以獲取原始XML並反序列化爲Data對象。如果Data對象未在wsdl中發佈,則.NETCF無法對其進行反序列化。 – user1151816 2012-02-10 11:28:48

相關問題