簡體   English   中英

Web服務與CXF:如何使用ResponseWrapper?

[英]Webservice with CXF: How to use the ResponseWrapper?

我們正在使用以下方法創建一個由java類(Java2WS)驅動的Web服務(基於CXF):

  @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
}

目前我不了解Wrappers。 當我返回MyReponse的一個實例時,MyResponse的數據如何被分別注入MyResponseWrapper到響應的SOAP主體?

通過測試這個Web服務,我可以看到MyResponseWrapper的實例被實例化,SOAP主體包含正確的元素,但是包含默認數據(例如:result =“fu”而不是“Hello”)。 我預計CXF會將MyResponse的匹配數據注入MyResponseWrapper。 那是錯的嗎?

如果這是錯誤的方法:在使用Java2WS時,Wat是指定生成的SOAP xml的正確方法嗎?

順便說一下:上面的源代碼片段只是從我們更復雜(更多字段)類中獲取的示例。

這是正確的方法。 請求和響應包裝器只允許覆蓋請求/響應元素的xml命名空間和元素/屬性名稱; - 分別映射到用於管理這些值的方法。

參考: http//cxf.apache.org/docs/developing-a-service.html#DevelopingaService-The@RequestWrapperannotation

@RequestWrapper注釋由javax.xml.ws.RequestWrapper接口定義。 它被放置在SEI中的方法上。 顧名思義,@ RequestWrapper指定實現包裝在遠程調用中發送的請求消息中的方法參數的包裝bean的Java類。 它還用於指定運行時在編組和解組請求消息時使用的元素名稱和名稱空間。

下表描述了@RequestWrapper注釋的屬性。

的localName

指定請求消息的XML表示形式中包裝元素的本地名稱。 默認值是方法的名稱或@WebMethod注釋的operationName屬性的值。

目標名稱

指定定義XML包裝器元素的名稱空間。 默認值是SEI的目標命名空間。

班級名稱

指定實現包裝元素的Java類的全名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM