我們正在建立一個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的正確方法嗎?
順便說一句:上面的源代碼片段只是從我們更復雜(更多字段)類中取得的例子。