Je travaille sur un serveur d'applications Java 6 qui dispose d'un service Web destiné à recevoir un message de savon contenant un message HL7. L'application Java fonctionne sur Glassfish 3.1. Le client est une application C # développée par une tierce partie (qui s'exécute sur le cadre Microsoft .NET 4.0) et elle envoie ces messages SOAP au serveur Java.
Mon numéro initial était que le client n'a pas pu analyser le WSDL généré. par le serveur. J'ai depuis résolu que, en mettant en œuvre mon propre WSDL personnalisé et que vous l'ajustez en conséquence. Cela a permis au client d'analyser le WSDL et d'envoyer des messages de savon à mon application Java Server. P>
Toutefois, chaque fois qu'un message est reçu sur le côté serveur, le paramètre (nommé "Putexml") reçoit un null code> valeur. p>
Le journal du serveur GlassfishFish affiche ce qui suit lorsqu'un message est reçu: p> Voici le WSDL personnalisé que J'ai créé et associé à mon service Web SOAP: p> et voici le service Web Java: p> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header/>
<soap:Body>
<putHL7Data xmlns="http://MyProject.MyPackage/">
<putXML>... Encoded XML Here ...</putXML>
</putHL7Data>
</soap:Body>
</soap:Envelope>
3 Réponses :
Avez-vous essayé de supprimer l'attribut @webparam? Il ne faut pas être nécessaire car il n'y a pas d'ambiguïté avec votre service Web ici et il est possible que vous devez définir l'espace cible pour pouvoir trouver correctement l'attribut. P>
J'ai essayé de supprimer le "@webparam" mais il n'y avait aucun effet. Où va le "TargeNamespace"? À l'intérieur de la définition "@webparam"?
Oui, cela devrait être un attribut de @webparam.
Merci pour votre conseil! J'ai été capable de comprendre comment modifier mon WSDL personnalisé en voyant ce que l'ajout de "cibleNamespace" fait à la WSDL générée. Je posterai ma propre réponse expliquant bientôt ce que j'ai fait pour résoudre mon problème.
eu un problème similaire, ajout de TargeNamespce à WebParam a aidé
Après avoir été signalé dans la bonne direction de @dlawrence , j'ai pu résoudre mon problème. Comme je l'ai mentionné dans la question, je devais toujours utiliser une WSDL construite personnalisée. Je n'avais que quelques modifications apportées à la WSDL et au code Java pour résoudre le problème.
Voici un diff représentant mes modifications apportées à la WSDL: P>
--- /tmp/a 2011-09-19 14:57:49.582065002 -0400 +++ /tmp/b 2011-09-19 15:00:06.942065007 -0400 @@ -1,7 +1,7 @@ @WebService(serviceName = "MyHandler", wsdlLocation = "WEB-INF/wsdl/MyHandler.wsdl") public class MyHandler { @WebMethod(operationName = "putHL7Data") - public String putHL7Data(@WebParam(name = "putXML") String xml) { + public String putHL7Data(@WebParam(name = "putXML", targetNamespace="http://MyProject.MyPackage/") String xml) { // Handle message } }
J'ai le même message dans ma console de verre de verre. Dans mon projet Android avec la fonction KSOAP, j'ai changé le code suivant:
soapEnvelope.setOutputSoapObject(soapReq); HttpTransportSE httpTransport = new HttpTransportSE(url,timeOut); try{ if (headers!=null){ // original code // my headers are null httpTransport.call("http://service.iswitch.com/", soapEnvelope,headers); }else{ httpTransport.call("\"http://service.iswitch.com/"\", soapEnvelope); } SoapObject result=(SoapObject)soapEnvelope.bodyIn; if (result.hasProperty("moveResult")) {
Il semble probable que le serveur reçoit null car le client incluait le paramètre dans la demande.
@DWB Je ne suis pas sûr de ce que vous voulez dire. Pourriez-vous élaborer?
La langue source a une incidence nulle sur l'appel de service Web. Si l'appel de service, un paramètre est NULL dans le serveur, c'est parce qu'il a été envoyé comme null du client.
@DWB Je sais pour un fait que le client envoie une chaîne non nulle.
Avez-vous capturé la demande HTTP? Vous ne pouvez savoir que cela envoie une chaîne non nulle si vous avez capturé la demande. En supposant que cela soit vrai, le NULL ne peut être le résultat d'une défaillance de la traduction dans la translation du XML dans la demande HTTP à l'appel au code Java. Si tel est le cas, je soupçonne que le paramètre en question a été codé de manière incorrecte au client. par exemple. Server s'attend à et le client envoie KPow Blammy>
@DWB je n'ai pas vu le message actuel. En tant que travail autour, j'ai mis en place une application C # qui agit comme un proxy. Il reçoit le message, le reconditionnant et l'envoyant au service Web Java. Quelqu'un d'autre a écrit ce proxy et crée un cou de bouteille pour que j'essaie de le supprimer et que les deux points de fin communiquent directement.
Essayez de télécharger un outil de test proxy HTTP gratuit pour capturer la demande HTTP. Vous devez identifier si le problème est dans le client ou sur le serveur. Si vous capturez la demande, vous pourrez voir si le paramètre en question est présent et codé correctement.
@DWB J'ai déterminé que le problème est sur le côté du serveur Java. Le testeur de service Web Java provoque également que le paramètre "XML" soit null. J'ai également ajouté une classe de chaîne de manutention qui enregistre le message SOAP brut du client (voir "Mettre à jour 2" ci-dessus).