2010-09-01 26 views
2

J'ai joué avec des services Web en utilisant jbossws-cxf. Je ne pense pas que le problème réside dans l'implémentation que j'utilise, mais plutôt dans la façon dont le code est généré. Voici mon pojo avec les annotations pour un service web.Aide de modification de corps de réponse de message

package com.matt.test.ws; 

import javax.jws.WebMethod; 
import javax.jws.WebResult; 
import javax.jws.WebService; 
import javax.jws.soap.SOAPBinding; 

@WebService 
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT) 
public class JbossWSTestImpl { 
    private String[] statuses = {"Hello","JbossWS is cool","GoodBye","l33t hax0rz"}; 
    @WebMethod 
    @WebResult(name="status") 
    public String getStatus(){ 
     return statuses[new java.util.Random().nextInt(3)]; 
    } 

} 

Ma réponse savon quand je teste le webservice (avec soapUI) est

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <ns2:getStatusResponse xmlns:ns2="http://ws.test.matt.com/"> 
    <status>Hello</status> 
    </ns2:getStatusResponse> 
    </soap:Body> 
</soap:Envelope> 

est-il un moyen à court d'éditer manuellement le fichier WSDL pour modifier l'espace de noms que « NS2 » est pour que je peut envelopper la réponse dans différentes étiquettes. Ce que je veux, c'est quelque chose comme

<soap:Envelope ...> 
    <soap:Body> 
     <MyWSResponse xmlns="http://ws.test.matt.com/"> 
     <status>Hello</status> 
     </MyWSResponse> 
    <soap:Body> 
<soap:Envelope> 

Y a-t-il des annotations que je n'utilise pas et que je peux modifier? Je n'ai pas trouvé un moyen de modifier le wsdl de cette façon avec eux pour le moment. MISE À JOUR: le changement @WebService à @WebService(targetNamespace="http://MyWSResponse") a changé la demande de savon en la balise correcte, mais le message de réponse au savon utilise toujours ns2 au lieu de MyWSResponse.

Répondre

2

Vous devez ajouter une nouvelle attribute à l'annotation WebService comme: si vous ne spécifiez pas targetNamespace le package sera utilisé

@WebService(targetNamespace="http://ws.test.matt.com/") 

.

+0

Ok, je vois ça mais comment cela me permet-il d'utiliser la balise MyWSResponse dans le message soap? Parce que, en réalité, http://ws.test.matt.com n'existe pas réellement alors comment sait-il quoi utiliser pour les noms d'éléments? La raison pour laquelle je demande est parce que j'ai utilisé d'autres webservices et ils ont différents noms d'éléments à l'intérieur de l'élément soap: Body et je me demandais comment ils ont réalisé cela? –

+0

Vous avez essayé d'ajouter l'attribut targetNamespace à l'annotation WebResult et de le définir vide? comme targetNamespace = "" ??? –

+0

Cela n'a rien fait :( –