Struktur einer SOAP-Anwendung

pkm

Bekanntes Mitglied
Ich mache gerade ein SOAP-Tutorium: https://www.baeldung.com/jax-ws

Mein Plan ist dieser. Ich habe ein dynamisches Webprojekt erstellt mit folgender Struktur.

Dateistruktur.png

Nun meine Frage. Es gibt eine wsdl-Datei in dem Tutorium -> In welchen Ordner kommt die WSDL-Datei rein?

In welchen Ordner gehört das Endpointinterface und dessen Implementierung?

Zudem gibt es die Modelklasse -> Wo gehört diese rein?
 

pkm

Bekanntes Mitglied
Ja, freiwillig, wieso? Allerdings habe ich jetzt die Struktur bereits hinbekommen, und mich plagt nun en anderes Problem. wsimport wird von eclipse nicht mehr unterstützt :(

Ich habe mir jax-ws von github gerippt, ich will einfach nur in den Folder meines Webservice wechseln und diesen Befehl ausführen: wsimport -Xnocompile -s src xml/meinewsdl.wsdl

Keine Ahnung, wie ich da jetz vorgehen soll.

Hier der git-hub-Link, allerdings weiß ich nicht, wie ich jetzt mit wsimport weiter verfahre.
 

mihe7

Top Contributor
Ja, freiwillig, wieso?
Weil ohne Not kein Mensch mehr SOAP nutzt :)

und mich plagt nun en anderes Problem. wsimport wird von eclipse nicht mehr unterstützt :(
Wundert mich nicht, s. o. :) Allerdings vermute ich eher, dass es daran liegt, dass das Zeug aus dem JDK entfernt wurde.

allerdings weiß ich nicht, wie ich jetzt mit wsimport weiter verfahre.
Unter dem Link findest Du ganz unten eine Distribution. Versuch die mal.
 

pkm

Bekanntes Mitglied
Ich bin weitergekommen bei diesem Tutorium: https://www.baeldung.com/jax-ws

Dennoch gibt es da etwa,s das ich nicht verstehe. Unter Kapitel 8. (Remote Web Service Client) gibt es einen wsimport-Befehl
wsimport -keep -p com.baeldung.jaxws.client http://localhost:8080/employeeservice?wsdl

Dieser Befel produziert einen Fehler: "Schemadokument http://localhost:8080/employeeservice?wsdl konnte nicht gelesen werden, da 1) das Dokument nicht gefunden werden konnte [daran wird es wohl liegen], 2) das Dokument nicht gelesen werden konnte [m. E. auch nicht der Fall] 3) das rootElement des Dokuments nicht <wsdl:definitions> ist. [stimmt nicht]

In dem ganzen oben verlinkten Tutorium ist nirgends von einer Datei http://localhost:8080/employeeservice?wsdl die Rede. Worauf bezieht sich der in dem Totorium erwähnte Befehl?
 

mihe7

Top Contributor
Die SOAP-Dienste werden mittels WSDL sprachunabhängig beschrieben. Mit Hilfe von wsimport werden dieser Beschreibung entsprechende Java-Klassen erzeugt.
 
K

kneitzel

Gast
In dem Tutorial hast Du zwei Teile:
a) Top-Down
Hier wird erst der Vertrag geschrieben, d.h. Du erstellst die wsdl und daraus wird dann viel Code generiert. Wenn Du das in dem Tutorial anschaust (Kapitel 5), dann siehst du den wsimport Aufruf direkt auf der wsdl Datei, die geschrieben wurde.
b) Bottom-Up
Hier schreibst Du den Server direkt. Deinen Code versiehst Du mit Annotations, so dass beim publishen des Service die WSDL erstellt werden kann.
(Direkt zweiter Satz in Kapitel 6: "The WSDL is generated from the classes when the web service is published.")

Wenn Du dem Beispiel folgst, den Service dann startest, dann kannst Du mit dem wsimport-Aufruf so wie in Kapitel 6 angegeben, die Dateien generieren lassen für den Zugriff auf den Webservice.

