2010-01-31 51 views
2

我有一個在jax-ws上實現的java的web服務。該Web服務返回用戶的通用列表。它工作得很好:)。如何配置WebService以返回ArrayList而不是Array?

@Stateless(name = "AdminToolSessionEJB") 
@RemoteBinding(jndiBinding = "AdminToolSessionRemote") 
@Remote(AdminToolSessionRemote.class) 
@WebService 
public class AdminToolSessionBean implements AdminToolSessionRemote { 
... 
@WebMethod(operationName = "GetAllUsers") 
@WebResult(name = "AllUsers") 
public List<User> getAllUsers() { 
    return userSessionRemote.getAllUsers(); 
} 
... 
} 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "User") 
public class User extends BasicDataTransferObject { 
... 
@XmlElement(name = "Groups") 
private List<Group> groups; 
... 
} 

但我會在.Net應用程序中使用此Web服務。當我在VS2005或VS2008或VS2010中將此Web服務添加爲wcf服務或Web服務時,VS會生成數組而不是泛型列表'Group [] Groups'。我將'配置服務參考...'對話框中的'集合類型'更改爲'System.Collections.Generic.List',但VS生成陣列:(。

我需要VS生成通用列表或ArrayList,我應該怎麼辦?

回答

1

我建議不使用web服務的特定語言的結構,因爲web服務,就是要語言無關。

如果你真的想,但你不應該你將不得不寫具體的序列化器/反序列化器,你不能確定它將以所有語言工作。

我只會堅持到一個數組,然後用yo語言編寫一個包裝器。

2

我不知道如何在java中定義這個。然而,在我的C#的服務,我的主要事務參數(採購訂單)包含這樣定義的訂單項列表:

private LineItems LineItemsField; 
[DataMember(Order=13, EmitDefaultValue=false)] 
public LineItems LineItems { 
    get { return this.LineItemsField; } 
    set { this.LineItemsField = value; } 
} 

LineItems是另一個C#類,像這樣的定義:

[CollectionDataContract(Namespace="")] 
public class LineItems : List<LineItem> 
{ 
} 

LineItem是包含訂單項字段的實際類。

LineItems出現在WSDL爲:

<s:complexType name="ArrayOfLineItem"> 
    <s:sequence> 
     <s:element minOccurs="0" maxOccurs="unbounded" name="LineItem" nillable="true" type="tns:LineItem" /> 
    </s:sequence> 
</s:complexType> 

當然並且,LineItem類本身在別處定義:

<s:element minOccurs="0" maxOccurs="1" name="LineItems" type="tns:ArrayOfLineItem" /> 

ArrayOfLineItem如定義。希望有幫助。

+0

感謝您的幫助,在.Net中,是的,Web服務生成類似於List和Collection樣本的WSDL。但是我無法通過jaxb來創建這個WSDL,爲了測試我編寫了一個XSD文件並構建了這樣的結構,不幸的是,這個方便的WSDL不會生成List。沒問題,我的同事編寫映射器將我們的DTO映射到我們想要的模型。這是一個很好的解決方法,但每次我有空閒時間再次測試你的想法。 – 2010-01-31 14:00:27

相關問題