WebService portieren

Generic1

Top Contributor
Hallo,

ich hab jetzt auf meinem Rechner einen WebService programmiert (bzw. ein Dynamic Web Projekt mit Eclipse programmiert, welches einen WebService enthält).
Jetzt möchte ich diese Web- Applikation auf einen anderen Rechner laufen lassen.

Dazu muss ich eigentlich die ganze Web Applikation auf dem neuen Rechner neu kompilieren da ja im WebService (in der WSDL) folgendes stehen hab:

<service name="ServiceName">
<port name="MyPort" binding="tns:irgendwas">
<soap:address location="http://IP:port/my/Path/to/the/Webservice" />
</port>
</service>

gibts da eine andere Möglichkeit wie man das machen kann?
lg
 
Zuletzt bearbeitet:
J

JohannisderKaeufer

Gast
Webservice ist ja ein Server.

Der braucht ja prinzipiell garnicht wissen wo er läuft. Er läuft einfach.


Der Client braucht aber die Information wo er den Service findet.
Wenn Client und Server auf dem gleichen Rechner laufen, kann das ganze auch über den localhost laufen.

Je nach implementierung des clients kann man auch die Adresse zur Laufzeit aus einem wsdl Dokument auslesen lassen.

Zudem gibt es auch noch die Möglichkeit sich die WSDL zur Laufzeit generieren zu lassen.
 

Generic1

Top Contributor
Mir ist nicht ganz klar, was du mir dagen willst,

ich muss die Web Applikation mit dem WebService ja mal programmieren auf meinem Rechner, der nicht der Server ist.
Wenn ich diese Web Applikation dann auf dem Server portieren will, dann hat der Server grundsätzlich mal eine andere IP als der Rechner, auf dem ich die Web Applikation mit dem WebSerice programmiert habe.
Eine dynamische Erzeugung von der WSDL ist bei mir nicht vorgesehen.

Meine Frage wäre jetzt gewesen, muss ich am Server Eclipse installieren um für den Server eine *.EAR mit der richtigen IP- Adresse (die des Servers) zu erzeugen oder gibt es eine einfachere Möglichkeit bzw. wie macht ihr das -> programmiert ihr auf dem lokalen/aktuellen Rechner in bezug auf den Server (also mittels Eingabe der Server IP)?

Oder noch anders gefragt, wenn Ihr die *.EAR vorliegen habt, in der ja die WSDL vorhanden ist, in der die IP drinnensteht -> was macht ihr, wenn sich die IP des Servers (kommt eh selten vor aber im Fall der Fälle) ändert -> dann funktioniert ja der WebService nicht mehr!?
 
Zuletzt bearbeitet:
J

JohannisderKaeufer

Gast
Einmal ein recht minimaler Webservice der mit Entpoint veröffentlicht wurde.
Java:
package test;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class AddService {

    @WebMethod
public int add(int a, int b){
    return a+b;
}
    public static void main(String[] args ){
        Endpoint.publish("http://0.0.0.0:1234/AddService", new AddService());
    }
}

Die wsdl unter http://localhost:1234/AddService?wsdl aufgerufen
[XML]<service name="AddServiceService">
<port name="AddServicePort" binding="tns:AddServicePortBinding">
<soap:address location="http://localhost:1234/AddService"/>
</port>
</service>[/XML]

Die wsdl unter http://192.168.0.133/AddService?wsdl aufgerufen
[XML]<service name="AddServiceService">
<port name="AddServicePort" binding="tns:AddServicePortBinding">
<soap:address location="http://192.168.0.133:1234/AddService"/>
</port>
</service>[/XML]

Dem Webservice ist prinzipiell egal unter welcher IP er zu finden ist.

Lasse ich das ganze unter nem Tomcat mit Jax-Ws laufen bekomme ich das selbe Ergebnis. Die URL unter der ich die WSDL aufrufe, wird als soap:address location gesetzt.
[XML]<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
<endpoint name="AddService" implementation="test.AddService" url-pattern="/AddService"/>
</endpoints>[/XML]

[XML]<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>