Wie @mihe7 das schon richtig ausgedrückt hat: Das ist ein Weg, mit dem man einen Service Sprachunabhängig definieren kann. So einen Service kann man also auch ganz einfach in .Net nutzen (Windows Communication Foundation wird da genutzt, Visual Studio bietet z.B. direkt das Einbinden von einem Service in ein Projekt.)
 

pkm

Bekanntes Mitglied
Ok, vielen Danke für dne Tipp. Nun, den Top-Down-Approach habe ich schon, leider kann ich den Publisher nicht ohne Fehlermeldung ausführen. Hier der Publisher:


Java:
package core;

import javax.xml.ws.Endpoint;

public class EmployeeServicePublisher {

    public static void main(String[] args) {

        Endpoint.publish("http://localhost:8080/employeeservicetopdown", new EmployeeServiceTopDownImpl());

    }

}

Wenn ich diesen ausführe, kommt eine Fehlermeldung:

Caused by: java.lang.ClassNotFoundException: com.sun.istack.localization.LocalizableMessageFactory$ResourceBundleSupplier
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

Dennoch habe ich ja die jar "jaxb-impl-2.2.6.jar" dem Buildpath inzugefügt, und die jar enthält die Klasse "LocalizableMessageFactory.class". Leider weiß ich nicht, was dieses $-Zeichen in "com.sun.istack.localization.LocalizableMessageFactory$ResourceBundleSupplier"bedeutet.
 
K

kneitzel

Gast
Kannst Du die genauen Abhängigkeiten einmal zeigen?

Also es scheint ein kleines Problem zu geben das wohl mit der verwendeten Version zusammen hängt. In https://stackoverflow.com/questions...error-com-sun-istack-localization-localizable wird vorgeschlagen, da ein Exclude mit rein zu nehmen...

Evtl. löst sich dieses Problem, wenn Du eine aktuelle Version der Library verwendest. Also z.B. die 2.3.2 hat diese Abhängigkeit nicht mehr drin so wie es aussieht: https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl
 

pkm

Bekanntes Mitglied
Also ich poste, wenn es ok so ist, die Abhängigkeiten einmal per Screenshot:

1585736149901.png

Aber (da ich das Ganze ja nie studiert hab'): Was bedeutet eigentlich das $ in .LocalizableMessageFactory$ResourceBundleSupplier ?
 
K

kneitzel

Gast
Du nutzt also kein maven sondern machst die Abhängigkeiten selbst? Laut dem Bild hast Du die jaxb-impl-2.3.2 gerunter geladen, aber referenziert ist immer noch die 2.2.6. Du musst natürlich die alte Referenz raus und die neue rein nehmen.
 

pkm

Bekanntes Mitglied
Danke für den Tipp, geht aber leider beides nicht, denn wenn ich die andere, also 2.3.2 referenziere, dann findet er sie Klasse nicht:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/istack/localization/Localizable
 

pkm

Bekanntes Mitglied
Ihr habt mich überzeugt, und ich habe auf mvn umgestellt. Nun habe ich noch folgenden Fehler (einen sehr interessanten):

Exception in thread "main" javax.xml.ws.WebServiceException: Error while searching for service [javax.xml.ws.spi.Provider]
at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:61)
at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:58)
at javax.xml.ws.spi.ServiceLoaderUtil.firstByServiceLoader(ServiceLoaderUtil.java:70)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:89)
at javax.xml.ws.spi.Provider.provider(Provider.java:96)
at javax.xml.ws.Endpoint.publish(Endpoint.java:254)
at core.EmployeeServicePublisher.main(EmployeeServicePublisher.java:9)
Caused by: java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider com.sun.xml.ws.spi.ProviderImpl could not be instantiated
at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:583)
at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:805)
at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:723)
at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1395)
at javax.xml.ws.spi.ServiceLoaderUtil.firstByServiceLoader(ServiceLoaderUtil.java:63)
... 4 more
Caused by: java.lang.ExceptionInInitializerError
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:781)
... 7 more
Caused by: javax.xml.ws.WebServiceException: Error creating JAXBContext for W3CEndpointReference.
at com.sun.xml.ws.spi.ProviderImpl$2.run(ProviderImpl.java:278)
at com.sun.xml.ws.spi.ProviderImpl$2.run(ProviderImpl.java:273)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:310)
at com.sun.xml.ws.spi.ProviderImpl.getEPRJaxbContext(ProviderImpl.java:273)
at com.sun.xml.ws.spi.ProviderImpl.<clinit>(ProviderImpl.java:98)
... 13 more
Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
- with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:421)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
at com.sun.xml.ws.spi.ProviderImpl$2.run(ProviderImpl.java:276)
... 17 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122)
at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:276)
... 21 more

