Waarom herkent de webservice-rapportageserver die C# aanroept de waarde van de http-header SOAPAction niet en laat C# die altijd wijzigen? Alleen omdat C# alleen een tag hoeft toe te voegen, waarom kan JAVA dan geen actieverzoek specificeren?
Het publiceren en aanroepen van een webservice is heel eenvoudig, maar er zijn nog steeds kleine problemen, die als volgt worden samengevat:
Java roept .net's webService aan met een fout "Server couldn't recognize the value of HTTP header SOAPAction".
Oplossing:
Bij het aanroepen van webservice wordt geen SoapAction gespecificeerd, geen RequestNameSpace gespecificeerd, dus "De server heeft de waarde van de HTTP-header SOAPAction niet herkend" verschijnt altijd bij het aanvragen.
Als je Axis calls gebruikt, roep ze dan als volgt:
publieke statische void main(String[] args) werpt Exception { Niet meenemen? WSDL-achtervoegsel String-eindpunt = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx"; Maak een serviceoproep aan Servicedienst = nieuwe Service(); Maak een aanroepobject aan via service Call call = (Call) service.createCall(); Stel de URL in waar de dienst zich bevindt call.setTargetEndpointAddress(new java.net.URL(endpoint)); qqCheckOnline is de methode "http://WebXml.com.cn/" aan de netzijde, die ook let op het adres van de naamruimte en ook een foutmelding zal melden als je deze niet aanbrengt. call.setOperationName(nieuwe QName("http://WebXml.com.cn/","qqCheckOnline")); qqCode is ook de parameternaam van de .NET-methode, wat de parameternaam is van qqCheckOnline call.addParameter(nieuwe QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Vermijd dat Java .net's webService aanroept met de foutmelding "De server herkende de waarde van de HTTP-header SOAPAction niet" call.setUseSOAPAction(true); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Het type parameter dat wordt teruggegeven call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Dit moet ook worden opgemerkt dat je de te roepen methode moet toevoegen, anders wordt er ook een fout gerapporteerd Objectarrays kapselen de parameters in String ret = (String) call.invoke(new Object[] {"aaaaa"}); System.out.println("--------"+ret); } Let op de reactiesectie.
De hyperlink-login is zichtbaar.? WSDL staat voor Public Web Service (Public Web Service)
De volgende uitzondering treedt op wanneer de wsdl2java.bat die CXF gebruikt een client genereert om een .net-webservice te publiceren gebaseerd op een wsdl-bestand
( ongedefinieerde elementverklaring 's:schema') Oplossing:
Open de wsdl.xml en gebruik
<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any /> Deze wsdl2java-generatiefout zou gerelateerd moeten zijn aan het feit dat JAXB geen xml-referenties ondersteunt, omdat <s:any minOccurs="2" maxOccurs="2"/> en <s:element ref="s:schema" /><s:any/> eigenlijk equivalent zijn. <s:element ref="s:schema" /> betekent eigenlijk dat je elk elementtype kunt gebruiken dat door s:schema is gespecificeerd, <s:elke /> speelt deze rol, <s:elke minOccurs="2" maxOccurs="2"/> is gewoon twee <s:elke /> Het stond gewoon in één zin geschreven.
referentieDe hyperlink-login is zichtbaar.
Met behulp van CXF's wsdl2java.bat genereert een clientcompilatie-superfout op basis van het wsdl-bestand
Oplossing:
Het compileert niet correct omdat de jax-ws2.2-specificatie conflicteert met java6.
Het programma kan echter niet alleen in java5 worden gecompileerd, dus is het noodzakelijk om de jax-ws-specificatieversie te verlagen, die als volgt kan worden afgehandeld: Voer het commando uit
wsdl2java -frontend jaxws21 -client *.xml Op deze manier kan de code die met jax-ws2.1 is gegenereerd, worden gecompileerd en uitgevoerd in java6.
Ik heb de clientcode die door de tool wordt gegenereerd vergeleken met tekstvergelijking en ontdekte dat die laatste 3 extra clientcode genereerde, dus het verwijderen van de 3 constructors die fouten rapporteerden kan ook bovenstaande problemen oplossen.
Herdrukt van:De hyperlink-login is zichtbaar.
|