Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 26959|Svare: 0

[Kilde] Java-kall til C#-webtjenesteserveren klarer ikke å gjenkjenne verdien av HTTP-headeren SOAPAction

[Kopier lenke]
Publisert 2021-3-4 13:19:39 | | | |
Hvorfor klarer ikke webtjenesterapporteringsserveren som kaller C# å gjenkjenne verdien av http-headeren SOAPAction og lar alltid C# endre den? Bare fordi C# bare trenger å legge til en tagg, hvorfor kan ikke JAVA spesifisere en handlingsforespørsel?



Publisering og kalling av Webservice er veldig enkelt, men det finnes fortsatt mindre problemer, som oppsummeres slik:

Java kaller .nets webService med feilen "Server failed to recognize the value of HTTP-header SOAPAction".

Løsning:

Når man kaller webtjeneste, er det ingen SoapAction spesifisert, ingen RequestNameSpace er spesifisert, så "Serveren klarte ikke å gjenkjenne verdien av HTTP-headeren SOAPAction" vises alltid når man forespør.

Hvis du bruker aksekall, kall dem som følger:


offentlig statisk void main(String[] args) kaster Unntak {  
    Ikke ta med? WSDL-suffiks
    Strengendepunkt = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
  Opprett et servicekall     
  Servicetjeneste = ny tjeneste();
  Opprett et kallobjekt gjennom tjenesten
  Call call = (Call) service.createCall();   
  Sett URL-en der tjenesten er plassert   
  call.setTargetEndpointAddress(ny java.net.URL(endpoint));   
  qqCheckOnline er metoden "http://WebXml.com.cn/" på nettsiden, som også følger med på adressen til navnerommet, og vil også rapportere en feil hvis du ikke tar den med
  call.setOperationName(ny QName("http://WebXml.com.cn/","qqCheckOnline"));
  qqCode er også parameternavnet til .NET-metoden, som er parameternavnet til qqCheckOnline
  call.addParameter(new QName("http://WebXml.com.cn/","qqCode"),
         org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
  Unngå at Java kaller .nets webService med feilmeldingen «Serveren klarte ikke å gjenkjenne verdien av HTTP-headeren SOAPAction»
  call.setUseSOAPAction(true);
  call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Typen parameter som returneres
  call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Det bør også bemerkes at du må legge til metoden som skal kalles inn, ellers vil en feil også bli rapportert
  Objektmatriser kapsler inn parameterne     
  String ret = (String) call.invoke(new Object[] {"aaaaa"});   
  System.out.println("--------"+ret);
    }

Legg merke til kommentarfeltet.

Innloggingen med hyperkoblingen er synlig.? WSDL står for Public Web Service

Følgende unntak oppstår når wsdl2java.bat som bruker CXF genererer en klient for å publisere en .net-webtjeneste basert på en wsdl-fil


(udefinert elementdeklarasjon 's:schema')

Løsning:

Åpne wsdl.xml og bruk den


<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any />
Denne wsdl2java-genereringsfeilen bør være relatert til at JAXB ikke støtter xml-referanser, fordi <s:any minOccurs="2" maxOccurs="2"/> og <s:element ref="s:schema" /><s:any/> faktisk er ekvivalente. <s:element ref="s:schema" /> betyr faktisk at du kan bruke hvilken som helst elementtype spesifisert av s:schema her, <s:any /> spiller denne rollen, <s:any minOccurs="2" maxOccurs="2"/> er bare to <s:any />

Det var bare skrevet i én setning.

referanseInnloggingen med hyperkoblingen er synlig.

Ved å bruke CXFs wsdl2java.bat genereres en klientkompileringssuperfeil basert på wsdl-filen

Løsning:

Den kompileres ikke riktig fordi jax-ws2.2-spesifikasjonen er i konflikt med java6.

Programmet kan imidlertid ikke kompileres kun i java5, så det er nødvendig å senke jax-ws-spesifikasjonsversjonen, som kan håndteres slik: Utfør kommandoen

wsdl2java -frontend jaxws21 -client *.xml

På denne måten kan koden generert med jax-ws2.1 kompileres og kjøres i java6.

Jeg sammenlignet klientkoden som ble generert av verktøyet med tekstsammenligning og fant ut at sistnevnte genererte 3 flere klientkoder, så å fjerne de 3 konstruktørene som rapporterte feil kan også løse de ovennevnte problemene.

Gjengitt fra:Innloggingen med hyperkoblingen er synlig.




Foregående:.NET/C# bruker BenchmarkDotNet for å teste kodeytelse
Neste:Consul HTTP API-grensesnittkall
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com