.... ich habe hierzu etwas auf stackOverflow gefunden:


Da heißt es:

And well, one of the ways to set that is via the jaxb.properties file, which must be visible to the classpath (so, in Maven, it's usually somewhere like src/main/resources/*). As it is explained here, this file has to contain:

javax.xml.bind.context.factory=com.sun.xml.bind.v2.JAXBContextFactory

Das Problem ist, dass ich im core-Package eine Datei jaxb.properties mit dem oben genannten Eintrag eingefügt habe, der Fehler ist aber noch da. Hmm, was könnte das nun sein?
 

thecain

Top Contributor
Du hätst dich ja auch nicht an die mvn conventions... src/main/java, src/main/resources, src/test/java und src/test/resources
 

pkm

Bekanntes Mitglied
Stimmt, das war verkehrt, aber dieses:

1585815455311.png

...tut auch nicht, d. h. die Fehlermeldung ist nach wie vor

Exception in thread "main" javax.xml.ws.WebServiceException: Error while searching for service [javax.xml.ws.spi.Provider]
at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:61)
at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:58)
at javax.xml.ws.spi.ServiceLoaderUtil.firstByServiceLoader(ServiceLoaderUtil.java:70)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:89)
at javax.xml.ws.spi.Provider.provider(Provider.java:96)
at javax.xml.ws.Endpoint.publish(Endpoint.java:254)
at maven.localhost.quickstart.EmployeeServicePublisher.main(EmployeeServicePublisher.java:9)
Caused by: java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider com.sun.xml.ws.spi.ProviderImpl could not be instantiated
at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:583)
at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:805)
at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:723)
at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1395)
at javax.xml.ws.spi.ServiceLoaderUtil.firstByServiceLoader(ServiceLoaderUtil.java:63)
... 4 more
Caused by: java.lang.ExceptionInInitializerError
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:781)
... 7 more
Caused by: javax.xml.ws.WebServiceException: Error creating JAXBContext for W3CEndpointReference.
at com.sun.xml.ws.spi.ProviderImpl$2.run(ProviderImpl.java:278)
at com.sun.xml.ws.spi.ProviderImpl$2.run(ProviderImpl.java:273)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:310)
at com.sun.xml.ws.spi.ProviderImpl.getEPRJaxbContext(ProviderImpl.java:273)
at com.sun.xml.ws.spi.ProviderImpl.<clinit>(ProviderImpl.java:98)
... 13 more
Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
- with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
 

mrBrown

Super-Moderator
Mitarbeiter
Oh, du solltest auch die JAXB-API als Dependency hinzufügen:
Code:
Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 

pkm

Bekanntes Mitglied
Ok, hab JAXB-API hinzugefügt, aber scheinbar ist das Problem irgendwie unlösbar, vgl. hier:


Und der Fehler bleibt daher:

