Kodėl žiniatinklio paslaugų ataskaitų serveris, kuris iškviečia C#, neatpažįsta http antraštės SOAPAction reikšmės ir visada leidžia C# ją pakeisti, tik todėl, kad C# reikia tik pridėti žymą, kodėl JAVA negali nurodyti veiksmo užklausos?
Skelbti ir skambinti "Webservice" yra labai paprasta, tačiau vis tiek yra nedidelių problemų, kurios apibendrinamos taip:
"Java" iškviečia .net žiniatinklio paslaugą su klaida "Serveriui nepavyko atpažinti HTTP antraštės SOAPAction reikšmės".
Sprendimas:
Skambinant žiniatinklio paslauga, nenurodytas joks SoapAction, nenurodytas RequestNameSpace, todėl užklausos metu visada rodoma "Serveriui nepavyko atpažinti HTTP antraštės SOAPAction reikšmės".
Jei naudojate ašies skambučius, skambinkite jiems taip:
public static void main(String[] args) meta Išimtis { Neatnešti? wsdl priesaga Eilutės galinis taškas = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx"; Aptarnavimo skambučio kūrimas Aptarnavimo paslauga = nauja paslauga(); Skambinimo objekto kūrimas naudojant tarnybą Skambučio skambutis = (Skambutis) service.createCall(); Nustatykite URL, kuriame yra paslauga call.setTargetEndpointAddress(naujas java.net.URL(galinis punktas)); qqCheckOnline yra metodas "http://WebXml.com.cn/" tinklo pusėje, kuris taip pat atkreipia dėmesį į vardų srities adresą, taip pat praneš apie klaidą, jei jo nepateiksite call.setOperationName(naujas QName("http://WebXml.com.cn/","qqCheckOnline")); qqCode taip pat yra .NET metodo parametro pavadinimas, kuris yra qqCheckOnline parametro pavadinimas call.addParameter(naujas QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Venkite "Java" iškviesti .net žiniatinklio paslaugą su klaida "Serveriui nepavyko atpažinti HTTP antraštės SOAPAction reikšmės" call.setUseSOAPAction(teisinga); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Grąžinto parametro tipas call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Taip pat reikėtų pažymėti, kad turite pridėti metodą, kurį norite iškviesti, kitaip taip pat bus pranešta apie klaidą Objektų masyvai apima parametrus String ret = (Eilutė) call.invoke(naujas objektas[] {"aaaaa"}); System.out.println("--------"+ret); } Atkreipkite dėmesį į komentarų skyrių.
Hipersaito prisijungimas matomas.? WSDL reiškia viešąją žiniatinklio paslaugą
Ši išimtis įvyksta, kai CXF naudojantis wsdl2java.bat sugeneruoja klientą, kad publikuotų .net žiniatinklio tarnybą, pagrįstą wsdl failu
( neapibrėžto elemento deklaracija 's:schema') Sprendimas:
Atidarykite wsdl.xml ir naudokite
<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any /> Ši wsdl2java generavimo klaida turėtų būti susijusi su JAXB nepalaiko xml refs, nes <s:any minOccurs="2" maxOccurs="2"/> ir <s:element ref="s:schema" /><s:any/> iš tikrųjų yra lygiaverčiai. <s:element ref="s:schema" /> iš tikrųjų reiškia, kad čia galite naudoti bet kokį elemento tipą, nurodytą s:schema, <s:any /> atlieka šį vaidmenį, <s:any minOccurs="2" maxOccurs="2"/> yra tik du <s:any /> Tai buvo parašyta tik vienu sakiniu.
NuorodaHipersaito prisijungimas matomas.
Naudojant CXF wsdl2java.bat sugeneruojama kliento kompiliavimo super klaida, pagrįsta wsdl failu
Sprendimas:
Jis nėra tinkamai kompiliuojamas, nes jax-ws2.2 specifikacija prieštarauja java6.
Tačiau programos negalima kompiliuoti tik java5, todėl būtina sumažinti jax-ws specifikacijos versiją, kurią galima tvarkyti taip: Vykdykite komandą
wsdl2java -frontend jaxws21 -client *.xml Tokiu būdu kodas, sugeneruotas naudojant jax-ws2.1, gali būti kompiliuojamas ir vykdomas java6.
Palyginau įrankio sugeneruotą kliento kodą su teksto palyginimu ir pastebėjau, kad pastarasis sugeneravo dar 3 kliento kodą, todėl pašalinus 3 konstruktorius, kurie pranešė apie klaidas, taip pat galima išspręsti aukščiau nurodytas problemas.
Perspausdinta iš:Hipersaito prisijungimas matomas.
|