<servlet>
<display-name>AddService</display-name>
<servlet-name>AddService</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AddService</servlet-name>
<url-pattern>/AddService</url-pattern>
</servlet-mapping>


</web-app>
[/XML]

Wie du siehst habe ich nirgends eine IP angegeben. Lediglich die 0.0.0.0 im ersten Beispiel.
 

Generic1

Top Contributor
Versteh ich ehrlich gesagt jetzt nicht ganz, wenn ich eine WSDL habe, wo folgendes drinnen steht als port:

Code:
<service name="MyService">
      <port binding="tns:MyServicePortBinding" name="MyServicePort">
         <soap:address location="http://10.23.12.222:8080/services/MyServicePort"/>
      </port>
   </service>

Dann hab ich anhand des Top- Down- Verfahrens die Java- Klassen anhand der WSDL generieren lassen.
Danach hat der WEbService ab dem Rechner 10.23.12.222 funktioniert.

Nun ist das aber der Rechner, wo ich entwickle, der WebService soll aber auf einem anderen Rechner/Server laufen.
Meine Frage wäre jetzt, wie ich das mache.
Muss ich mir da auf dem Rechner/Server, wo dann der WebService laufen soll, Eclipse installieren, ein Dynamic Web Projekt anlegen, die WSDL in das Projekt geben und dann wieder die Java- Klassen anhand der WebService Top- Down methode erzeugen lassen oder gibt es eine Möglichkeit, dann ich den auf dem EntwicklungsRechner entwickelten WebService einfach auf den Server portieren kann?

Vielen Dank,
lg
 

Generic1

Top Contributor
Das versteh ich jetzt nicht ganz, könntest du das näher erklären.
Ich hab den Port (also die URL) ja nur in der WSDL stehen!?
Was müsste ich machen, wenn ich das ganze Dynamic WEb Projekt auf einen anderen Rechner portiere?
lg
 

fastjack

Top Contributor
Du kannst in die WSDL immer die richtige Adresse eintragen, wenn Du in deinem Testbetrieb (Testclients etc.) den Endpoint programmatisch mit einer Methode des Service-Objekts setEndpoint(...) änderst. Dann deployst Du sozusagen immer die richtige Adresse.
 

mvitz

Top Contributor
Nur nochmal für das Verständnis, es gibt für WebServices zwei Seiten, Server und Client und man kann nach den Ansätzen Code- oder Contract-First vorgehen.

Von welcher Seite und welchem Ansatz sprechen wir hier genau?

Angenommen du redest von beiden Seiten und dem Code-First Ansatz, dann sollte es folgendermaßen gehen:

1) Du erstellst deine WebService Klasse, annotierst sie und deployst sie. (siehe Post von JohannisDerKaeufer)

Die WSDL wird nun bei jedem Aufruf dynamisch erstellt und aus diesem Grunde passen sich die Angaben die du gepostest hast automatisch an den Server an --> hier musst du nichts beachten, einfach den Server auf einem neuen Rechner deployen.

2) Du erstellst den Client indem du dir Klassen aus der WSDL generierst.
Bei diesen generierten Klassen gibt es ja eine Einstiegsklasse "ServiceNameService", die du folgendermaßen nutzen solltest:
Java:
ServiceName service = new ServiceNameService().getPort(ServiceNameService.class);
Hierbei kann der Konstruktor der Klasse ServiceNameService eine URL als Parameter enthalten. Wenn diese gesetzt wird, wird zur Laufzeit praktisch die dort spezifizierte WSDL genutzt. Setzt du die URL nicht, dann wird deine Angabe aus der WSDL genutzt, aus der du die Klassen generierst hast.

Hoffe das hilft.
 

Generic1

Top Contributor
Also ich habe von Contract First (also die WSDL hab ich schon) geschrieben, wo der Code anhand einer vorhandenen WSDL am Server generiert werden soll.
Client ist wieder eine andere Sache, die für mich in diesem Zusammenhang nicht wichtig ist.

Also, ich hab auf meinem Entwicklungsrechner in einem Dynamic Web Projekt eine WSDL, in der der Port drinnensteht (IP Adresse vom Entwicklungsrechner + Pfad)

