Je travaille actuellement sur un client de service Web à l'aide de CXF sans fichiers de configuration à ressort.
Il fonctionne assez bien mais je ne peux pas comprendre comment définir la reliure SOAPVERSION à l'aide de l'API Java. Utilisation d'un fichier de ressort Ceci est fait comme suit: P>
<jaxws:binding> <soap:soapBinding version="1.2"/> </jaxws:binding>
5 Réponses :
Le plus facile est probablement de simplement coller une annotation sur l'interface de:
@reef: Qu'est-ce que vous obtenez la description de l'interface?
@Donal Fellows C'est le résultat d'une exécution de l'outil WSDL2JAVA. C'est essentiellement l'une de mes dépendances de projet.
@reef: C'est le genre de chose qu'il est vraiment utile de mettre dans une question. Y a-t-il un moyen de faire le WSDL que vous convertissez-vous de dire qu'il veut du savon 1.2? (Je n'ai pas bricolé de cette partie du savon pendant un moment alors j'oublie les détails.) S'il y a sûrement, c'est là que l'info devrait réellement aller? Après tout, si c'est ce que le service nécessite alors c'est ce que cela devrait demander ...
@Donal Fellows en fait, j'ai compris le problème en configuré le serveur pour demander des messages SOAP 1.2. En utilisant sur le client, le savon 1.2 Porttype Ça marche plutôt bien.
@reef: cool. Vous devriez mentionner ce que vous avez fait comme une réponse afin que nous puissions vous donner des votes. (Vraiment! Répondre à vos propres questions est tout à fait ok lorsque vous avez une vraie réponse qui peut aider les autres.)
@Daniel Kulp: L'ajout d'une annotation sur l'interface n'a pas fonctionné non plus ... J'ai toujours mon message de savon avec la version 1.1 (IE: XMLNS: SOAP = " schemas.xmlsoap.org/soap/envelope/ ").
Comme suggéré par les boursiers donaux, je réponds à ma propre question;)
En réalité, le problème a été lié à la version du savon que le serveur peut gérer.
Du côté du client, je n'ai pas besoin de préciser que je souhaite utiliser du savon 1.2, il semble qu'il suffit de disposer du porttype dans le fichier WSDL configuré au savon 1.2.
Mais sur le côté serveur, j'ai besoin de dire explicitement quelle version de savon que je veux.
Sur le côté serveur, j'utilise toujours le "mode ressort" pour la configuration CXF ainsi que je viens d'ajouter les éléments suivants dans le fichier de configuration XML: p> c'est tous les gens!
Merci pour votre temps et votre aide! P> Edit ---------------------------------------- P > En fait, cette solution ne fonctionne pas maintenant que nous contactons un serveur que nous ne gérons pas ... Nous sommes toujours bloqués avec notre problème ici ... P> P>
OK, cette solution a fonctionné comme je l'ai accédé aux clients et au serveur. Maintenant que je dois contacter un serveur, je ne gère pas cela ne fonctionne pas. Vous savez-vous comment définir la version du savon sans configuration de printemps?
ok je réponds à ma propre question pour partager la solution. Avec l'aide des gars de la liste de diffusion CXF, j'ai trouvé une solution qui fonctionne pour moi. Il y a en fait 2 façons de résoudre le problème. Voici l'explication:
Le problème est venu de la façon dont je construisiez mon service CXF. P>
La première solution consiste à spécifier l'emplacement de la WSDL au moment de la création de service: P>
// Create the service Service service = Service.create(serviceQName); // Add a Port to the service and specify the SOAP 1.2 binding service.addPort(serviceQName, javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING, wsUrl); // Access the port return service.getPort(serviceQName, portTypeClass);
Comment puis-je le faire en utilisant CXF? Je crée un service comme celui-ci implémentation de l'objet = Nouveau découverte de découverte (); Endpoint.Publish ("UDP: //239.255.255.250: 3702", implémentatrice); Code> Où
Classe publique DiscoveryLookUppPorMPL implémente découvertyLookUPPort code>
Vieux fil. Je pensais que je posterais une solution qui a fonctionné pour moi.
Dans le fichier cxf-haricot.xml, j'ai changé le endpointName = "TNS: MR_SERVERSOAP12" code> à partir de
endpointName = "TNS: MR_SERVERSOAP" code>. Notez que le nom du noeud final aura son propre nom dans votre WSDL. Utilisez ce nom. P>
Si vous utilisez CXF Client, vous pouvez utiliser la manière suivante. En outre, il peut lier plus d'un WSDL.
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(WebServiceClass); BindingConfiguration config = new BindingConfiguration() { @Override public String getBindingId() { // TODO Auto-generated method stub return "http://www.w3.org/2003/05/soap/bindings/HTTP/";//SOAPVersion.SOAP_12.httpBindingId } }; factory.setBindingConfig(config);