Exception in thread "main" javax.xml.ws.WebServiceException: Error while searching for service [javax.xml.ws.spi.Provider]
at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:61)
at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:58)
at javax.xml.ws.spi.ServiceLoaderUtil.firstByServiceLoader(ServiceLoaderUtil.java:70)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:89)
at javax.xml.ws.spi.Provider.provider(Provider.java:96)
at javax.xml.ws.Endpoint.publish(Endpoint.java:254)
at maven.localhost.quickstart.EmployeeServicePublisher.main(EmployeeServicePublisher.java:9)
Caused by: java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider com.sun.xml.ws.spi.ProviderImpl could not be instantiated
at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:583)
at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:805)
at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:723)
at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1395)
at javax.xml.ws.spi.ServiceLoaderUtil.firstByServiceLoader(ServiceLoaderUtil.java:63)
... 4 more
Caused by: java.lang.ExceptionInInitializerError
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:781)
... 7 more
Caused by: javax.xml.ws.WebServiceException: Error creating JAXBContext for W3CEndpointReference.
at com.sun.xml.ws.spi.ProviderImpl$2.run(ProviderImpl.java:278)
at com.sun.xml.ws.spi.ProviderImpl$2.run(ProviderImpl.java:273)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:310)
at com.sun.xml.ws.spi.ProviderImpl.getEPRJaxbContext(ProviderImpl.java:273)
at com.sun.xml.ws.spi.ProviderImpl.<clinit>(ProviderImpl.java:98)
... 13 more
Caused by: javax.xml.bind.JAXBException
- with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory]
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:196)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:385)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522)
at com.sun.xml.ws.spi.ProviderImpl$2.run(ProviderImpl.java:276)
... 17 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:192)
... 21 more
 

pkm

Bekanntes Mitglied
Danke, habe ich gemacht und auch viele Fehler beheben können. Derzeit bin ich bei:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/org/apache/xml/internal/resolver/CatalogManager
at com.sun.xml.ws.client.WSServiceDelegate.createCatalogResolver(WSServiceDelegate.java:377)
at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:363)
at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:321)
at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:230)
at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:211)
at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:207)
at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:114)
at javax.xml.ws.Service.<init>(Service.java:112)
at maven.localhost.quickstart.EmployeeServiceTopDown_Service.<init>(EmployeeServiceTopDown_Service.java:40)
at maven.localhost.quickstart.EmployeeServicePublisher.main(EmployeeServicePublisher.java:11)
Caused by: java.lang.ClassNotFoundException: com.sun.org.apache.xml.internal.resolver.CatalogManager
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 10 more

Falls jemand durch einen Hack zum Beispiel eben diesen Fehler mal in einem anderen MVN-Projekt wegbekommen hat, bin ich jederzeit für Tipps dankbar, auch wenn ich langsam befürchte, dass meine Fehlerposts langsam zum Spam werden :D

Hier die aktuelle pom.xml:

XML:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>localhost</groupId>
  <artifactId>quickstart</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>quickstart</name>
  <url>http://maven.apache.org</url>

  <properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>javax.xml.ws</groupId>
    <artifactId>jaxws-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>javax.jws</groupId>
    <artifactId>javax.jws-api</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>rt</artifactId>
    <version>2.2.10</version>
</dependency>
<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>
<dependency>
    <groupId>javax.xml</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.1</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0-b170201.1204</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-ri</artifactId>
    <version>2.2.10</version>
    <type>pom</type>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.6</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.stream.buffer</groupId>
    <artifactId>streambuffer</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.messaging.saaj</groupId>
    <artifactId>saaj-impl</artifactId>
    <version>1.5.0</version>
</dependency> 
<dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.3.1</version>
        <type>pom</type>
    </dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-xjc</artifactId>
    <version>2.2.11</version>
</dependency>
</dependencies>
</project>
 
Zuletzt bearbeitet:

pkm

Bekanntes Mitglied
Ich habe bin der Dependency-Hell durch Hinzufügen von folgender dependency Herr geworden:

XML:
<dependency>
<groupId>com.sun.org.apache.xml.internal</groupId>
<artifactId>resolver</artifactId>
<version>20050927</version>
</dependency>
 

pkm

