Kāpēc tīmekļa pakalpojuma atskaišu serveris, kas izsauc C#, neatpazīst http galvenes SOAPAction vērtību un vienmēr ļauj C# to mainīt, tikai tāpēc, ka C# ir jāpievieno tikai tags, kāpēc JAVA nevar norādīt darbības pieprasījumu?
Webservice publicēšana un izsaukšana ir ļoti vienkārša, taču joprojām ir nelielas problēmas, kas apkopotas šādi:
Java izsauc .net webService ar kļūdu "Serveris nevarēja atpazīt HTTP galvenes SOAPAction vērtību".
Šķīdums:
Izsaucot tīmekļa pakalpojumu, nav norādīta SoapAction, nav norādīta RequestNameSpace, tāpēc pieprasījuma laikā vienmēr parādās "Serveris neatpazina HTTP galvenes SOAPAction vērtību".
Ja izmantojat ass zvanus, zvaniet tiem šādi:
public static void main(String[] args) met Izņēmums { Neatnes? WSDL sufikss Virknes galapunkts = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx"; Servisa zvana izveide Pakalpojuma pakalpojums = jauns pakalpojums(); Zvana objekta izveide, izmantojot pakalpojumu Zvana zvans = (Zvans) service.createCall(); Pakalpojuma atrašanās vietas URL iestatīšana call.setTargetEndpointAddress(jauns java.net.URL(galapunkts)); qqCheckOnline ir metode "http://WebXml.com.cn/" tīkla pusē, kas arī pievērš uzmanību nosaukumu telpas adresei, kā arī ziņos par kļūdu, ja to nenogādājat call.setOperationName(jauns QName("http://WebXml.com.cn/","qqCheckOnline")); qqCode ir arī .NET metodes parametra nosaukums, kas ir qqCheckOnline parametra nosaukums call.addParameter(jauns QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Izvairieties no Java izsaukuma .net tīmekļa pakalpojumam ar kļūdu "Serveris neatpazina HTTP galvenes SOAPAction vērtību" call.setUseSOAPAction(true); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Atgrieztā parametra tips call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Jāatzīmē arī tas, ka jums ir jāpievieno izsaucamā metode, pretējā gadījumā tiks ziņots arī par kļūdu Objektu masīvi iekapsulē parametrus String ret = (virkne) call.invoke(jauns objekts[] {"aaaaa"}); System.out.println("--------"+ret); } Ņemiet vērā komentāru sadaļu.
Hipersaites pieteikšanās ir redzama.? WSDL apzīmē publisko tīmekļa pakalpojumu
Šāds izņēmums rodas, ja wsdl2java.bat, kas izmanto CXF, ģenerē klientu, lai publicētu .net tīmekļa pakalpojumu, pamatojoties uz wsdl failu
( nedefinēta elementa deklarācija 's:schema') Šķīdums:
Atveriet wsdl.xml un izmantojiet
<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any /> Šī wsdl2java ģenerēšanas kļūda ir saistīta ar JAXB, kas neatbalsta xml refs, jo <s:any minOccurs="2" maxOccurs="2"/> un <s:element ref="s:schema" /><s:any/> faktiski ir ekvivalenti. <s:element ref="s:schema" /> faktiski nozīmē, ka šeit var izmantot jebkuru elementu tipu, <s:any /> spēlē šo lomu, <s:any minOccurs="2" maxOccurs="2"/> ir tikai divi <s:any /> Tas bija uzrakstīts tikai vienā teikumā.
AtsauceHipersaites pieteikšanās ir redzama.
Izmantojot CXF wsdl2java.bat, tiek ģenerēta klienta kompilācijas super kļūda, pamatojoties uz wsdl failu
Šķīdums:
Tas netiek kompilēts pareizi, jo jax-ws2.2 specifikācija ir pretrunā ar java6.
Tomēr programmu nevar kompilēt tikai java5, tāpēc ir nepieciešams pazemināt jax-ws specifikācijas versiju, ko var apstrādāt šādi: Izpildiet komandu
wsdl2java -frontend jaxws21 -client *.xml Tādā veidā kodu, kas ģenerēts ar jax-ws2.1, var kompilēt un izpildīt java6.
Es salīdzināju rīka ģenerēto klienta kodu ar teksta salīdzinājumu un atklāju, ka pēdējais ģenerēja vēl 3 klienta kodu, tāpēc 3 konstruktoru noņemšana, kas ziņoja par kļūdām, var arī atrisināt iepriekš minētās problēmas.
Pārdrukāts no:Hipersaites pieteikšanās ir redzama.
|