# Von WebService auf anderen WebService zugreifen?



## nEp (7. Jan 2008)

Hi,

ich habe ein Problem: Und zwar habe ich einen WebService, welcher für seinen Dienst auf 2 andere WebServices zugreifen muss. Ich benutze Axis2 in Tomcat.

Prinzipiell ja nicht so schwer denke ich mal, da muss ich dann halt auch wie aus Client-Sicht programmieren. Allerdings klappt das ganze nicht so wirklich, ich kriege ständig eine Exception geschmissen, wenn ich dann diesen WebService von einem einfachen Java-Client aus testen will. Die Exception sieht so aus:
"Exception in thread "main" org.apache.axis2.AxisFault: The server failed to process the WS-Addressing header: wsa:Action [Reason]: A header representing a Message Addressing Property is not valid and the message cannot be processed"

Ich denke aber mal ich weiß woran das liegt. Die ganzen JARs, die man ja normalerweise im Classpath einer Client-Applikation haben muss, hab ich jetzt in meinem WebService natürlich nicht drinnen. Und der muss ja analog zu einem Client auch auf andere Services zugreifen. Ich denke mal dass es daran liegt. Jetzt stellt sich mir nur die Frage, wie kriege ich das am besten hin? Also wie benutzt mein WebSerivce (simple .aar Datei) auch die benötigten JARs?

Ich hoffe dass mir hier jemand helfen kann... danke.

P.S. Die beiden anderen WebServices die benutzt werden sollen, arbeiten korrekt, das habe ich getestet. Und wenn ich in meinem anderen WebService, der eben diese beiden WebServices benutzen soll, die entsprechenden Aufrufe rausnehme, dann gibts da auch keine Fehler. Deshalb denke ich eben, dass das damit zusammenhängt dass die entsprechenden JARs fehlen.


----------



## Gast (9. Jan 2008)

die Liberies, die du für dein Webservice-Client benötigst, kopierst du unter: \tomcat\webapps\axis2\WEB-INF\lib


----------



## nEp (10. Jan 2008)

Hm danke, aber das hat nichts gebracht, zudem da sowieso schon so gut wie alle Bibliotheken waren.

Das ist echt zum Auswachsen... ich hab meinen Webservice mal "lokal", also als reinen Client getestet (mit ner main-Methode) und von dort einfach die beiden WebService-Methoden die ich habe (und die eben andere WebSErvices benutzen) aufgerufen. Das funktioniert alles wunderbar....
Aber sobald diese Klasse eben auch als WebService in Axis deployt ist, läuft das Teil nicht mehr  
Deswegen denke ich nach wie vor, dass da irgendwas mit den Libs nicht stimmt? Weil eigentlich müsste das ja dann theoretisch genauso laufen...


----------



## Gast (10. Jan 2008)

wie sieht denn deine Webservice Implementierung aus. Wenn ich dich richtig verstanden habe, hast du die Klasse vom Client (mit der main-Methode) als Webservice-Implementierung genommen?


----------



## nEp (11. Jan 2008)

Nein also mein WebService sieht ganz einfach aus:

Pseudocode:


```
public class MyService {

     public void serviceMethod1(String arg1, int arg2, int arg3) { 
 
              //Hier werden 2 andere WebServices benutzt, d.h. hier steht erst mal "Client"-Code um darauf zuzugreifen:
             //Hier wird mit RPCServiceClient gearbeitet und die EndPointReferences zu den beiden Services geholt

            //Diese Services werden dann für die eigene Logik benutzt
     }

     public void serviceMethod2(String arg1, String arg2) { 
 
              //Hier werden 2 andere WebServices benutzt, d.h. hier steht erst mal "Client"-Code um darauf zuzugreifen:
             //Hier wird mit RPCServiceClient gearbeitet und die EndPointReferences zu den beiden Services geholt

            //Diese Services werden dann für die eigene Logik benutzt
     }
}
```


Also sehr simpel. Wenn ich den WebService jetzt so deploye und mit nem eigenen Client darauf zugreifen will, dann geht das eben schief, mit der Meldung aus dem Original-Posting. Die beiden WebServices die ich hier verwende, funktionieren aber korrekt, was ich auch schon mit nem eigenen Client getestet habe.

Und das lustige an der ganzen Geschichte ist halt das, dass ich in dieser Klasse mal noch ne main-Methode hinzugefügt habe, und von der main-Methode die beiden service-Methoden aufrufe. Also ich habe die Klasse als normales POJO aus Eclipse heraus benutzt und eben nicht als Axis-Webservice deployt. Und da funktioniert auch alles. Aber sobald ich daraus ein .aar mache und das deploye gehts eben nicht, wenn ich dann von nem andern Client aus eine der beiden Methoden aufrufen will....

Verständlich?


----------



## Gast (11. Jan 2008)

ich hatte auch mal etwas ähnliches programmiert. Allerdings hatte mein Webservice dauernd die Klassen des Webservice-Clients nicht gefunden. Probier mal alle deine Klassen/jar-Dateien aus dem aar raus zu geben und nur ins WEB-INF/lib zu stellen. Was schmeißt denn dein Tomcat für Fehler?


----------



## nEp (12. Jan 2008)

Also in dem lib-Verzeichnis hab ich ja wie gesagt schon alle benötigten JARs. Oder wie meinst du das?

Und Tomcat/Axis schmeissen leider gar keine Fehler...


----------



## doZi (12. Jan 2008)

Hallo nEp,

Ich hatte gerade den selben Fehler in meinem WS Projekt.
Du musst in deinem WS (der auf die beiden anderen WebServer zugreift) folgendes setzten.

options.setAction("x")     x  steht für den Metodennamen des anderen WS.


Hier ein Codeauszug um das ganze ein wenig zu verdeutlichen:

RPCServiceClient serviceClient = new RPCServiceClient();
		Options options = serviceClient.getOptions();
		EndpointReference targetEPR = new EndpointReference("http://localhost:8080/axis2/services/...");
		options.setAction("x");
		options.setTo(targetEPR);


setAction musst du für jeden Methodenaufruf neu setzten.

Dann sollts auch mit dem Herrn Reich klappen )

Gruss,

doZi


----------



## nEp (13. Jan 2008)

Uff, vielen dank 
Genau daran lags bei mir. Jetzt klappt alles reibungslos.

Und ja, jetzt klappts mit dem Reich 
Also danke nochma


----------

