Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 26959|Atbildi: 0

[Avots] Java izsaukumi uz C# tīmekļa pakalpojuma serveri neatpazīst HTTP galvenes SOAPAction vērtību

[Kopēt saiti]
Publicēts 2021-3-4 13:19:39 | | | |
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.




Iepriekšējo:.NET/C# izmanto BenchmarkDotNet, lai pārbaudītu koda veiktspēju
Nākamo:Konsula HTTP API interfeisa izsaukums
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com