Creiamo un webservice (CXF-based) azionata da una classe java (Java2WS) con il seguente metodo:Webservice con CXF: come utilizzare 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 le involucri per definire gli elementi della richiesta risp. risposta in maggiore dettaglio: i nomi degli elementi corretti (che iniziano con un carattere maiuscolo), elementi obbligatori e facoltativi, ...). Ma io non sono sicuro se questo è il modo giusto per farlo (non v'è alcuna documentazione approfondita su involucri, non è vero?)
Il MyResponse classe:
public class MyResponseWrapper {
private String result;
private ModeEnum status;
// getters and setters
}
La classe 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
}
Attualmente non capisco i wrapper. Quando restituisco un'istanza di MyReponse, come vengono inviati i dati di MyResponse in MyResponseWrapper in modo rispettivo al corpo SOAP della risposta?
Testando questo servizio Web, è possibile visualizzare un'istanza di MyResponseWrapper e il corpo SOAP contiene gli elementi corretti ma con dati predefiniti (ad esempio: risultato = "fu" anziché "Ciao"). Mi aspettavo che CXF inietti i dati corrispondenti da MyResponse a MyResponseWrapper. È sbagliato?
Se questo è il modo sbagliato per farlo: Wat è il modo giusto per specificare il xml SOAP risultante quando si utilizza Java2WS?
A proposito: i frammenti di codice di cui sopra sono solo esempi tratti dalle nostre classi più complesse (più campi).