Proč server pro hlášení webových služeb, který volá C#, nerozpozná hodnotu http hlavičky SOAPAction a vždy nechá C# ji změnit, jen proto, že C# potřebuje přidat tag, proč JAVA nemůže specifikovat požadavek na akci?
Publikování a volání Webservice je velmi jednoduché, ale stále existují drobné problémy, které jsou shrnuty následovně:
Java volá webslužbu .net s chybou "Server nerozpoznal hodnotu HTTP hlavičky SOAPAction".
Řešení:
Při volání webové služby není specifikována žádná SoapAction, není specifikován žádný RequestNameSpace, takže při žádosti se vždy zobrazí "Server nerozpoznal hodnotu HTTP hlavičky SOAPAction".
Pokud používáte volání Axis, volejte je následovně:
public static void main(String[] args) hází Výjimka { Nepřinášíš? Přípona WSDL Koncový bod řetězce = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx"; Vytvořte servisní hovor Služba = nová služba(); Vytvořte volací objekt prostřednictvím služby Volání volání = (Volání) service.createCall(); Nastavte URL, kde se služba nachází call.setTargetEndpointAddress(new java.net.URL(endpoint)); qqCheckOnline je metoda "http://WebXml.com.cn/" na straně sítě, která také sleduje adresu jmenného prostoru a také hlásí chybu, pokud ji nepřinesete call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline")); qqCode je také název parametru metody .NET, což je název parametru qqCheckOnline call.addParameter(new QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Vyhněte se volání webové služby .net pomocí chyby "Server nerozpoznal hodnotu HTTP hlavičky SOAPAction" call.setUseSOAPAction(true); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Typ parametru vráceného call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Je také třeba poznamenat, že musíte přidat metodu, kterou voláte, jinak bude také hlášena chyba Objektová pole zapouzdřují parametry String ret = (String) call.invoke(new Object[] {"aaaaa"}); System.out.println("--------"+ret); } Všimněte si sekce komentářů.
Přihlášení k hypertextovému odkazu je viditelné.? WSDL znamená Public Web Service
Následující výjimka nastává, když wsdl2java.bat používající CXF vygeneruje klienta pro publikaci .net webové služby založené na souboru wsdl
( deklarace nedefinovaného prvku 'S:Schema') Řešení:
Otevřete wsdl.xml a použijte
<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any /> Tato chyba generování wsdl2java by měla souviset s tím, že JAXB nepodporuje xml refs, protože <s:any minOccurs="2" maxOccurs="2"/> a <s:element ref="s:schema" /><s:any/> jsou ve skutečnosti ekvivalentní. <s:element ref="s:schema" /> ve skutečnosti znamená, že zde můžete použít jakýkoli typ prvku specifikovaný s:schema, <s:any /> tuto roli hraje, <s:any minOccurs="2" maxOccurs="2"/> je jen dva <s:any /> Bylo to napsáno v jedné větě.
odkazPřihlášení k hypertextovému odkazu je viditelné.
Použití wsdl2java.bat CXF generuje superchybu kompilace klienta na základě souboru wsdl
Řešení:
Nekompiluje se správně, protože specifikace jax-ws2.2 je v konfliktu s java6.
Program však nelze zkompilovat pouze v java5, proto je nutné snížit specifikaci jax-ws, což lze řešit takto: Spustit příkaz
WSDL2Java -frontend jaxws21 -client *.xml Tímto způsobem lze kód generovaný pomocí jax-ws2.1 zkompilovat a spustit v java6.
Porovnal jsem klientský kód generovaný nástrojem s porovnáním textu a zjistil jsem, že porovnání vygenerovalo ještě 3 klientské kódy, takže odstranění 3 konstruktorů, které hlásily chyby, může také vyřešit výše uvedené problémy.
Přetištěno z:Přihlášení k hypertextovému odkazu je viditelné.
|