从Java中的WebService返回ArrayList

时间:2011-07-07 11:19:29

标签: java service arraylist

我在从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";
}

然后这很好用 - 客户端收到"hello there"

2 个答案:

答案 0 :(得分:12)

使用数组而不是ArrayList,因为JAXB无法将集合作为顶级对象处理,仅作为bean的属性。或者,创建一个bean并将ArrayList放入其中。

请参阅错误:JAXB-223: JAXB doesn't support collection classes as top level objects

答案 1 :(得分:3)

我建议创建单独的pojo类,声明一个可变的

private ArrayList ListData;

创建setter / getter方法并使用主类中的POJO类来设置arraylist。 同时,Operation getSimpleArrayList将返回类型更改为POJO类型的返回类型。 因此也要更改wsdl文件。