Hvorfor kan webservice-rapporteringsserveren, der kalder C#, ikke genkende værdien af http-headeren SOAPAction og lader altid C# ændre den? Bare fordi C# kun behøver at tilføje et tag, hvorfor kan JAVA så ikke specificere en handlingsanmodning?
Publicering og kald Webservice er meget enkelt, men der er stadig mindre problemer, som opsummeres således:
Java kalder .nets webService med fejlen "Server failed to recognise the value of HTTP header SOAPAction".
Opløsning:
Når webservice kaldes, specificeres der ingen SoapAction, ingen RequestNameSpace angives, så "Serveren kunne ikke genkende værdien af HTTP-headeren SOAPAction" vises altid ved anmodning.
Hvis du bruger aksekald, kald dem som følger:
offentlig statisk void main(String[] args) kaster Undtagelse { Ikke med? WSDL-suffiks Strengendepunkt = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx"; Opret et serviceopkald Serviceservice = ny Service(); Opret et kaldobjekt gennem service Call call = (Call) service.createCall(); Indstil URL'en, hvor tjenesten er placeret call.setTargetEndpointAddress(ny java.net.URL(endpoint)); qqCheckOnline er metoden "http://WebXml.com.cn/" på netsiden, som også holder øje med adressen på navneområdet og også vil rapportere en fejl, hvis du ikke bringer den call.setOperationName(ny QName("http://WebXml.com.cn/","qqCheckOnline")); qqCode er også parameternavnet for .NET-metoden, som er parameternavnet for qqCheckOnline call.addParameter(new QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Undgå at Java kalder .nets webService med fejlen "Serveren kunne ikke genkende værdien af HTTP-headeren SOAPAction" call.setUseSOAPAction(true); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Typen af parameter, der returneres call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Det skal også bemærkes, at du skal tilføje den metode, der skal kaldes, ellers vil der også blive rapporteret en fejl Objektarrays indkapsler parametrene String ret = (String) call.invoke(new Object[] {"aaaaa"}); System.out.println("--------"+ret); } Bemærk kommentarfeltet.
Hyperlink-login er synlig.? WSDL står for Public Web Service (Public Web Service)
Følgende undtagelse opstår, når wsdl2java.bat bruger CXF genererer en klient til at udgive en .net-webservice baseret på en wsdl-fil
(udefineret elementdeklaration 's:schema') Opløsning:
Åbn wsdl.xml og brug
<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any /> Denne wsdl2java-genereringsfejl bør være relateret til, at JAXB ikke understøtter xml-referencer, fordi <s:any minOccurs="2" maxOccurs="2"/> og <s:element ref="s:schema" /><s:any/> faktisk er ækvivalente. <s:element ref="s:schema" /> betyder faktisk, at du kan bruge enhver elementtype, der er specificeret af s:schema her, <s:any /> spiller denne rolle, <s:any minOccurs="2" maxOccurs="2"/> er bare to <s:any /> Det var bare skrevet i én sætning.
henvisningHyperlink-login er synlig.
Ved at bruge CXF's wsdl2java.bat genereres en klientkompilerings-superfejl baseret på wsdl-filen
Opløsning:
Den kompilerer ikke korrekt, fordi jax-ws2.2-specifikationen er i konflikt med java6.
Programmet kan dog ikke kun kompileres i java5, så det er nødvendigt at sænke jax-ws-specifikationsversionen, som kan håndteres således: Udfør kommandoen
wsdl2java -frontend jaxws21 -client *.xml På denne måde kan koden, der genereres med jax-ws2.1, kompileres og køres i java6.
Jeg sammenlignede klientkoden genereret af værktøjet med tekstsammenligning og fandt, at sidstnævnte genererede 3 flere klientkoder, så fjernelse af de 3 konstruktører, der rapporterede fejl, kan også løse ovenstående problemer.
Genoptrykt fra:Hyperlink-login er synlig.
|