WebService in Eclipse deployen

  • Themenstarter Themenstarter Herbie88
  • Beginndatum Beginndatum
H

Herbie88

Gast
Hallo,

ich habe eine JAR-Datei aus meinem Projekt erstellt, die ich lokal als Webservice über den Port 8080 verwenden kann, nachdem ich sie ausgeführt habe.
Ich soll den Service aber nun auf einem Firmenserver deployen und mir scheint es unüblich, dass man dort Webservices als jar-Dateien aufspielt. Allerdings verwirren mich die ganzen Informationen, die ich zum Deployen von Webservices finde total und mir als Anfänger wäre sehr damit geholfen, wenn jemand mal einfach beschreiben könnte oder ein gut verständliches Tutorial kennt, in welchem beschrieben wird, wie man mit Eclipse einen Webservice deployt. Das kann dann auch so sein, dass der Service in Verbindung mit einem TomCat Server vorliegt.

Danke für Tipps und eure freundliche Hilfe.
 
Hallo,

in der Regel benötigt man einen Webserver für einen Webservice. Nun kann es natürlich sein, dass dein Webservice eine standalone application mit einer eigenen Implementierung eines Webservices ist.

Im ersten Fall benötigst du einen Webserver (Tomcat, Apache sind die gängingsten). Dort kann man die JAR als Application deployn.

Letzters muss man nur entsprechend starten. Im aller einfachsten Fall (von dem ich hier nicht ausgehen würde) java -jar meinFile.jar

Ohne weitere Informationen kann man hier nicht mehr sagen ;D

Gruß,

Martin
 
Hey,

danke für diese erste Antwort.
Also ich möchte noch ein paar präzisere Angaben zum besseren Verständnis nachreichen:

Bisher habe ich den Webservice als einfaches Java Projekt realisiert. Dort ist die Klasse, mit der main-Methode so implementiert, dass mit Hilfe des Imports von "javax.xml.ws.Endpoint" in der main-Methode zuerst eine neue Instanz meiner Start-Klasse des Projekts erzeugt wird ("MeineKlasse server = new MeineKlasse();") und das dann als Server mit dem Befehl "Endpoint endpoint = Endpoint.publish("http://localhost:8080/xyz", server);" registriert und erreichbar gemacht wird, wenn man die exportierte JAR-Datei ausführt.

Kann ich diese JAR-Datei nun einfach in den webapps-Ordner eines TomCat stecken und dieser erzeugt dann beim Starten die benötigten Verzeichnisstrukturen, um den Webservice abrufbar zu machen oder geht das nur, wenn ich das Projekt nicht als "normales" Java-Projekt, sondern als dynamic Web Project erstelle und als WAR-Datei exportierte sowie diese dann anschließend in den webapps-Ordner des TomCats schiebe?

Man kann aber ja auch direkt unter Ecplise unter "New" "Web Service" auswählen, aber dort verstehe ich noch nicht, wie ich aus meinem bestehenden Projekt einen Webservice erzeuge, ob ich das Ergebnis dann auch unter einem TomCat laufen lassen kann, ... Dazu bräuchte ich eine Anleitung, die jemand empfehlen kann, da mich die von mir gefundenen eher verwirren, wie bereits angedeutet.

Danke für eure Hilfe nochmal =)
 
Hallo,

damit du den Webservice deployen kannst, musst du eine war-file erzeugen (wie du schon gesagt hast)

die datei kopierst du dann in webapps ordner und tomcat (wenn er läuft) entpackt das automatisch.


Da du mit Endpoint gearbeitet hast, vermute ich mal dass du auch mit jax-ws gearbeitet hast!

Damit du den Webservice nun auch erreichst musst du zwei xml-Dateien anlegen🙁diese kannste direkt in eclipse oder so erstellen(müssen in den WEB-INF-ordner (Dynamic Web Project)))

1. sun-jaxws.xml
2. web.xml

am besten googelst du mal was in die dateien rein muss... weil so genau weiß ich es auch nicht mehr...

evtl. finde ich noch 2 beispiel dateien bei mir!
 
Hey,

also damit ich eine WAR-Datei erzeugen kann, muss ich ja jetzt erst mal ein neues Dynamic Web Project anlegen.

Ich hab dazu eine Anleitung gesucht und auf dieser Seite eine relativ gut überschaubare gefunden, die einen Webservice mit TomCat6 und Axis2 vorstellt:

