it-swarm.com.de

Java-Webdienstfehler: com.ctc.wstx.exc.WstxEOFException: Unerwartet EOF in prolog

Ich habe ein Problem beim Erstellen und Verbinden eines Java-Clients mit einem ausgeführten Webdienst.

Ich verwende den folgenden Code:

Service myService  = null;
URL wsdlLocation = new URL("http://myservice?wsdl");
QName serviceName = new QName(wsdlLocation, "MyService");
Service myService = new Service(wsdlLocation, serviceName);

wo die Service-Klasse mit dem folgenden Befehl erstellt wurde:

wsimport -d gen -keep http://myservice?wsdl

Ich habe es auch mit einem Client ausprobiert, der von Apache cxf 2.4 wsdl2Java generiert wurde, aber das gleiche Ergebnis erhielt.

(Ich habe den WSDL-Speicherort und den Namen der Service-Klasse nur für diesen Beitrag geändert, im Code verwende ich die ursprünglichen.)

Ich erhalte jedoch eine Ausnahme, wenn ich den auf dem Anwendungsserver bereitgestellten Web-Service anrufe, wenn ich den Service mit dem neuen Service () - Befehl erstellt. __ Aber: Ich habe den WSDL-Speicherort mit der SOAP - Benutzeroberfläche getestet und funktioniert Ich habe auch einen Mock-Service mit der Soap-Benutzeroberfläche erstellt, und mein Java-Client konnte eine Verbindung herstellen, es aufrufen und die Ergebnisse abrufen. Das Problem tritt auf, wenn ich den Webdienst aufrufen möchte auf dem Appserver.

Stacktrace:

javax.xml.ws.WebServiceException: org.Apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
        at org.Apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.Java:149)
        at org.Apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.Java:98)
        at javax.xml.ws.Service.<init>(Service.Java:76)
        at MyService.<init>(MyService.Java:42)
        at mypackage.createService(AClass.Java:288)
        at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
        at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
        at Java.lang.reflect.Method.invoke(Method.Java:616)
Caused by: org.Apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
        at org.Apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.Java:100)
        at org.Apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.Java:199)
        at org.Apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.Java:147)
        ... 12 more
Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
 at [row,col,system-id]: [1,0,"http://myservice?wsdl"]
        at org.Apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.Java:256)
        at org.Apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.Java:205)
        at org.Apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.Java:98)
        ... 14 more
Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
 at [row,col,system-id]: [1,0,"http://myservice?wsdl"]
        at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.Java:677)
        at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.Java:2139)
        at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.Java:2045)
        at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.Java:1134)
        at org.Apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.Java:1248)
        at org.Apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.Java:1142)
        at org.Apache.cxf.staxutils.StaxUtils.read(StaxUtils.Java:1069)
        at org.Apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.Java:247)
        ... 16 more

Könnte mir bitte jemand helfen?

8
Kumite

Ich erinnere mich an das Lesen, dass es mit dem Endpunkt zu tun haben könnte, der ein nachfolgendes "/" erwartet. Ich bin nicht sicher, ob dies gültig ist, aber bitte probieren Sie es aus und posten Sie es hier, wenn es funktioniert.

3
Somaiah Kumbera

Ich hatte einen ähnlichen Fehler und als ich die Serverprotokolle überprüfte, war dies darauf zurückzuführen, dass der HTTP-Server eine nicht unterstützte http-Methode in der Anfrage gefunden hatte. Aus diesem Grund gibt der Server eine HTTP-Antwort zurück, die der SOAP - Client nicht verarbeiten kann ... daher Unexpected EOF im Prolog Unten ist ein Ausschnitt meines Webserverprotokolls für Tomcat "localhost.XXXX". Log"

