2010-08-30 11 views
2

Je suis nouveau dans les services Web. J'ai fait face à un problème. Sur le côté serveur, j'utilise spring-ws. Du côté client, j'utilise jax-ws. Avec l'outil wsimport j'ai généré des classes java en fonction de mon wsdl.JAX-WS retourner des listes vides

Tout fonctionne très bien, mais pour une raison quelconque JAX-WS ne pas analyser les tableaux et la liste correctement, toutes les listes sont vides

Je suis absolument sûr, cette réponse est la forme correcte, testé avec SoapUI, aussi i utilise l'intercepteur de journalisation pour enregistrer les réponses sortantes.

Ci-dessous la bribes de réponse

réponse

ressemble

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header/> 
    <SOAP-ENV:Body> 
     <firstElementResponse> 
     <name>hello world text</name> 
     <name>hello world text</name> 
     <name>hello world text</name> 
     </firstElementResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

et les extraits de wsdl

<xs:complexType name="sayHelloResponseType"> 
    <xs:sequence> 
    <xs:element maxOccurs="unbounded" minOccurs="0" name="name" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

Pour générer le code client j'utilise wsimport.

SayHelloResponseType resp = serv.sayHello(r); 
List<String> name = resp.getName(); 
System.out.println(name.size()); 

Merci. Toute aide sera grandement appréciée.

Répondre

2

Semble que c'est juste un corps de réponse non valide, cela ne maths wsdl shema. Ni spring-ws ni jax-ws jette l'exception. Il suffit d'analyser les données invalides pour vider la liste sans aucune garantie.

org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor sauvé ma journée

probablement je dois modifier la journalisation pour JAX-WS pour éviter la prochaine fois

0

Je viens de répondre à une question similaire dans How can I handle Castor unmarshaling of SOAP messages when the namespace is defined inside the operation tag? - si vous utilisez Spring-WS, vous 'est en train d'écrire des contrats de services web en premier, alors assurez-vous de vraiment clouer ce contrat vers le bas. Placez tous vos éléments dans un espace de nom, assurez-vous que votre schéma XSD attend la qualification des éléments et déclarez ns-uri et ns-prefixes dans vos mappages de Castor. Cela en vaut la peine.