Web Service Tutorial - Gästebuch Web Service mit Eclipse 3.4 (Ganymede), Apache Tomcat 6.0 und Apache Axis2 1.4 / Fachgebiet Software Engineering

Ich bin das Ganze Schritt für Schritt durchgegangen, aber wenn ich die notwendigen Klassen erstellt habe und dann in Schritt 4 auf die Klasse "GuestBook" mit Rechtsklick das Kontextmenü und dort "Web Services" > "Create Web Services" aufrufe und als Server Runtime TomCat6 sowie als Web Service Runtime Axis2 einstelle und "Test service" bei dem Schieberegler für den Service und "No client" (no client, weil ich sonst später eine fehlermeldung "selection must be wsdl" bekomme) beim Client auswähle, funktioniert es nicht mehr, wie beschrieben.

Es wird zwecks Testerei der Web Services Explorer in Eclipse geöffnet und man liest unten bei Status nur folgende Meldung:

"IWAB0379E Unable to open http://localhost:8080/TestWebService/services/GuestBook?wsdl.
IWAB0135E An unexpected error has occurred.
WSDLException
WSDLException: faultCode=OTHER_ERROR: http://localhost:8080/TestWebService/services/GuestBook?wsdl"

Was hab ich denn da falsch gemacht ??? Ich habe die Anleitung genau beachtet und Axis2 und TomCat6 sind richtig mit Eclipse verbunden.

Noch ne andere Frage: Falls das irgendwann dann gehen sollte, kann ich dann z.B. auf meinen Projektordner mit Rechtsklick und Export als WAR-File auswählen, um diese dann in den webapps Ordner von TomCat zu legen ? Der TomCat erstellt ja dann die Verzeichnisse selber automatisiert, aber unter welcher Adresse wäre denn der Service dann in dem Beispiel erreichbar?

Dankeeee für Hinweise
 
Noch eine Ergänzung. Wenn ich das Projekt als WAR-Datei exportierte und in den webapps-Ordner des TomCat stecke, wird durch den TomCat automatisch ein Verzeichnis aus der War-Datei erstellt.
Ich rufe dann unter http://localhost:8080/ProjektName die Axis2 Übersichtsseite auf und klicke dort auf services. Dann sehe ich eine Übersicht über die verfügbaren Services, aber mein Projekt wird immer unter "Faulty Services" aufgelistet. Wenn ich es dort anklicke, erscheint folgender Fehlertext:

This Web axisService has deployment faults
Error: java.lang.ClassCastException: org.apache.axis2.classloader.JarFileClassLoader cannot be cast to org.apache.axis2.deployment.DeploymentClassLoader at org.apache.axis2.deployment.ServiceBuilder.populateService(ServiceBuilder.java:131) at org.apache.axis2.deployment.repository.util.ArchiveReader.buildServiceGroup(ArchiveReader.java:101) at org.apache.axis2.deployment.repository.util.ArchiveReader.processServiceGroup(ArchiveReader.java:178) at org.apache.axis2.deployment.ServiceDeployer.deploy(ServiceDeployer.java:82) at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136) at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:661) at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144) at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:337) at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:241) at org.apache.axis2.deployment.DeploymentEngine.loadServices(DeploymentEngine.java:131) at org.apache.axis2.deployment.WarBasedAxisConfigurator.loadServices(WarBasedAxisConfigurator.java:284) at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:95) at org.apache.axis2.transport.http.AxisServlet.initConfigContext(AxisServlet.java:567) at org.apache.axis2.transport.http.AxisServlet.init(AxisServlet.java:452) at org.apache.axis2.webapp.AxisAdminServlet.init(AxisAdminServlet.java:56) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4420) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4733) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:943) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:778) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:504) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1315) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061) at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) at org.apache.catalina.core.StandardService.start(StandardService.java:525) at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) at org.apache.catalina.startup.Catalina.start(Catalina.java:595) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

Kann jemand was damit anfangen???
 
Update:

Mit TomCat 7 und Axis klappt es jetzt, aber warum es mit TomCat in der 6er Version und Axis2 zu den oben beschriebenen Problemen kommt, verstehe ich immer noch nicht. Wenn da noch jemand eine Idee hat, wäre ich nach wie vor interessiert.

Ansonsten danke für eure Anregungen.
 

Zurück
Oben