我们正在建立一个web服务(基于CXF)由一个Java类(Java2WS)用下面的方法驱动:Web服务与CXF:如何使用ResponseWrapper?
@WebMethod
@RequestWrapper(className = "com.myproject.wrapper.MyRequestWrapper")
@ResponseWrapper(className = "com.myproject.wrapper.MyResponseWrapper")
public MyResponse verifyCode(@WebParam(name = "code") String code) {
...
return new MyResponse("Hello",StatusEnum.okay);
}
我使用包装来定义请求RESP的元素。更详细的响应:正确的元素名称(以大写字母开头),必需和可选元素,...)。但我不知道这是做正确的方式(没有深入了解包装的文档,不是吗?)
类MyResponse:
public class MyResponseWrapper {
private String result;
private ModeEnum status;
// getters and setters
}
类MyReponseWrapper
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "myResponse")
public class MyResponseWrapper {
@XmlElement(name="Result")
private String result;
@XmlElement(name = "Status")
private StatusEnum status;
public MyResponseWrapper() {
result="fu"; // just for testing
}
// getters and setters
}
目前我不明白包装。当我返回一个MyReponse的实例时,MyResponse的数据如何被分别注入到响应的SOAP主体中?
通过测试这个web服务,我可以看到MyResponseWrapper的一个实例被实例化,并且SOAP正文包含正确的元素,但包含默认数据(例如:result =“fu”而不是“Hello”)。我预计CXF会将来自MyResponse的匹配数据注入MyResponseWrapper。那是错的吗?
如果这是错误的方式: 使用Java2WS时,Wat是指定生成的SOAP xml的正确方法吗?
顺便说一句:上面的源代码片段只是从我们更复杂(更多字段)类中取得的例子。