Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 26959|Répondre: 0

[Source] Les appels Java vers le serveur de services web C# ne reconnaissent pas la valeur de l’en-tête HTTP SOAPAction

[Copié le lien]
Publié le 04-03-2021 à 13:19:39 | | | |
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.




Précédent:.NET/C# utilise BenchmarkDotNet pour tester la performance du code
Prochain:Appel d’interface HTTP API Consul
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com