SOAP响应返回ArrayList

时间:2016-08-11 23:26:20

标签: java web-services soap arraylist

我写了一个非常简单的webservice,它返回一个ArrayList。当我尝试使用SOAPUI测试我的Web服务时,响应为空。我正在Tomcat中部署此应用程序。

这是我的代码:

@WebService(endpointInterface = "com.enterprise.ws.WebServiceInterface")
public class WebServiceImpl implements WebServiceInterface{

    @Override
    public ArrayList<String> listSample() {
        // TODO Auto-generated method stub
        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("1212");
        return arrayList;
    }
}

界面:

@WebService
@SOAPBinding(style = Style.RPC)
public interface WebServiceInterface {

    @WebMethod
    ArrayList<String> listSample();

}

这是我的SOAPUI响应。

enter image description here

3 个答案:

答案 0 :(得分:0)

问题可能是由 JAX-B 错误造成的:https://java.net/jira/browse/JAXB-223

问题是,如果您使用 JAX-WS 2.0 / JAX-B 2.0 ,则不能直接将集合类用作@WebMethod的返回类型。

有两种可能的解决方法可以避免此问题:

一种是使用Array而不是ArrayList来避免使用集合类:

<强>接口

@WebService
@SOAPBinding(style = Style.RPC)
public interface WebServiceInterface {

    @WebMethod
    String[] listSample();
}

<强>实施

@WebService(endpointInterface = "com.enterprise.ws.WebServiceInterface")
public class WebServiceImpl implements WebServiceInterface{

    @Override
    public String[] listSample() {
        return new String[]{"1212"};
    }
}

另一种可行的解决方法是创建 POJO 来包裹ArrayList,并在@WebMethod上返回 POJO 类型:

POJO课程

public class PojoSample {

     private List<String> listSample;
     // create getters and setters
     ...
}

POJO界面

@WebService
@SOAPBinding(style = Style.RPC)
public interface WebServiceInterface {

    @WebMethod
    PojoSample listSample();
}

POJO实施

@WebService(endpointInterface = "com.enterprise.ws.WebServiceInterface")
public class WebServiceImpl implements WebServiceInterface{

    @Override
    public PojoSample listSample() {
        List<String> arrayList = new ArrayList<String>();
        arrayList.add("1212");

        PojoSample pojo = new PojoSample();
        pojo.setListSample(arrayList);
        return pojo;
    }
}

希望这有帮助,

答案 1 :(得分:0)

我解决了只使用下面的代码

 @WebMethod(operationName = "listarPersonas")
public List<Persona> listarPersonas() {

    return PersonaService.PERSONAS_REGISTRADAS;
}

只需将List替换为Arraylist。

的问候;

答案 2 :(得分:0)

尝试使用RPC绑定的包装参数样式的soap绑定文档。

@SOAPBinding(style=Style.DOCUMENT,use=Use.LITERAL, parameterStyle=ParameterStyle.WRAPPED)

使用此方法,您可以使用List返回值或参数作为List:

编写Web方法
@WebMethod
@WebResult(name = "returnName")
public List<MyBean> methodName(@WebParam(name = "paramName") List<ParamBean> paramList);