Pourquoi le serveur de reporting de service web qui appelle C# ne reconnaît-il pas la valeur de l’en-tête http SOAPAction et laisse-t-il toujours C# la modifier, simplement parce que C# n’a besoin d’ajouter qu’un tag, pourquoi JAVA ne peut-il pas spécifier une requête d’action ?
Publier et appeler Webservice est très simple, mais il subsiste des problèmes mineurs, qui se résument ainsi :
Java appelle le webService de .net avec une erreur « Server failed to recognize the value of HTTP header SOAPAction ».
Solution:
Lors de l’appel d’un service web, aucune SoapAction n’est spécifiée, aucun RequestNameSpace n’est spécifié, donc « Le serveur n’a pas reconnu la valeur de l’en-tête HTTP SOAPAction » apparaît toujours lors de la demande.
Si vous utilisez des appels Axe, appelez-les comme suit :
public static void main(String[] args) throws Exception { Ne pas l’apporter ? Suffixe WSDL Extrémité de la chaîne = « http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx » ; Créer un appel de service Service Service = nouveau Service() ; Créer un objet d’appel via service Call call = (Call) service.createCall() ; Définir l’URL où se trouve le service call.setTargetEndpointAddress(new java.net.URL(endpoint)) ; qqCheckOnline est la méthode « http://WebXml.com.cn/ » côté web, qui prend aussi en compte l’adresse de l’espace de noms, et signalera aussi une erreur si vous ne l’apportez pas call.setOperationName(new QName(« http://WebXml.com.cn/ »,"qqCheckOnline »)) ; qqCode est aussi le nom du paramètre de la méthode .NET, qui est le nom du paramètre qqCheckOnline call.addParameter(new QName(« http://WebXml.com.cn/ »,"qqCode »), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN) ; Évitez d’appeler Java le webService de .net avec l’erreur « Le serveur n’a pas reconnu la valeur de l’en-tête HTTP SOAPAction » call.setUseSOAPAction(true) ; call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING) ; Le type de paramètre retourné call.setSOAPActionURI(« http://WebXml.com.cn/qqCheckOnline ») ; Il faut aussi noter qu’il faut ajouter la méthode à appeler, sinon une erreur sera également signalée Les tableaux d’objets encapsulent les paramètres Chaîne ret = (Chaîne) call.invoke(nouvel Objet[] {"aaaa"}) ; System.out.println(« --------« +ret) ; } Notez la section des commentaires.
La connexion hyperlientérée est visible.? WSDL signifie Public Web Service
L’exception suivante survient lorsque le wsdl2java.bat utilisant CXF génère un client pour publier un service web .net basé sur un fichier wsdl
(déclaration d’élément indéfinie 's :schema') Solution:
Ouvrez la wsdl.xml et utilisez
<s :any minOccurs="2 » maxOccurs="2"/>Alternatif <s :element ref="s :schema » /><s :any /> Cette erreur de génération wsdl2java devrait être liée au fait que JAXB ne prend pas en charge les références xml, car <s :anyanyOccurs="2 » maxOccurs="2"/> et <s :element ref="s :schema » /><s :any/> sont en réalité équivalents. <s :element ref="s :schema » /> signifie en fait que vous pouvez utiliser n’importe quel type d’élément spécifié par s :schema ici, <s :any /> joue ce rôle, <s :any minOccurs="2 » maxOccurs="2"/> est simplement deux <s :any /> C’était juste écrit en une phrase.
référenceLa connexion hyperlientérée est visible.
L’utilisation de CXF wsdl2java.bat génère une super erreur de compilation client basée sur le fichier wsdl
Solution:
Il ne compile pas correctement car la spécification jax-ws2.2 entre en conflit avec java6.
Cependant, le programme ne peut pas être compilé uniquement en java5, il est donc nécessaire d’abaisser la version de la spécification jax-ws, qui peut se gérer ainsi : exécuter la commande
WSDL2Java -frontend jaxws21 -client *.xml De cette manière, le code généré avec jax-ws2.1 peut être compilé et exécuté en java6.
J’ai comparé le code client généré par l’outil avec la comparaison de texte et j’ai constaté que ce dernier générait 3 codes clients supplémentaires, donc retirer les 3 constructeurs qui signalaient des erreurs peut aussi résoudre les problèmes ci-dessus.
Réimprimé depuis :La connexion hyperlientérée est visible.
|