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.
|