Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 26959|Vastaus: 0

[Lähde] Java-kutsut C#-webservice-palvelimelle eivät tunnista HTTP-otsikon SOAPActionin arvoa

[Kopioi linkki]
Julkaistu 2021-3-4 klo 13:19:39 | | | |
Miksi webservice-raportointipalvelin, joka kutsuu C#:ää, ei tunnista http-otsikon SOAPActionin arvoa ja antaa aina C#:n muuttaa sitä, vaikka C# tarvitsee vain lisätä tunnisteen, miksi JAVA ei voi määrittää toimenpidepyyntöä?



Webservicen julkaiseminen ja kutsuminen on hyvin yksinkertaista, mutta on silti pieniä ongelmia, jotka on tiivistetty seuraavasti:

Java kutsuu .netin webServiceä virheellä "Server failed to recognized the value of HTTP header SOAPAction".

Ratkaisu:

Kun kutsutaan webserviceä, SoapActionia ei määritetä, eikä RequestNameSpacea, joten "Palvelin ei tunnistanut HTTP-otsikon arvoa SOAPAction" ilmestyy aina pyynnön yhteydessä.

Jos käytät akselikutsuja, kutsu ne seuraavasti:


public static void main(String[] args) heittää Exception {  
    Et tuo mukaan? WSDL-päätte
    Merkkijonon päätepiste = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
  Luo palvelukutsu     
  Palvelupalvelu = uusi Palvelu();
  Luo kutsuobjekti palvelun kautta
  Call call = (Call) service.createCall();   
  Aseta URL-osoite, jossa palvelu sijaitsee   
  call.setTargetEndpointAddress (uusi java.net.URL(päätepiste));   
  qqCheckOnline on metodi "http://WebXml.com.cn/" verkkopuolella, joka myös kiinnittää huomiota nimiavaruuden osoitteeseen ja raportoi virheen, jos et tuo sitä
  call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline"));
  qqCode on myös .NET-metodin parametrinimi, joka on myös qqCheckOnlinen parametrin nimi
  call.addParameter(uusi QName("http://WebXml.com.cn/","qqCode"),
         org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
  Vältä Javan kutsua .netin webServiceen virheellä "The server failed to recognition the value of HTTP header SOAPAction"
  call.setUseSOAPAction(true);
  call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Palautettujen parametrien tyyppi
  call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Tämä on myös huomioitava, että sinun täytyy lisätä kutsuttava metodi, muuten virhe raportoidaan myös
  Objektitaulukot kapseloivat parametrit     
  String ret = (String) call.invoke(new Object[] {"aaaaa"});   
  System.out.println("--------"+ret);
    }

Huomaa kommenttiosio.

Hyperlinkin kirjautuminen on näkyvissä.? WSDL tarkoittaa julkista verkkopalvelua

Seuraava poikkeus esiintyy, kun CXF:ää käyttävä wsdl2java.bat luo asiakkaan julkaistakseen .net-web-palvelun wsdl-tiedoston pohjalta


( määrittelemätön elementtimääritys 's:schema')

Ratkaisu:

Avaa wsdl.xml ja käytä


<s:any minOccurs="2" maxOccurs="2"/>Vaihtoehtoinen <s:element ref="s:schema" /><s:any />
Tämän wsdl2java-generointivirheen pitäisi liittyä siihen, että JAXB ei tue xml-viitteitä, koska <s:any minOccurs="2" maxOccurs="2"/> ja <s:element ref="s:schema" /><s:any/> ovat itse asiassa ekvivalentteja. <s:element ref="s:schema" /> tarkoittaa itse asiassa, että voit käyttää mitä tahansa s:schema-tyyppiä, <s:any /> toimii tässä roolissa, <s:any minOccurs="2" maxOccurs="2"/> on vain kaksi <s:any />

Se oli kirjoitettu yhdellä lauseella.

viittausHyperlinkin kirjautuminen on näkyvissä.

CXF:n wsdl2java.bat tuottaa asiakkaan käännössupervirheen wsdl-tiedoston perusteella

Ratkaisu:

Se ei käänny oikein, koska jax-ws2.2-määrittely on ristiriidassa java6:n kanssa.

Ohjelmaa ei kuitenkaan voi kääntää pelkästään java5:llä, joten jax-ws-määrittelyn versio on tarpeen alentaa, ja se voidaan käsitellä näin: Suorita komento

wsdl2java -frontend jaxws21 -client *.xml

Näin jax-ws2.1:llä generoitu koodi voidaan kääntää ja suorittaa java6:lla.

Vertailin työkalun tuottamaa asiakaskoodia tekstivertailuun ja huomasin, että jälkimmäinen tuotti kolme lisäasiakaskoodia, joten kolmen virheilmoituksen tehneen konstruktorin poistaminen voi myös ratkaista yllä mainitut ongelmat.

Uudelleenpainettu lähteestä:Hyperlinkin kirjautuminen on näkyvissä.




Edellinen:.NET/C# käyttää BenchmarkDotNetia koodin suorituskyvyn testaamiseen
Seuraava:Consul HTTP API -liitäntäkutsu
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com