我从Web服务(
Java)返回ArrayList时遇到问题.
我已经写了一个测试Web服务和客户端,它消耗它.所有这些都可以正常工作 – 即客户端正在调用服务器并且服务器接收到操作请求.
但是,我写了一个简单的方法,我希望它返回一个ArrayList.
我的界面定义如下:
@WebService @SOAPBinding(style = Style.RPC) public interface IsqlServerConnectionWS { @WebMethod ArrayList getSimpleArrayList(); }
我有我的服务器端实现返回ArrayList:
@WebService(endpointInterface="WebServices.IsqlServerConnectionWS") public class sqlConnectionWSServer implements IsqlServerConnectionWS { @Override public ArrayList getSimpleArrayList() { ArrayList al = new ArrayList(); al.add( "This" ); al.add( "is" ); al.add( "a" ); al.add( "test" ); return al; } }
最后我的客户来电话:
ArrayList results = server.getSimpleArrayList();
服务器填充数组列表.但是,在客户端,ArrayList为空.它的大小为0.
如果我在我的URL(http://127.0.0.1:9876/myservice-sql?wsdl)检查了executeSelectsql的WSDL,它看起来像:
<message name="executeSelectsqlResponse"> <part name="return" type="tns:arrayList"/> </message>
我错过了什么吗?
编辑:
但是,如果我在界面中定义了一个Web方法:
@WebMethod String getAString();
和服务器实现:
@Override public String getAString() { return "hello there"; }
那么这样做很好 – 在客户端收到“你好”.
解决方法
使用数组而不是ArrayList,因为JAXB无法将集合作为顶级对象处理,仅作为bean的属性.或者,创建一个bean并将ArrayList放在其中.
查看错误:JAXB-223: JAXB doesn’t support collection classes as top level objects