# jax-ws mit jdk 1.5



## Bundschuh (16. Feb 2010)

Hallo Leute,

ist es prinzipiell möglich einen Webservice mit *JAX-WS auch mit JRE 1.5* zu betreiben?

Habe mich jetzt soweit in die Materie reingearbeitet, dass ich einen schönen WS und mit wsgen und wsimport implementiert habe und merke jetzt dass dieser auf der *Deploymentmaschine nicht läuft*, da diese nur *JRE 1.5 verwendet* (Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_17-b04)). In meiner Eclipse-Umgebung und meiner Development Tomcat-Umgebung habe ich eben JRE 1.6. 


Andernfalls muss ich wohl in den sauren Apfel beissen und mich in AXIS einarbeiten....wofür ich eigentlich keine Zeit mehr habe ;(

Der Server schmeisst folgende Exception: 

```
[ContainerBackgroundProcessor[StandardEngine[Catalina]]] ERROR org.apache.catalina.core.StandardContext.listenerStart() [/WSCONTAINER]  -  Error configuring application listener of class com.sun.xml.ws.transport.http.servlet.WSServletContextListener
java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1352)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3677)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4187)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
        at org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:121)
        at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:143)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:737)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:809)
        at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:698)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:472)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1190)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:292)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1305)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1569)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1578)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1558)
        at java.lang.Thread.run(Thread.java:595)
2010-02-16 16:30:14,774 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] ERROR org.apache.catalina.core.StandardContext.listenerStart() [/WSCONTAINER]  -  Skipped installing application listeners due to previous error(s)
2010-02-16 16:30:14,774 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] ERROR org.apache.catalina.core.StandardContext.start() StandardContext  -  Error listenerStart
2010-02-16 16:30:14,774 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] ERROR org.apache.catalina.core.StandardContext.start() StandardContext  -  Context [/WSCONTAINER] startup failed due to previous errors
```


----------



## Kirro (9. Jun 2011)

Ich weiß es ist über ein Jahr alt,

aber dennoch haste vielleicht eine Lösung?


----------



## fax (9. Jun 2011)

JAX-WS funktioniert mit JRE 1.5 sogar einfacher, weil man sich nicht mit endorsed Verzeichnissen rumschlagen muss. Bei dem Originalbeitrag war offensichtlich JAX-WS gar nicht in Tomcat installiert bzw. nicht ins WAR gepackt worden. Beschreibe dein Problem mal genauer.


----------



## Kirro (9. Jun 2011)

ja ich habe die jax-ws libs in den build path gesetzt...
Eine frage hätte ich aber noch... und zwar soll im jdk1.5 auch wsimport dabei sein... ist es bei mir aber nicht? wieso?


----------



## fax (9. Jun 2011)

Kirro hat gesagt.:


> und zwar soll im jdk1.5 auch wsimport dabei sein... ist es bei mir aber nicht? wieso?


Ist es nicht. JAX-WS und damit wsimport ist erst im JDK 1.6. Vielleicht verwechselst du das mit Java EE 5? Da ist JAX-WS/wsimport auch drin.


----------



## Kirro (9. Jun 2011)

Ok dann erstellt man die Client daten mit WSImport und added die JAX-WS - libs auch in die Client-Anwendung, wenn diese jdk 1.5 ist oder?

Gibt es andere Möglichkeiten?


----------



## fax (9. Jun 2011)

Kirro hat gesagt.:


> Ok dann erstellt man die Client daten mit WSImport und added die JAX-WS - libs auch in die Client-Anwendung, wenn diese jdk 1.5 ist oder?


Ja.



Kirro hat gesagt.:


> Gibt es andere Möglichkeiten?


Ne, tja, irgendwoher muss der ganze Code ja kommen, der dir die SOAP Nachrichten massiert. Wenn die Client Anwendung in einem Java EE 5 oder 6 Container läuft, ist JAX-WS mit dabei, dann brauchst du es nicht noch extra hinzufügen.


----------



## Bundschuh (9. Jun 2011)

Hey,

leider weiss ich auch nicht mehr genau woran das Problem lag. Aber classnotfound sagt wie der Name selbst schon alles. Die Klasse konnte nicht gefunden werden. Ev. weil sie nicht im Classpath liegt. 
Hast ud auch die Web.xml und die sun-jaxws.xml richtig konfiguriert und im Web-INF-Ordner?

Ich hatte zudem noch einen Fehler, dass ich unbemerkt meinen Webservice immer mit dem Java 1.6 compiliert habe und versucht habe diesen dann auf einem Tomcat mit Java 1.5 zu laufen zu bekommen. Dabei wurde mir eine UnsupportedClassException geschmissen.

Gruß
Bundschuh


----------



## Kirro (10. Jun 2011)

nee also wenn ich 1.6 benutze funktioniert alles der service und der client

habe nun auf 1.5 alles umgestellt und tomcat 5.0 

Webservice läuft: nachdem ich beim Tomcat-verzeichnis/common/endorsed/ 2 Dateien (die einzigen) umbenannt habe: es waren folgende:
xercesImpl.jar
xml-apis.jar  beide in .old umbenannt und dann lief der Webservice

beim Client liegt jetzt das problem... wenn ich den 1.6 lasse dann funktioniert es natürlich
bei 1.5 sagt er mir immer class not found... ist ja auch kla... also füge ich die libs ein ... und dann kommt das schon wieder aber von einer anderen klasse!

Kann einer mir sagen welche libs ich alle brauch?... ich möchte auch nicht, dass die Client-Anwendung so groß wird... aber da komme ich wahrscheinlich nicht drum rum?


----------



## Kirro (10. Jun 2011)

So ... jetzt habe ich einen Client zum laufen gebracht.

Bei dem anderen Client funktioniert es nicht (obwohl die gleichen libs im build path sind)

Ich habe es mal debugged... und wenn er den Service aufruft also Service bla = new Service();
dann geht er in die ClassLoader.class ... sollte ja aber in den Service.class gehen? ist ja die Oberklasse...

was kann da schief gegangen sein? Irgendwelche Konflikte mit anderen Libs?


----------



## fax (10. Jun 2011)

Kirro hat gesagt.:


> Kann einer mir sagen welche libs ich alle brauch?... ich möchte auch nicht, dass die Client-Anwendung so groß wird... aber da komme ich wahrscheinlich nicht drum rum?


Du brauchst alle.


----------



## Kirro (10. Jun 2011)

ja ich habe jetzt alle!

Ich vermute ich habe auch das Problem gefunden evtl.!

Ich brauche auch die libs von axis2 und jax-rpc ... die funktionieren auch... nun meine frage:

Jax-ws ist doch kompatibel mit rpc... also könnte ich mit rpc nicht auch auf den Webservice zugreifen(also auf den der jax-ws bentuzt)? Oder ist das nur Anders rum kompatibel?

Eine Zweite Frage: Die behindern sich nicht gegenseitig oder?


----------



## Kirro (10. Jun 2011)

ok Habs zum laufen gebracht mit den jax-ws libs

habe sie in dem client einfach doppelt eingefügt!

Also das projekt besteht aus 2 einzelprojekten (A und B)

A benutzt den Webservice(also muss das hier eingefügt werden, da die IDE sonst meckert)

B included A (deshalb dachte ich, ich brauche das nich nochmal hinzuzufügen), aber falsch gedacht... nun klappt es? jmd ne idee warum?


----------



## Bundschuh (10. Jun 2011)

Klar, du hast 2 unterschiedliche Projekte. Einmal den Service und den Client. Beide brauchen natürlich auch alle Libs. Falls du ein Minimum an Libs beim Client haben willst, dann muss du am besten nach und nach die notwendigen Libs hinzufügen.

Wieso included A denn B? Normalerweise entwickelt man den WS und deployed ihn auf dem Server. Danach erstellst du mit WSImport die notwendigen Stubs und erstellt damit deinen Client.
WSImport geht auch mit 1.5. Hier brauchst du nur die notwendigen Libs in denen das Tool liegt. Zudem muss man auch explizit den Classpath angeben beim Benutzen von WSImport. 
Ich habs immer direkt über die Kommandozeile gemacht bzw. mit ein Ant-Skript geschrieben.

Google mal n bisschen. Ansonten kann ich dir nur das Buch empfehlen "Java Web Services: Up and Running"
Java Web Services: Up and Running

Gruß
Bundschuh


----------



## Kirro (10. Jun 2011)

ne habe es wahrscheinlich nicht richtig erzählt ... so gesehen habe ich dann 3 projekte in eclipse

1. Projekt ist der Webservice der läuft auch

2. und 3.Projekt zusammen ist der Client

Und Projekt 2 included das 3.Projekt

und ich habe es nur zum laufen gebracht, wenn ich die libs von jax-ws in projekt 2 und projekt 3 einfüge obwohl ich es ja schon in projekt 3 habe (was ja von dem Projekt 2 included wurde)

PS: mit included meine ich ist im BuildPath


----------

