Мы создаем веб-сервис (на основе 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. Это неправильно?
Если это неправильный способ сделать это:
Wat - правильный способ указать результирующий XML SOAP при использовании Java2WS?
Кстати: приведенные выше фрагменты исходного кода - это просто примеры, взятые из наших более сложных (более полей) классов.