Bekanntes Mitglied
Es tut leider immer noch nicht, daher wollte ich einmal in Bezug auf das bereits erwähnte baeldung-Tutorium einmal die grundsätzliche Frage stellen, was das „publishen“ eines Webservice eigentlich tut.

Ich habe auf port 8080 den Tomcat angeworfen und leider funktioniert das publishen aus folgendem Grunde nicht:

com.sun.xml.ws.wsdl.parser.InaccessibleWSDLException: 2 counts of InaccessibleWSDLException.

java.net.ConnectException: Connection refused: connect

java.net.ConnectException: Connection refused: connect


at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:275)

at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:246)

at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:209)

at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:178)

at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:363)

at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:321)

at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:230)

at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:211)

at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:207)

at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:114)

at javax.xml.ws.Service.<init>(Service.java:112)

at maven.localhost.quickstart.EmployeeServiceTopDown_Service.<init>(EmployeeServiceTopDown_Service.java:39)

at maven.localhost.quickstart.EmployeeServicePublisher.main(EmployeeServicePublisher.java:11)

Ich verstehe nicht, wieso dieser Fehler kommt, denn ich habe doch den Namespace im Objekt QName des Service deklariert (in der Klasse EmployeeServiceTopDown_Service):


private final static QName EMPLOYEESERVICETOPDOWN_QNAME = new QName("http://localhost/employeeservicetopdown/",

"EmployeeServiceTopDown");

Hier meine wsdl-Datei:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<definitions
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:tns="http://localhost/employeeservicetopdown/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns="http://schemas.xmlsoap.org/wsdl/"
  targetNamespace="http://localhost/employeeservicetopdown/"
  qname="EmployeeServiceTopDown">
    <types>
        <xsd:schema
          targetNamespace="http://localhost/employeeservicetopdown/">
            <xsd:element name="countEmployeesResponse" type="xsd:int"/>
        </xsd:schema>
    </types>
 
    <message name="countEmployees">
    </message>
    <message name="countEmployeesResponse">
        <part name="parameters" element="tns:countEmployeesResponse"/>
    </message>
    <portType name="EmployeeServiceTopDown">
        <operation name="countEmployees">
            <input message="tns:countEmployees"/>
            <output message="tns:countEmployeesResponse"/>
        </operation>
    </portType>
    <binding name="EmployeeServiceTopDownSOAP"
      type="tns:EmployeeServiceTopDown">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
          style="document"/>
        <operation name="countEmployees">
            <soap:operation
              soapAction="http://localhost/employeeservicetopdown/
              EmployeeServiceTopDown/countEmployees"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
    </binding>
    <service name="EmployeeServiceTopDown">
        <port name="EmployeeServiceTopDownSOAP"
          binding="tns:EmployeeServiceTopDownSOAP">
            <soap:address
              location="http://localhost:8080/employeeservicetopdown"/>
        </port>
    </service>
</definitions>


Hier der Service-Provider:
Java:
package maven.localhost.quickstart;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.WebServiceProvider;

@WebServiceProvider(serviceName = "EmployeeServiceTopDown", targetNamespace = "http://localhost/employeeservicetopdown/", wsdlLocation = "file:/C:/Users/andfe/Documents/eclipse-workspace/quickstart/src/main/java/employeeservicetopdown.wsdl")
public class EmployeeServiceTopDown_Service extends Service {

    private final static URL EMPLOYEESERVICETOPDOWN_WSDL_LOCATION;
    private final static WebServiceException EMPLOYEESERVICETOPDOWN_EXCEPTION;

    // "file://C:/Users/andfe/Documents/eclipse-workspace/quickstart/src/main/java/employeeservicetopdown.wsdl"
    // als QName oder
    // "http://localhost/employeeservicetopdown/"
    // ?

    private final static QName EMPLOYEESERVICETOPDOWN_QNAME = new QName("http://localhost/employeeservicetopdown/",
            "EmployeeServiceTopDown");

