Ho un servizio web di terze parti per il quale generi un client utilizzando wsimport. Ogni chiamata al webservice viene completata correttamente, ma l'oggetto risposta che ottengo ha tutti i suoi campi impostati su null. Monitoraggio della rete Posso vedere che sul filo tutti gli elementi XML nel messaggio di risposta hanno valori al loro interno, quindi l'oggetto dovrebbe contenere dati non nulli. Inoltre, un client per lo stesso servizio generato con il vecchio asse1 e chiamato con gli stessi dati restituisce una risposta non vuota. Qualche idea su cosa sta succedendo? (Nel caso in cui faccia qualche differenza sto usando l'implementazione di MOXy di JAXB).Il mio client webservice jax-ws restituisce solo oggetti vuoti
Aggiornamento: Sono riuscito a restringerlo. Wsdl definisce l'oggetto nel proprio spazio dei nomi, ad esempio http://www.acme.com/ws
. La risposta mi da servizio è
<?xml version="1.0" encoding="UTF-8"?>
... SOAP envelope ...
<ns1:opINFOWLResponse xmlns:ns1="http://www.acme.com/ws"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns1:responseINFOWL xsi:type="ns1:responseINFOWL">
<result>6003</result>
<ndserr/>
<transid>61437594</transid>
<descriptionerr>BLAH.</descriptionerr>
</ns1:responseINFOWL>
</ns1:opINFOWLResponse>
... SOAP closing tags ...
ed è deserializzati ad un non nulla OpINFOWLResponse
che avvolge un oggetto non nullo responseINFOWL
con tutti i campi impostati su null. Solo per divertimento che ho provato a scrivere un paio di righe per unmarshalling frammento di sopra (dopo la rimozione l'overhead SOAP)
JAXBContext ctx = JAXBContext.newInstance(OpINFOWLResponse.class);
Unmarshaller u = ctx.createUnmarshaller();
OpINFOWLResponse o = (OpINFOWLResponse) u.unmarshal(new StringReader(theSnippetAbove));
ResponseINFOWL w = o.getResponseINFOWL();
e ottengo lo stesso risultato. Se cambio l'XML sopra a
<?xml version="1.0" encoding="UTF-8"?>
<ns1:opINFOWLResponse xmlns:ns1="http://www.acme.com/ws"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns1:responseINFOWL xsi:type="ns1:responseINFOWL">
<ns1:result>6003</ns1:result>
<ns1:ndserr/>
<ns1:transid>61437594</ns1:transid>
<ns1:descriptionerr>BLAH.</ns1:descriptionerr>
</ns1:responseINFOWL>
</ns1:opINFOWLResponse>
Tutto funziona correttamente. Bummer.
Update (di nuovo): Stesso comportamento sia con JAXB-RI e Moxy. Non ho ancora idea di cosa c'è che non va.
Update (9 settembre): Il suggerimento di sotto di circa qualificazione namespace essere sbagliato è interessante, ma ho dovuto wsimport otterrebbe le cose a posto. Ad ogni modo, questo è il mio package-info.java
@XmlSchema(
namespace = "http://www.acme.com/ws",
elementFormDefault = XmlNsForm.QUALIFIED)
package it.sky.guidaTv.service.remote;
import javax.xml.bind.annotation.XmlSchema;
import javax.xml.bind.annotation.XmlNsForm;
e questa è la parte relativa alla classe di ResponseINFOWL
/*
* <p>Java class for responseINFOWL complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType name="responseINFOWL">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="result" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="descriptionerr" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="transid" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="ndserr" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* <element name="wallet" type="{http://www.acme.com/ws}t_wallet" minOccurs="0"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "responseINFOWL", propOrder = {
"result", "descriptionerr", "transid", "ndserr", "wallet" })
public class ResponseINFOWL {
@XmlElement(required = true)
protected String result;
@XmlElement(required = true)
protected String descriptionerr;
@XmlElement(required = true)
protected String transid;
protected String ndserr;
protected TWallet wallet;
// getters, setters and all.
}
Ho provato a giocare un po 'con gli spazi dei nomi in package-info
ma ancora nessuna gioia.
Puoi fornire campioni dai messaggi e dalle classi? Ciò contribuirà a determinare dove si trova la mancata corrispondenza nella mappatura. –
Forse potrei inviare un file wsdl e una classe di test adeguatamente anonimizzati, tutto il resto nel mio caso è generato da wsimport. La cosa divertente è che gli altri servizi della stessa terza parte funzionano bene. – agnul