Estamos creando un servicio web (basado en CXF) accionado por una clase Java (Java2WS) con el siguiente método:Servicio web con CXF: cómo usar 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);
}
uso el envolturas para definir los elementos de la solicitud resp. respuesta con más detalle: los nombres correctos de los elementos (que comienzan con un carácter en mayúscula), elementos requeridos y opcionales, ...). Pero no estoy seguro de si esta es la forma correcta de hacerlo (no hay documentación detallada acerca de las envolturas, ¿verdad?)
El MyResponse clase:
public class MyResponseWrapper {
private String result;
private ModeEnum status;
// getters and setters
}
El MyReponseWrapper clase
@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
}
Actualmente no entiendo los Wrappers. Cuando devuelvo una instancia de MyReponse, ¿cómo se inyectan los datos de MyResponse en MyResponseWrapper respec- tivamente al cuerpo SOAP de la respuesta?
Al probar este servicio web puedo ver que una instancia de MyResponseWrapper se crea una instancia y el cuerpo SOAP contiene los elementos correctos pero con datos predeterminados (por ejemplo: result = "fu" en lugar de "Hello"). Esperé que CXF inyecta datos coincidentes desde MyResponse a MyResponseWrapper. ¿Es eso incorrecto?
Si esta es la manera incorrecta de hacerlo: Wat es la manera correcta de especificar el xml de SOAP resultante al usar Java2WS?
Por cierto: los fragmentos de código fuente anteriores son solo ejemplos tomados de nuestras clases más complejas (más campos).