我有一个具有以下方法签名的 Java 服务:
@WebMethod(operationName = "getContactList")
public MyListClass getContactList(@WebParam(name = "myList") MyListClass myList) throws IllegalArgumentException {
return myList;
}
public class MyListClass implements Serializable{
List<ContactOD> innerList;
public List<ContactOD> getInnerList() {
if(innerList == null){
innerList = new ArrayList<ContactOD>();
}
return innerList;
}
public void setInnerList(List<ContactOD> innerList) {
this.innerList = innerList;
}
}
当我在 C# 中为此 Java 服务生成代理时,我得到如下方法签名:
public ContactOD[] getContactList(ContactOD[] myList)
我在生成的代理 MyListClass 中没有看到任何包装此 List<ContactOD>
的内容。 .
我需要对 java web 服务或代理的 C# 生成做什么,以便我可以在代理类中看到如下方法:
public MyListClass getContactList(MyListClass myList)
非常感谢, 阿德里安娜
最佳答案
Visual Studio 中的代理生成器不会直接将 Java List 映射到 C# List,而是将其视为数组。如果您希望使用泛型集合,在 C# 方面最简单的做法就是在其他地方简单地使用 List,然后在使用 Web 服务方法时创建到 T[] 或从 T[] 进行创建。
即。
List<ContactOD> contacts = new List<ContactOD>();
contacts.Add(New ContactOD("Tim", "0123456789"));
List<ContactOD> returnValue = new List<ContactOD>(ProxyHolder.getContactList(contacts.ToArray());
关于C# 生成的代理方法与原始 Java 服务方法不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1838404/