Miért nem ismeri fel a webszolgáltatás jelentési szerver, amely C#-et hív, a http fejléc SOAPAction értékét, és miért hagyja mindig a C# megváltoztatni, csak mert C#-nak csak címkét kell hozzáadnia, miért nem tud JAVA cselekvési kérést megadni?
A Webszolgáltatás közzététele és hívása nagyon egyszerű, de még mindig vannak kisebb problémák, amelyeket a következőképpen összefoglalnak:
A Java a .net webservice-ét "Server nem ismerte fel a HTTP fejléc SOAPAction értékét" hibával hívja meg.
Megoldás:
Webservice híváskor nincs megadva SoapAction, nincs RequestNameSpace (RequestNameSpace), így a "A szerver nem ismerte fel a HTTP fejléc SOAPAction értékét" mindig megjelenik kéréskor.
Ha tengelyhívásokat használunk, hívjuk őket a következőként:
public static void main(String[] args) dob Exception { Nem hozod magad? WSDL utótag String endpoint = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx"; Hozz létre szolgáltatási hívást Szolgálat = új Szolgálat(); Hozz létre hívásobjektumot szolgáltatáson keresztül Call call = (Call) service.createCall(); Állítsd be az URL-t, ahol a szolgáltatás található call.setTargetEndpointAddress(new java.net.URL(endpoint)); qqCheckOnline a "http://WebXml.com.cn/" módszer a hálózati oldalon, amely figyeli a névtér címét is, és hibát jelent, ha nem hozod be. call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline")); a qqCode a .NET metódus paraméterneve is, amely a qqCheckOnline paraméterneve call.addParameter(new QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Kerüld el, hogy a Java a .net webservice-ét hívja a "A szerver nem ismerte fel a HTTP fejléc SOAPAction értékét" hibával. call.setUseSOAPAction(true); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); A visszaadott paraméter típusa call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Ezt is meg kell jegyezni, hogy hozzá kell adni a hívandó metódust, különben hibát is jelentenek Az objektumtömbök kapszulázzák a paramétereket String ret = (String) call.invoke(új objektum[] {"aaaaa"}); System.out.println("--------"+ret); } Figyeld meg a hozzászólások szekciót.
A hiperlink bejelentkezés látható.? A WSDL a Public Web Service rövidítése
A következő kivétel akkor fordul elő, amikor a CXF-et használó wsdl2java.bat egy klienst generál, amely egy .net webszolgáltatást jelent meg egy wsdl fájl alapján.
( definiálatlan elem deklaráció 's:séma') Megoldás:
Nyisd ki a wsdl.xml és használd
<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any /> Ez a wsdl2java generáló hiba ahhoz kapcsolódik, hogy a JAXB nem támogatja az xml refeket, mert a <s:any minOccurs="2" maxOccurs="2"/> és <s:element ref="s:schema" /><s:any/> valójában ekvivalensek. <s:element ref="s:schema" /> valójában azt jelenti, hogy itt az s:schema által meghatározott elemtípust használhatsz, <s:any /> ezt a szerepet tölti be, <s:any minOccurs="2" maxOccurs="2"/> csak két <s:any /> Csak egy mondatban volt leírva.
utalásA hiperlink bejelentkezés látható.
A CXF wsdl2java.bat használatával egy kliens fordítási szuperhibát generálnak a wsdl fájl alapján
Megoldás:
Nem fordítja meg megfelelően, mert a jax-ws2.2 specifikáció ütközik a java6-tal.
Azonban a programot nem lehet csak java5-ben fordítani, ezért a jax-ws specifikációs verziót kell csökkenteni, amely így kezelhető: A parancs végrehajtása
wsdl2java -frontend jaxws21 -client *.xml Így a jax-ws2.1-ben generált kód lefordítható és végrehajtható java6-ban.
Összehasonlítottam az eszköz által generált kliens kódot a szöveges összehasonlítással, és azt találtam, hogy az utóbbi további 3 klienskódot generált, így a hibákat jelentő három konstruktor eltávolítása is megoldhatja a fenti problémákat.
Átadott forrás:A hiperlink bejelentkezés látható.
|