Webservice с CXF: Как сделать использовать ResponseWrapper?

Мы создаем веб-сервис (на основе CXF), управляемый классом Java (Java2WS), с помощью следующего метода:

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

Я использую оболочки для определения элементов запроса, соответственно. ответ более подробно: правильные имена элементов (которые начинаются с символа верхнего регистра), обязательные и необязательные элементы, ...). Но я не уверен, что это правильный способ сделать это (нет подробной документации об оболочках, не так ли? не так ли?)

Класс 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 вводятся в MyResponseWrapper, соответственно, в тело SOAP-ответа?

При тестировании этого веб-сервиса я вижу, что создается экземпляр MyResponseWrapper, а тело SOAP содержит правильные элементы, но с данными по умолчанию (например: result = "fu" вместо "Hello"). Я ожидал, что CXF внедрит соответствующие данные из MyResponse в MyResponseWrapper. Это неправильно?

Если это неправильный способ: как данные из MyResponse вводятся в MyResponseWrapper в соответствии с телом SOAP ответа?

При тестировании этого веб-сервиса я вижу, что создается экземпляр MyResponseWrapper, а тело SOAP содержит правильные элементы, но с данными по умолчанию (например: result = "fu" вместо "Hello"). Я ожидал, что CXF внедрит соответствующие данные из MyResponse в MyResponseWrapper. Это неправильно?

Если это неправильный способ: как данные из MyResponse вводятся в MyResponseWrapper в соответствии с телом SOAP ответа?

При тестировании этого веб-сервиса я вижу, что создается экземпляр MyResponseWrapper, а тело SOAP содержит правильные элементы, но с данными по умолчанию (например: result = "fu" вместо "Hello"). Я ожидал, что CXF внедрит соответствующие данные из MyResponse в MyResponseWrapper. Это неправильно?

Если это неправильный способ: Wat - это правильный способ указать результирующий XML-код SOAP при использовании Java2WS?

Между прочим: приведенные выше фрагменты исходного кода - это просто примеры, взятые из наших более сложных (с большим количеством полей) классов.

10
задан Bert Speckels 20 November 2010 в 08:57
поделиться