Prečo server, ktorý volá C#, nerozpoznáva hodnotu http hlavičky SOAPAction a vždy dovolí C# ju zmeniť, len preto, že C# potrebuje pridať značku, prečo JAVA nemôže špecifikovať požiadavku na akciu?
Publikovanie a volanie Webservice je veľmi jednoduché, ale stále existujú menšie problémy, ktoré sú zhrnuté nasledovne:
Java volá webovú službu .net s chybou "Server nerozpoznal hodnotu HTTP hlavičky SOAPAction".
Riešenie:
Pri volaní webovej služby sa nešpecifikuje SoapAction, ani RequestNameSpace, takže pri požiadavke sa vždy zobrazí "Server nerozpoznal hodnotu HTTP hlavičky SOAPAction".
Ak používate volania Axis, volajte ich nasledovne:
public static void main(String[] args) hodí výnimku { Nepriniesť to? Prípona WSDL Koncový bod reťazca = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx"; Vytvorte servisný hovor Služba = nová služba(); Vytvoriť volací objekt cez službu Call call = (Call) service.createCall(); Nastavte URL, kde sa služba nachádza call.setTargetEndpointAddress(new java.net.URL(endpoint)); qqCheckOnline je metóda "http://WebXml.com.cn/" na strane internetu, ktorá tiež sleduje adresu menného priestoru a tiež hlási chybu, ak ju neprinesiete call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline")); qqCode je tiež názov parametra metódy .NET, ktorý je názvom parametra qqCheckOnline call.addParameter(new QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Vyhnite sa volaniu webovej služby .net od Javy s chybou "Server nerozpoznal hodnotu HTTP hlavičky SOAPAction" call.setUseSOAPAction(true); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Typ vráteného parametra call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Treba tiež poznamenať, že je potrebné pridať metódu, ktorá sa volá, inak sa tiež nahlási chyba Objektové polia zapuzdrujú parametre String ret = (String) call.invoke(new Object[] {"aaaaa"}); System.out.println("--------"+ret); } Všimnite si sekciu komentárov.
Prihlásenie na hypertextový odkaz je viditeľné.? WSDL znamená Public Web Service
Nasledujúca výnimka nastáva, keď wsdl2java.bat používajúci CXF vygeneruje klienta na publikovanie .net webovej služby na základe wsdl súboru
( deklarácia nedefinovaného prvku 'S:Schema') Riešenie:
Otvorte wsdl.xml a použite
<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any /> Táto chyba generovania wsdl2java by mala súvisieť s tým, že JAXB nepodporuje xml refs, pretože <s:any minOccurs="2" maxOccurs="2"/> a <s:element ref="s:schema" /><s:any/> sú v skutočnosti ekvivalentné. <s:element ref="s:schema" /> v skutočnosti znamená, že môžete použiť akýkoľvek typ prvku špecifikovaný s:schema tu, <s:any /> hrá túto úlohu, <s:any minOccurs="2" maxOccurs="2"/> je len dva <s:any /> Bolo to napísané v jednej vete.
referenciaPrihlásenie na hypertextový odkaz je viditeľné.
Použitie CXF wsdl2java.bat generuje superchybu kompilácie klienta na základe súboru wsdl
Riešenie:
Nekompiluje sa správne, pretože špecifikácia jax-ws2.2 je v konflikte s java6.
Program však nemožno kompilovať iba v java5, preto je potrebné znížiť verziu špecifikácie jax-ws, ktorú možno riešiť takto: Spustiť príkaz
WSDL2Java -frontend jaxws21 -client *.xml Týmto spôsobom je možné kód generovaný v jax-ws2.1 skompilovať a vykonať v java6.
Porovnal som klientský kód generovaný týmto nástrojom s porovnávaním textu a zistil som, že porovnávanie textu generovalo ďalšie 3 klientské kódy, takže odstránenie 3 konštruktorov, ktoré hlásili chyby, môže tiež vyriešiť vyššie uvedené problémy.
Prevzaté z:Prihlásenie na hypertextový odkaz je viditeľné.
|