我在java中有一个在jax-ws上实现的web服务。此Web服务返回User的通用列表。它的工作非常好:)。
@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生成数组而不是od通用列表'Group [] Groups'。我将“配置服务引用...”对话框中的“集合类型”更改为“System.Collections.Generic.List”,但VS生成数组:(。
我需要VS生成通用列表或ArrayList,我应该怎么做?
答案 0 :(得分: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:element minOccurs="0" maxOccurs="1" name="LineItems" type="tns:ArrayOfLineItem" />
ArrayOfLineItem
定义为:
<s:complexType name="ArrayOfLineItem">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="LineItem" nillable="true" type="tns:LineItem" />
</s:sequence>
</s:complexType>
当然,LineItem
类本身也在其他地方定义。希望这会有所帮助。
答案 1 :(得分:1)
我建议不要在Web服务中使用特定于语言的构造,因为Web服务意味着与语言无关。
如果你真的想要,但你不应该写一个特定的序列化器/反序列化器,你无法确定它是否适用于所有语言。
我只想坚持一个数组然后用你选择的yo语言写一个包装器。