Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 26959|Atsakyti: 0

[Šaltinis] "Java" iškvietimai į C# žiniatinklio paslaugų serverį neatpažįsta HTTP antraštės SOAPAction reikšmės

[Kopijuoti nuorodą]
Publikuota: 2021-3-4 13:19:39 | | | |
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.




Ankstesnis:.NET/C# naudoja BenchmarkDotNet kodo našumui patikrinti
Kitą:Konsulo HTTP API sąsajos iškvietimas
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com