我写了一个非常简单的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响应。
答案 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);