Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 26959|Odgovoriti: 0

[Vir] Java klici na C# spletni strežnik ne prepoznajo vrednosti HTTP glave SOAPAction

[Kopiraj povezavo]
Objavljeno 2021-3-4 ob 13:19:39 | | | |
Zakaj strežnik za poročanje spletnih storitev, ki kliče C#, ne prepozna vrednosti HTTP glave SOAPAction in vedno dovoli, da C# to spremeni, samo zato, ker C# potrebuje samo oznako, zakaj JAVA ne more določiti zahteve za dejanje?



Objavljanje in klicanje spletne storitve je zelo preprosto, vendar so še vedno manjše težave, ki so povzete takole:

Java pokliče .net-ovo spletno storitev z napako "Server ni prepoznal vrednosti HTTP glave SOAPAction".

Rešitev:

Pri klicu spletne storitve ni določen SoapAction, ni določen RequestNameSpace, zato se ob zahtevi vedno pojavi "Strežnik ni prepoznal vrednosti HTTP glave SOAPAction".

Če uporabljate klice osi, jih poimenujte takole:


public static void main(String[] args) meče Exception {  
    Ne prineseš? Pripona WSDL
    Končna točka niza = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
  Ustvarite servisni klic     
  Storitev = nova storitev();
  Ustvarite klicni objekt preko storitve
  Klic = (klic) service.createCall();   
  Nastavite URL, kjer se storitev nahaja   
  call.setTargetEndpointAddress(new java.net.URL(endpoint));   
  qqCheckOnline je metoda "http://WebXml.com.cn/" na spletni strani, ki prav tako upošteva naslov imenskega prostora in prav tako poroča o napaki, če je ne pripeljete
  call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline"));
  qqCode je tudi ime parametra .NET metode, ki je ime parametra qqCheckOnline
  call.addParameter(new QName("http://WebXml.com.cn/","qqCode"),
         org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
  Izogibajte se klicu spletne storitve .net v Javi z napako "Strežnik ni prepoznal vrednosti HTTP glave SOAPAction"
  call.setUseSOAPAction(true);
  call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Vrsta vrnjenega parametra
  call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Prav tako je treba opozoriti, da morate dodati metodo, ki jo boste klicali, sicer bo prav tako prijavljena napaka
  Objektne tabele kapsulirajo parametre     
  String ret = (String) call.invoke(new Object[] {"aaaaa"});   
  System.out.println("--------"+ret);
    }

Opazite razdelek za komentarje.

Prijava do hiperpovezave je vidna.? WSDL pomeni Public Web Service

Naslednja izjema nastane, ko wsdl2java.bat, ki uporablja CXF, ustvari odjemalca za objavo .net spletne storitve na podlagi wsdl datoteke


( deklaracija nedoločenega elementa 's:shema')

Rešitev:

Odpri wsdl.xml in uporabi


<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any />
Ta napaka pri generiranju wsdl2java bi morala biti povezana s tem, da JAXB ne podpira xml referenc, saj sta <s:any minOccurs="2" maxOccurs="2"/> in <s:element ref="s:schema" /><s:any/> dejansko enakovredni. <s:element ref="s:schema" /> dejansko pomeni, da lahko uporabite katerikoli tip elementa, določen s s:schema tukaj, <s:any /> opravlja to vlogo, <s:any minOccurs="2" maxOccurs="2"/> je le dva <s:any />

Bilo je napisano v enem stavku.

ReferenčniPrijava do hiperpovezave je vidna.

Uporaba CXF-jevega wsdl2java.bat ustvari super napako pri prevajanju odjemalca na podlagi datoteke wsdl

Rešitev:

Ne prevaja se pravilno, ker specifikacija jax-ws2.2 nasprotuje java6.

Vendar pa programa ni mogoče prevesti samo v java5, zato je treba znižati različico specifikacije jax-ws, kar je mogoče obdelati takole: Izvedi ukaz

wsdl2Java -frontend jaxws21 -client *.xml

Na ta način je mogoče kodo, generirano z jax-ws2.1, prevesti in izvesti v java6.

Primerjal sem kodo odjemalca, ki jo je ustvarilo orodje, s primerjavo besedila in ugotovil, da slednja generira še 3 odjemalsko kodo, zato lahko odstranitev treh konstruktorjev, ki poročajo o napakah, prav tako reši zgoraj omenjene težave.

Ponatisnjeno iz:Prijava do hiperpovezave je vidna.




Prejšnji:.NET/C# uporablja BenchmarkDotNet za testiranje zmogljivosti kode
Naslednji:Klic vmesnika Consul HTTP API
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com