|
|
Veröffentlicht am 04.03.2021, 13:19:39
|
|
|
|

Warum erkennt der Webservice-Reporting-Server, der C# aufruft, den Wert des HTTP-Headers SOAPAction nicht und lässt C# ihn immer ändern? Nur weil C# nur ein Tag hinzufügen muss, warum kann JAVA dann keine Aktionsanfrage angeben?
Das Veröffentlichen und Aufrufen von Webdiensten ist sehr einfach, aber es gibt immer noch kleinere Probleme, die wie folgt zusammengefasst sind:
Java ruft .nets WebService mit dem Fehler "Server failed to recognize the value of HTTP header SOAPAction" auf.
Lösung:
Beim Aufrufen des Webservices wird kein SoapAction angegeben, kein RequestNameSpace angegeben, sodass bei der Anfrage immer "Der Server hat den Wert des HTTP-Headers SOAPAction nicht erkannt".
Wenn Achsenaufrufe verwendet werden, rufen Sie sie wie folgt auf:
public static void main(String[] args) wirft Exception { Nicht mitbringen? WSDL-Suffix String-Endpunkt = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx"; Erstellen Sie einen Serviceaufruf Servicedienst = neuer Service(); Erstellen Sie ein Aufrufobjekt über Service Call Call = (Call) service.createCall(); Setze die URL dort, wo sich der Dienst befindet call.setTargetEndpointAddress(new java.net.URL(endpoint)); qqCheckOnline ist die Methode "http://WebXml.com.cn/" auf der Netzseite, die auch auf die Adresse des Namespace achtet und ebenfalls einen Fehler meldet, wenn man ihn nicht mitbringt call.setOperationName(neuer QName("http://WebXml.com.cn/","qqCheckOnline")); qqCode ist auch der Parametername der .NET-Methode, die der Parametername von qqCheckOnline ist call.addParameter(new QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Vermeiden Sie, dass Java .nets WebService mit dem Fehler "Der Server hat den Wert des HTTP-Headers SOAPAction nicht erkannt" aufruft. call.setUseSOAPAction(true); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Der Typ des zurückgegebenen Parameters call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Es sollte auch beachtet werden, dass Sie die aufzurufende Methode hinzufügen müssen, sonst wird auch ein Fehler gemeldet Objektarrays kapseln die Parameter String ret = (String) call.invoke(new Object[] {"aaaaa"}); System.out.println("--------"+ret); } Beachten Sie den Kommentarbereich.
Der Hyperlink-Login ist sichtbar.? WSDL steht für Public Web Service (Public Web Service)
Die folgende Ausnahme tritt auf, wenn der wsdl2java.bat mit CXF einen Client generiert, der einen .net-Webservice basierend auf einer wsdl-Datei veröffentlicht.
(undefinierte Elementdeklaration 's:schema') Lösung:
Öffne die wsdl.xml und benutze
<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any /> Dieser wsdl2java-Generierungsfehler sollte damit zusammenhängen, dass JAXB XML-Referenzen nicht unterstützt, da <s:any minOccurs="2" maxOccurs="2"/> und <s:element ref="s:schema" /><s:any/> tatsächlich äquivalent sind. <s:element ref="s:schema" /> bedeutet tatsächlich, dass man hier jeden von s:schema angegebenen Elementtyp verwenden kann, <s:any /> spielt diese Rolle, <s:any minOccurs="2" maxOccurs="2"/> ist einfach zwei <s:any /> Es stand einfach in einem Satz geschrieben.
ReferenzDer Hyperlink-Login ist sichtbar.
Die Verwendung von CXFs wsdl2java.bat erzeugt einen Superfehler bei der Client-Kompilierung basierend auf der wsdl-Datei
Lösung:
Sie kompiliert nicht richtig, da die jax-ws2.2-Spezifikation mit java6 kollidiert.
Das Programm kann jedoch nicht nur in java5 kompiliert werden, daher ist es notwendig, die jax-ws-Spezifikationsversion zu reduzieren, die so gehandhabt werden kann: Ausführung des Befehls
wsdl2java -frontend jaxws21 -client *.xml Auf diese Weise kann der mit jax-ws2.1 generierte Code kompiliert und in java6 ausgeführt werden.
Ich habe den vom Tool generierten Client-Code mit dem Textvergleich verglichen und festgestellt, dass letzterer drei weitere Client-Code generierte, sodass das Entfernen der drei fehlermeldeten Konstruktoren die oben genannten Probleme ebenfalls lösen kann.
Nachdruck von:Der Hyperlink-Login ist sichtbar.
|
Vorhergehend:.NET/C# verwendet BenchmarkDotNet, um die Code-Performance zu testenNächster:Consul HTTP API-Schnittstellenaufruf
|