Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 26959|Răspunde: 0

[Sursă] Apelurile Java către serverul de webservice C# nu recunosc valoarea antetului HTTP SOAPAction

[Copiază linkul]
Postat la 2021-3-4 13:19:39 | | | |
De ce serverul de raportare a serviciilor web care apelează C# nu recunoaște valoarea antetului http SOAPAction și lasă întotdeauna C# să o modifice, doar pentru că C# trebuie doar să adauge un tag, de ce JAVA nu poate specifica o cerere de acțiune?



Publicarea și apelarea Webservice este foarte simplă, dar există totuși probleme minore, care sunt rezumate astfel:

Java apelează webService-ul .net cu o eroare "Server failed of recognize the value of HTTP header SOAPAction".

Soluție:

Când apelezi webservice, nu este specificat SoapAction, nu este specificat RequestNameSpace, astfel încât "Serverul nu a recunoscut valoarea antetului HTTP SOAPAction" apare întotdeauna la solicitare.

Dacă folosiți apeluri Axis, numiți-le astfel:


public static void main(String[] args) throws Exception {  
    Nu aduceți? Sufixul WSDL
    Capătul șirului = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
  Creează un apel de serviciu     
  Serviciu serviciu = serviciu nou();
  Creează un obiect de apel prin serviciu
  Call call = (Apel) serviciu.createCall();   
  Setează URL-ul unde se află serviciul   
  call.setTargetEndpointAddress(new java.net.URL(endpoint));   
  qqCheckOnline este metoda "http://WebXml.com.cn/" pe partea de net, care acordă atenție și adresei spațiului de nume și va raporta o eroare dacă nu o aduci
  call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline"));
  qqCode este, de asemenea, numele parametrului pentru metoda .NET, care este numele parametrului pentru qqCheckOnline
  call.addParameter(new QName("http://WebXml.com.cn/","qqCode"),
         org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
  Evită apelarea Java la webService-ul .net cu eroarea "Serverul nu a recunoscut valoarea antetului HTTP SOAPAction"
  call.setUseSOAPAction(true);
  call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Tipul parametrului returnat
  call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Trebuie menționat și că trebuie adăugat metoda de apelat, altfel va fi raportată și o eroare
  Array-urile de obiecte încapsulează parametrii     
  String ret = (String) call.invoke(new Object[] {"aaaaa"});   
  System.out.println("--------"+ret);
    }

Observați secțiunea de comentarii.

Autentificarea cu hyperlink este vizibilă.? WSDL înseamnă Public Web Service

Următoarea excepție apare atunci când wsdl2java.bat care folosește CXF generează un client care publică un serviciu web .net bazat pe un fișier wsdl


( declarație de element nedefinit 's:schema')

Soluție:

Deschide wsdl.xml și folosește-l


<s:any minOccurs="2" maxOccurs="2"/>Alternativ <s:element ref="s:schema" /><s:any />
Această eroare de generare wsdl2java ar trebui să fie legată de faptul că JAXB nu suportă referințe xml, deoarece <s:any minOccurs="2" maxOccurs="2"/> și <s:element ref="s:schema" /><s:any/> sunt de fapt echivalente. <s:element ref="s:schema" /> înseamnă de fapt că poți folosi orice tip de element specificat de s:schema aici, <s:any /> joacă acest rol, <s:any minOccurs="2" maxOccurs="2"/> este doar două <s:any />

A fost scris doar într-o propoziție.

referințăAutentificarea cu hyperlink este vizibilă.

Folosirea CXF-ului wsdl2java.bat generează o super eroare de compilare a clientului bazată pe fișierul wsdl

Soluție:

Nu compilează corect deoarece specificația jax-ws2.2 intră în conflict cu java6.

Totuși, programul nu poate fi compilat doar în java5, așa că este necesar să se reducă versiunea specificației jax-ws, care poate fi gestionată astfel: Execută comanda

wsdl2java -frontend jaxws21 -client *.xml

Astfel, codul generat cu jax-ws2.1 poate fi compilat și executat în java6.

Am comparat codul client generat de instrument cu comparația de text și am constatat că acesta din urmă genera 3 coduri client în plus, deci eliminarea celor 3 constructori care raportau erori poate rezolva și problemele de mai sus.

Reprodus din:Autentificarea cu hyperlink este vizibilă.




Precedent:.NET/C# folosește BenchmarkDotNet pentru a testa performanța codului
Următor:Apel de interfață HTTP API Consul
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com