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.
|