De ce serverul de raportare a serviciilor web care apelează C# nu recunoaște valoarea antetului http SOAPAction și lasă întotdeauna C# să o modifice, doar pentru că C# trebuie doar să adauge un tag, de ce JAVA nu poate specifica o cerere de acțiune?
Publicarea și apelarea Webservice este foarte simplă, dar există totuși probleme minore, care sunt rezumate astfel:
Java apelează webService-ul .net cu o eroare "Server failed of recognize the value of HTTP header SOAPAction".
Soluție:
Când apelezi webservice, nu este specificat SoapAction, nu este specificat RequestNameSpace, astfel încât "Serverul nu a recunoscut valoarea antetului HTTP SOAPAction" apare întotdeauna la solicitare.
Dacă folosiți apeluri Axis, numiți-le astfel:
public static void main(String[] args) throws Exception { Nu aduceți? Sufixul WSDL Capătul șirului = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx"; Creează un apel de serviciu Serviciu serviciu = serviciu nou(); Creează un obiect de apel prin serviciu Call call = (Apel) serviciu.createCall(); Setează URL-ul unde se află serviciul call.setTargetEndpointAddress(new java.net.URL(endpoint)); qqCheckOnline este metoda "http://WebXml.com.cn/" pe partea de net, care acordă atenție și adresei spațiului de nume și va raporta o eroare dacă nu o aduci call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline")); qqCode este, de asemenea, numele parametrului pentru metoda .NET, care este numele parametrului pentru qqCheckOnline call.addParameter(new QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Evită apelarea Java la webService-ul .net cu eroarea "Serverul nu a recunoscut valoarea antetului HTTP SOAPAction" call.setUseSOAPAction(true); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Tipul parametrului returnat call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Trebuie menționat și că trebuie adăugat metoda de apelat, altfel va fi raportată și o eroare Array-urile de obiecte încapsulează parametrii String ret = (String) call.invoke(new Object[] {"aaaaa"}); System.out.println("--------"+ret); } Observați secțiunea de comentarii.
Autentificarea cu hyperlink este vizibilă.? WSDL înseamnă Public Web Service
Următoarea excepție apare atunci când wsdl2java.bat care folosește CXF generează un client care publică un serviciu web .net bazat pe un fișier wsdl
( declarație de element nedefinit 's:schema') Soluție:
Deschide wsdl.xml și folosește-l
<s:any minOccurs="2" maxOccurs="2"/>Alternativ <s:element ref="s:schema" /><s:any /> Această eroare de generare wsdl2java ar trebui să fie legată de faptul că JAXB nu suportă referințe xml, deoarece <s:any minOccurs="2" maxOccurs="2"/> și <s:element ref="s:schema" /><s:any/> sunt de fapt echivalente. <s:element ref="s:schema" /> înseamnă de fapt că poți folosi orice tip de element specificat de s:schema aici, <s:any /> joacă acest rol, <s:any minOccurs="2" maxOccurs="2"/> este doar două <s:any /> A fost scris doar într-o propoziție.
referințăAutentificarea cu hyperlink este vizibilă.
Folosirea CXF-ului wsdl2java.bat generează o super eroare de compilare a clientului bazată pe fișierul wsdl
Soluție:
Nu compilează corect deoarece specificația jax-ws2.2 intră în conflict cu java6.
Totuși, programul nu poate fi compilat doar în java5, așa că este necesar să se reducă versiunea specificației jax-ws, care poate fi gestionată astfel: Execută comanda
wsdl2java -frontend jaxws21 -client *.xml Astfel, codul generat cu jax-ws2.1 poate fi compilat și executat în java6.
Am comparat codul client generat de instrument cu comparația de text și am constatat că acesta din urmă genera 3 coduri client în plus, deci eliminarea celor 3 constructori care raportau erori poate rezolva și problemele de mai sus.
Reprodus din:Autentificarea cu hyperlink este vizibilă.
|