    static {
        URL url = null;
        WebServiceException e = null;
        try {
            url = new URL("http://localhost:8080/employeeservicetopdown");
        } catch (MalformedURLException ex) {
            e = new WebServiceException(ex);
        }
        EMPLOYEESERVICETOPDOWN_WSDL_LOCATION = url;
        EMPLOYEESERVICETOPDOWN_EXCEPTION = e;
    }

    public EmployeeServiceTopDown_Service() {
        super(__getWsdlLocation(), EMPLOYEESERVICETOPDOWN_QNAME);
    }

    public EmployeeServiceTopDown_Service(WebServiceFeature... features) {
        super(__getWsdlLocation(), EMPLOYEESERVICETOPDOWN_QNAME, features);
    }

    public EmployeeServiceTopDown_Service(URL wsdlLocation) {
        super(wsdlLocation, EMPLOYEESERVICETOPDOWN_QNAME);
    }

    public EmployeeServiceTopDown_Service(URL wsdlLocation, WebServiceFeature... features) {
        super(wsdlLocation, EMPLOYEESERVICETOPDOWN_QNAME, features);
    }

    public EmployeeServiceTopDown_Service(URL wsdlLocation, QName serviceName) {
        super(wsdlLocation, serviceName);
    }

    public EmployeeServiceTopDown_Service(URL wsdlLocation, QName serviceName, WebServiceFeature... features) {
        super(wsdlLocation, serviceName, features);
    }

    private static URL __getWsdlLocation() {
        if (EMPLOYEESERVICETOPDOWN_EXCEPTION != null) {
            throw EMPLOYEESERVICETOPDOWN_EXCEPTION;
        }
        return EMPLOYEESERVICETOPDOWN_WSDL_LOCATION;
    }

}




Und hier die Publisher-Klasse:

Code:
package maven.localhost.quickstart;

import javax.xml.ws.Endpoint;

public class EmployeeServicePublisher {

    public static void main(String[] args) {

        try {

            Endpoint.publish("http://localhost:8080/employeeservicetopdown", new EmployeeServiceTopDown_Service());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N WebService Ausgabe einer ArrayList SOA 2
W WebService aus einer HTML-Seite SOA 9
G JPA/ Webservice: Passwort Feld einer Klasse fürs Lesen "verschleiern" SOA 10
J Behörden Soap service konsumieren SOA 4
M problem mit großem SOAP Response SOA 3
N SOAP-Nachrichten verschlüsseln | jax-ws SOA 0
S Soap Request absenden - Anfängerfrage SOA 0
I SOAP Webservice Methoden und Parameter auslesen SOA 3
D [SOAP] wsdl & maven & java 1.8 SOA 6
P SOAP Webservice mit HTTP Basic Authentifizierung SOA 1
E SOAP-Endpunkt per Eclipse-Wizard erstellt, wie nun mit Auth schützen? SOA 2
M Kann man das Protokoll eines REST (Jersey) bzw. SOAP Web Services manipulieren? SOA 5
G SOAP Response "faken" SOA 8
D SOAP Webservice (SAP) SOA 3
K Flex-Ablöse - Was mit den SOAP-Services tun? SOA 5
G Soap, http SOA 3
A Soap with Attachments - Unmarshalling Error SOA 4
K Axis2 SOAP Logging via Client SOA 2
E mit Apache SOAP verschachtelte XML-Tags generieren SOA 2
F XML per SOAP übermitteln SOA 2
H SOAP und Synonym-Wortschatz Leipzig SOA 4
V SOAP over JMS - wie funktionierts? SOA 3
C Undefinierte Zeichenketten in SOAP Nachricht SOA 4
E Lesen der kompletten SOAP als WebService Provider/Server SOA 4
R SOAP Nachrichtenaustausch zwischen Axis2-WSs SOA 5
R Webservice aufrufen mit SOAP Style.DOCUMENT ? SOA 5
I SOAP WSDL und UDDI SOA 12
G --> SOAP zwischen Intranet und Internet SOA 3
K Mappen von Objektmethoden bei SOAP SOA 7

Ähnliche Java Themen

Neue Themen


Oben