Подтвердить что ты не робот

Возврат ArrayList из WebService в Java

У меня возникла проблема с возвратом ArrayList из моей веб-службы (Java).

Я написал тестовый веб-сервис и клиент, который его использует. Все, кажется, работает нормально - клиент вызывается сервером, и сервер получает запрос на операцию.

Однако я написал простой метод, который я хочу, чтобы он возвращал 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.

Если я исследую WSDL по моему URL-адресу (http://127.0.0.1:9876/myservice-sql?wsdl) для executeSelectSQL, он выглядит так:

<message name="executeSelectSQLResponse">
    <part name="return" type="tns:arrayList"/>
</message>

Я пропустил что-то очевидное?

Edit:

Однако, если у меня есть веб-метод, то в интерфейсе определяется как:

@WebMethod
String getAString();

и реализация сервера:

@Override
public String getAString() {
    return "hello there";
}

тогда это отлично работает - "hello there" получен на клиенте.

4b9b3361

Ответ 2

Я предлагаю создать отдельный класс pojo, где объявить vaiable

private ArrayList ListData;

создать метод setter/getter и использовать класс POJO в вашем основном классе для установки arraylist. В то же время операция getSimpleArrayList изменяет тип возвращаемого значения на тип POJO. Соответственно также измените файл wsdl.