Ich erstelle dann Anhand der WSDL den Code.
Wenn ich jetzt das Projekt / den Code nehme und auf einem anderen Rechner (Server) gebe, dann stimmt ja der Code nicht mehr (Server hat andere IP usw.)

Meine Frage wäre jetzt gewesen, wie kann ich das machen, damit ich das DWP auch auf einem anderen Rechner laufen lassen kann und der WS dann trotzdem noch von den Clients erreichbar ist?

Eine Möglichkeit wäre meiner Meinung nach, in der WSDL 2 Ports reinzuschreiben (die vom Entwicklungsrechner und die vom Server, wo der WS- Server dann laufen soll).
So in der Art:

Code:
<service name="MyService1">
      <port binding="tns:MyServicePortBinding" name="MyServicePort1">
         <soap:address location="http://10.23.12.222:8080/services/MyServicePort"/>
      </port>
   </service>
<service name="MyService2">
      <port binding="tns:MyServicePortBinding" name="MyServicePort2">
         <soap:address location="http://192.168.12.222:8080/services/MyServicePort"/>
      </port>
   </service>

Ist das möglich?
lg
 

mvitz

Top Contributor
Du kannst die Klassen auch ohne die Angabe generieren.

Also du hast eine WSDL, generierst dir daraus die Klassen, passt die Serviceklasse an deine Funktionalität an und möchtest dann diese Klassen als WebService auf einem Server betreiben, richtig?

Dann müssen die Clients einfach nicht die WSDL nutzen, aus der du generierst, sondern die, die dir JAX-WS zur Laufzeit generiert.

Die genau URL kann ich dir jetzt nicht nennen, aber idr. sieht diese so aus:

http://ip:port/context/servlet-mapping/service-name?wsdl
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M einfacher REST Webservice Allgemeines EE 4
M RESTful Webservice mit json Allgemeines EE 2
A Webservice (SOAP) Lookup Allgemeines EE 1
D Webservice benutzen Allgemeines EE 4
S Welcher Java EE Applikationserver für RESTful Webservice? Allgemeines EE 2
N Authentication/UserPrincipal mit Rest Webservice? Allgemeines EE 6
N WebService WAR-File auf Tomcat-Server Allgemeines EE 1
B Inject webservice von cxf.xml Allgemeines EE 1
F ein wenig Hilfe - Webservice Allgemeines EE 1
D Servlet Webservice Konfigurationsdateien Best Practice Allgemeines EE 3
D Java Projekt goes Webservice Allgemeines EE 6
H SQL Daten von Webservice an Client übergeben Allgemeines EE 3
G WebService Concurrency Allgemeines EE 6
H Webservice testen Allgemeines EE 7
M Webservice - Anhang senden und codieren Allgemeines EE 4
M Spring: Bean als Webservice freigeben Allgemeines EE 9
O eclipse - tomcat: Problem bei einfachem Webservice Allgemeines EE 16
O webservice mit java erstellen. was brauch ich alles dazu? Allgemeines EE 53
B .net-Webservice aufrufen Allgemeines EE 9
C HashMap über Webservice übertragen Allgemeines EE 2
G REST Webservice Allgemeines EE 11
H WebService mittels SessionBean aufrufen? Allgemeines EE 7
F JBoss WebService Allgemeines EE 3
S webservice mit tomcat und axis ohne eclipse laufen lassen? Allgemeines EE 2
G WebService Client: Parameterübergabe Allgemeines EE 9
R Bei AXIS-Start gleich WebService starten Allgemeines EE 2
R Embedded WebService-Server Allgemeines EE 4
L WebService Problem mit SessionBean Allgemeines EE 14
L Web-Client - SessionBean - WebService Allgemeines EE 2
C WebService deployen .Verzweiflung. Allgemeines EE 2
M Google - WebService Allgemeines EE 3
M Probleme beim Webservice Deployment(Sun ApplicationServer) Allgemeines EE 2
K Projekt bei seam2 belassen oder auf JEE6 portieren Allgemeines EE 29

Ähnliche Java Themen

Neue Themen


Oben