See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 26959|Vastuse: 0

[Allikas] Java kõned C# veebiteenuse serverisse ei tuvasta HTTP päise SOAPActioni väärtust

[Kopeeri link]
Postitatud 2021-3-4 13:19:39 | | | |
Miks ei tunnista veebiteenuse aruandlusserver, mis kutsub C#, HTTP päise SOAPActioni väärtust ja laseb C#-il seda alati muuta, ainult sellepärast, et C# peab lisama ainult silti, miks ei saa JAVA määrata tegevustaotlust?



Veebiteenuse avaldamine ja kutsumine on väga lihtne, kuid on siiski väiksemaid probleeme, mis on kokku võetud järgmiselt:

Java kutsub .net webService'i veaga "Server ei tuvastanud HTTP päise SOAPActioni väärtust".

Lahus:

Veebiteenuse kutsumisel ei ole SoapActionit määratud, RequestNameSpace'i ei määrata, seega ilmub alati taotlusel "Server ei tuvastanud HTTP päise SOAPActioni väärtust".

Kui kasutatakse teljekutseid, kutsu neid järgmiselt:


public static void main(String[] args) viskab Erandi {  
    Ei too? WSDL järelliide
    String endpoint = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
  Loo teenusekõne     
  Teenistus = uus teenistus();
  Loo kõneobjekt teenuse kaudu
  Call call = (Call) service.createCall();   
  Määrake URL, kus teenus asub   
  call.setTargetEndpointAddress(new java.net.URL(endpoint));   
  qqCheckOnline on meetod "http://WebXml.com.cn/" võrgupoolel, mis pöörab tähelepanu ka nimeruumi aadressile ning teatab veast, kui sa seda ei too
  call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline"));
  qqCode on ka .NET meetodi parameetrinimi, mis on qqCheckOnline parameetri nimi
  call.addParameter(new QName("http://WebXml.com.cn/","qqCode"),
         org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
  Vältige, et Java kutsub .net veebiteenust veateatega "Server ei tuvastanud HTTP päise SOAPActioni väärtust"
  call.setUseSOAPAction(true);
  call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Tagastatud parameetri tüüp
  call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Samuti tuleb märkida, et pead lisama kutsutava meetodi, vastasel juhul teatatakse ka vea
  Objektimassiivid kapseldavad parameetrid     
  String ret = (String) call.invoke(uus objekt[] {"aaaaa"});   
  System.out.println("--------"+ret);
    }

Pane tähele kommentaaride sektsiooni.

Hüperlingi sisselogimine on nähtav.? WSDL tähendab avalikku veebiteenust

Järgmine erand tekib siis, kui CXF-i kasutav wsdl2java.bat genereerib kliendi .net veebiteenuse avaldamiseks wsdl-faili põhjal


( määratlemata elemendi deklaratsioon 's:schema')

Lahus:

Ava wsdl.xml ja kasuta


<s:any minOccurs="2" maxOccurs="2"/>Alternatiivne <s:element ref="s:schema" /><s:any />
See wsdl2java genereerimisviga peaks olema seotud sellega, et JAXB ei toeta xml viiteid, sest <s:any minOccurs="2" maxOccurs="2"/> ja <s:element ref="s:schema" /><s:any/> on tegelikult ekvivalentsed. <s:element ref="s:schema" /> tähendab tegelikult, et siin saab kasutada mis tahes s:schema määratud elemenditüüpi, <s:any /> täidab seda rolli, <s:any minOccurs="2" maxOccurs="2"/> on lihtsalt kaks <s:any />

See oli lihtsalt ühe lausega kirjas.

viideHüperlingi sisselogimine on nähtav.

CXF wsdl2java.bat kasutamine tekitab kliendi kompileerimise supervea wsdl faili põhjal

Lahus:

See ei kompileerita korralikult, kuna jax-ws2.2 spetsifikatsioon on vastuolus java6-ga.

Kuid programmi ei saa kompileerida ainult java5-s, seega on vaja vähendada jax-ws spetsifikatsiooni versiooni, mida saab käsitleda järgmiselt: Käivita käsk

wsdl2java -frontend jaxws21 -client *.xml

Nii saab jax-ws2.1-ga genereeritud koodi kompileerida ja käivitada java6-s.

Võrdlesin tööriista poolt genereeritud kliendikoodi tekstivõrdlusega ja leidsin, et viimane genereeris veel 3 kliendikoodi, nii et kolme konstruktori eemaldamine, kes vigu teatasid, võib samuti lahendada ülaltoodud probleemid.

Trükitud allikast:Hüperlingi sisselogimine on nähtav.




Eelmine:.NET/C# kasutab BenchmarkDotNeti koodi jõudluse testimiseks
Järgmine:Consul HTTP API liidese kutse
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com