Sto facendo un client WSDL e voglio sapere come posso impostare un elemento XML come CDATA.Elemento CDATA nel client WSDL
Sto utilizzando il wsimport
per generare il codice sorgente e l'elemento CDATA è parte della richiesta XML. Questa è la classe XML della richiesta:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "dataRequest" })
@XmlRootElement(name = "ProcessTransaction")
public class ProcessTransaction {
protected String dataRequest;
public String getDataRequest() {
return dataRequest;
}
public void setDataRequest(String value) {
this.dataRequest = value;
}
}
Ho già provato la @XmlAdapter, ma non cambia nulla sull'uscita ...
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class AdaptorCDATA extends XmlAdapter<String, String> {
@Override
public String marshal(String arg0) throws Exception {
return "<![CDATA[" + arg0 + "]]>";
}
@Override
public String unmarshal(String arg0) throws Exception {
return arg0;
}
}
Nella classe XML:
@XmlJavaTypeAdapter(value=AdaptorCDATA.class)
protected String dataRequest;
Ho provato a eseguire il debug, ma non ha mai eseguito la funzione AdaptorCDATA
.
La versione wsimport
è 2.2.9
e la versione jaxb-api
è 2.1
.
Perché ne hai bisogno? Perché vuoi scrivere xml-data sull'elemento? Questo dovrebbe funzionare immediatamente. Abbiamo una stringa di dati xml, imposta questo valore come valore nell'elemento corrispondente e quindi la magia di JAXB avvolge un CDATA tutto intorno al marshalling. – Frank
Mi serve perché, quando imposto "dataRequest" con una stringa CDATA, viene completamente sfuggito. – fabriciols
OK, ho appena provato il tuo AdaptorCDATA con un membro String arbitrario di una delle nostre classi e si comporta bene nel metodo 'marshall()'. Guardando la tua domanda vedo che hai uno snippet in cui hai l'annotazione '@ XmlJavaTypeAdapter' ma non nella classe' ProcessTransaction' dove dovrebbe essere. Se ce l'hai, ma il punto di interruzione non viene ancora raggiunto, forse devi ricostruire e aggiornare prima di avviare il client? – Frank