org.Apache.Tomcat.util.descriptor.web.SecurityConstraint.findUncoveredHttpMethods For security constraints with URL pattern [/services/*] only the HTTP methods [POST GET] are covered. All other methods are uncovered.

Dies gab folgenden Fehler auf der Clientseite 

 com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog

In meinem Fall hatte ich einen gesicherten Dienst auf ungesichert heruntergestuft, und meine web.xml hatte einen verirrten Eintrag, der GET und Post mit einer Sicherheitsbeschränkung einschränkte, und ich sendete keine erforderlichen Sicherheitsparameter in der Anforderung.

<security-constraint>
    <web-resource-collection>
      <web-resource-name>restricted web services</web-resource-name>
          <url-pattern>/services/*</url-pattern>
          <http-method>GET</http-method>
          <http-method>POST</http-method>
        </web-resource-collection>

Ich habe diese Einschränkung aufgehoben, um diesen Fehler zu beseitigen :-) 

In Ihrem Fall bezieht sich dies möglicherweise nicht auf die Sicherheitsbeschränkung - aber sicher auch auf den Server, der eine unvollständige http-Antwort sendet - Bitte überprüfen Sie Ihre Server/Client-Konfiguration und stellen Sie sicher, dass die entsprechende http-Anfrage gesendet wird, die der http-Server bevorzugt

2
Yogesh Devi

Ich hatte einen ähnlichen Fehler, und als ich die Serverprotokolle überprüfte, war dies darauf zurückzuführen, dass der HTTP-Server eine nicht unterstützte http-Methode in request gefunden hat, die eine HTTP-Antwort zurückgibt, die der SOAP - Client nicht verarbeiten kann 

1
user3197665

Ich hatte ein ähnliches Problem und ich habe das Debuggen gelöst. Wenn ich versuche, WSDL in Runtime herunterzuladen, habe ich festgestellt, dass ich die WSDL wegen des Proxys nicht bekommen konnte dieser Code:

  try {
      String wsdl = IOUtils.toString(new URL("http://YOUR_WSDL_URL"));
      System.out.println("WSDL => "+wsdl);
  } catch (IOException e) {
         e.printStackTrace();
  }
1
kkurt

Ich bin auf diesen Fehler gestoßen und habe festgestellt, dass es anscheinend darauf zurückzuführen war, dass eine URL verwendet wurde, die eine HTTP 302-Umleitung anstelle der WSDL direkt zurückgegeben hat. 

Die URL, die ich verwendete, hatte das Format /Service?wsdl, das auf eine URL im Format /Service/wsdl/Service.wsdl umgeleitet wurde. Nachdem ich die Ziel-URL für die Weiterleitung direkt verwendet hatte, funktionierte alles.

1
Michael R

Einer der Importe fehlt. Bitte überprüfen Sie die Routen zu Ihren Xsds.

Ich hatte das gleiche Problem. Ich musste den vollständigen Pfad zur WSDL-Datei verwenden, damit es funktioniert.

0
Daryl Le

Mein Beitrag zu diesem Fehler ist:

Ich erhalte diesen Fehler nicht, wenn ich mich im Debugging-Modus befinde.

Es scheint, dass der Ausführende des Programms Java), das den WSDL-Dienst abfragt (in meinem Fall Java), die Zeit hat, viele Anforderungen auszuführen, wie im Debugging-Modus, weil manchmal die Programme anhalten Da ich einige Haltepunkte gesetzt habe, wird dieser Fehler in diesem Fall nicht angezeigt.

Wenn ich das Programm im Produktionsmodus laufen lasse, ja.

Die Anforderungen sind jedoch die gleichen, die WSDL ändert sich nicht, ebenso die Endpunkte.

Es ist wie eine Einschränkung des Webservers, denke ich.

0
RobyB

Das liegt sicherlich nicht am Charakter- oder Formatproblem. Es ist möglich, dass der Server keine Daten zurückgibt, von denen der Woodstox (wstx) versucht hat, in XML zu analysieren, und ist fehlgeschlagen, was zu diesem Fehler führte.

0
Julio D