# webservice mit java erstellen. was brauch ich alles dazu?



## oetzi (27. Nov 2007)

moin zusammen,
möchte bzw. muss einen webservice mit java erstellen und irgendwie krieg ich den ganzen spaß nicht ans laufen.
was brauche ich alles für mein unterfangen?
ich entwickle mit 
*OS Suse und
IDE Eclipse*

ein bischen kenn ich mich mit webservice aus. aber halt nur ein bischen 

wollte zu test- bzw. einarbeitungszwecken eine kleine bestehende WSDL datei per WSDL2JAVA tool in Code umwandeln lassen, aber allein am umwandeln scheitere ich schon... 

kann mir vll jemand noch das generelle vorgehen beschreiben?
sprich mit welchem plugin ich das hinkriege?

ach und noch was? brauche ich eigentlich nen tomcat für den ganzen spaß?

fragen über fragen 
wäre euch dankbar für ein paar antworten!

mfg oetzi


----------



## lhein (27. Nov 2007)

Also ich hab gerne XFire verwendet. (XFire)
Das ist jetzt aber irgendwie mit Apache CXF zusammengegangen.

Schau es Dir einfach mal an. Bei mir hat sich damals das ganze auf das Schreiben eines Interfaces, das Einbinden der XFire-Logic (ca. 3-10 Zeilen Code) und das Implementieren des Interfaces auf Serverseite reduziert.

Achja, einen extra Webserver hats da nicht gebraucht, weil das auf Jetty aufsetzt.

Gruß
lr


----------



## Niki (27. Nov 2007)

Da geb ich doch glatt auch meinen Senf dazu 

Ich hab mir sowohl XFire als Axis2 angeschaut. Ich finde zu keinem von beidem findet man wirklich gute Tutorials a la "from the scratch". Bin jedoch bei Axis2 geblieben da ich auch schon recht viel mit Axis1.4 gemacht habe.
Das Vorgehen ist wie folgt:
*Axis2 runter laden.
*Eventuell Ant runter laden, ist jedoch in Eclipse integriert.
*Projekt in Eclipse erstellen und eine Lib "axis2" mit allen jars im [axis2home]/lib Verzeichnis definieren. Lib zu Projekt hinzufügen
*Verzeichnis "wsdl" im Projekt anlegen und wsdl-Datei hineinkopieren
* ant-File erstellen, sollte *NICHT* build.xml heißen, da Axis2 ein eigenes build.xml erzeugt -> createservice.xml oder so:

```
<?xml version="1.0" encoding="UTF-8"?>
<project name="myservice" default="generate" basedir=".">
	<property name="sys.dir" value="C:/javalibs" />
	<property name="src.dir" value="src" />

	<property name="ws.wsdl"
	          value="${basedir}/wsdl/myservice.wsdl" />
	<property name="ws.namespace"
	          value="urn:myservicenamespace" />
	<property name="ws.package"
	          value="myservice" />

	<property name="axis2.home" value="${sys.dir}/axis2/1.3" />
	<path id="axis2.classpath">
		<fileset dir="${axis2.home}/lib">
			<include name="axis2-*.jar" />
			<include name="wsdl4j-1.6.2.jar" />
			<include name="stax-api-1.0.1.jar" />
			<include name="commons-logging-1.1.jar" />
			<include name="neethi-2.0.2.jar" />
			<include name="XmlSchema-1.3.2.jar" />
			<include name="axiom-api-1.2.5.jar" />
			<include name="axiom-impl-1.2.5.jar" />
			<include name="activation-1.1.jar" />
			<include name="wstx-asl-3.2.1.jar" />
			<include name="xbean-2.2.0.jar" />
		</fileset>
	</path>
	<taskdef name="wsdl2java"
	         classname="org.apache.axis2.tool.ant.AntCodegenTask"
	         classpathref="axis2.classpath" />

	<target name="generate">
		<wsdl2java targetsourcefolderlocation="${src.dir}"
		       skipwsdl="true"
		       serverside="true"
		       wsdlfilename="${ws.wsdl}"
		       synconly="true"
		       databindingname="xmlbeans"
		       generateservicexml="true"
		       unwrap="false"
		       skipbuildxml="false"
		       namespacetopackages="${ws.namespace}=${ws.package}" />
	</target>
</project>
```

*Dann rechts-klick auf das xml-File -> Run As -> Ant Build...auswählen --> Dialog öffnet sich

* Target "generate" auswählen und Dialog bestätigen --> Festplatte rattert und Code wird generiert

* Ebenfalls wird ein build.xml im Projekt-Root generiert. Dieses kann man ausführen (ACHTUNG! Variable "AXIS2_HOME" muss in der Umgebung gesetzt sein oder im build.xml das Property "axis2.home" selber setzen)

* rechts-klick auf build.xml -> Run As -> Ant Build... jar.server auswählen

* im Verzeichnis build/lib wird ein .aar File erstellt, dieses ist dein WebService und du kannst es in deiner WebApp deployen.

Die WebApp muss wie folgt aussehen:

```
[webapp]
	[axis2-web] (einfach von axis2 Verzeichnis kopieren)
	[WEB-INF]
		[modules] (wieder aus axis2]
		[services] (wieder aus axis2 -> hier gehört dein Service kopiert)
		[lib] (hier die axis2 Bibliotheken kopieren)
		web.xml gehört mit den Einträgen aus axis2 erweitert, einfach die Tags dazukopieren
```

Das wars, eigentlich sollte jetzt alles wie geschmiert laufen!
Bei Fragen einfach läuten


----------



## lhein (27. Nov 2007)

Sowohl die XFire Homepage als auch die CXF Homepage bieten umfangreiche Dokumentation und Tutorials.

lr


----------



## Niki (27. Nov 2007)

Braucht man dafür eigentlich spring oder rennt das auch ohne spring?
Soweit ich das mit XFire verstanden habe muss man das Service selber registrieren (mittels Code). Alleine das find ich schon schlecht!


----------



## oetzi (27. Nov 2007)

wow. vielen dank für die ausführliche antwort niki!!! aber natürlich auch ein dank an die anderen 

aber nachfragen muss ich wohl auf jedenfall. muss mich wohl zudem als linux noob outen 
als hintergrundinfo: das ganze ist die vorbereitung für meine abschlussarbeit. und da die abteilung für die ich das mache mit linux arbeit, bin ich halt auch dazu verdammt 

naja also folgendes:
1. habe mir axis2-1.2.jar runtergeladen. müsste richtig sein nehme ich an?!
2. so, ne lib(rary) definieren... wie was wo genau?  ich weiß, dass ich unter properties unter java build path, dort unter libraries jars hinzufügen kann. aber was muss ich vorher mit dem axis2.jar file machen?
3. wenn ich schonmal dabei bin  gib mir doch bitte noch nen tipp, wie ich mit eclipse ein ant-file erzeuge

dann probiere ich den rest erstmal, bis dann unweigerlich die nächsten fragen auftauchen *g*


----------



## lhein (27. Nov 2007)

Ich glaube nicht jeder hat den Bedarf, ein komplexes Framework wie Spring zu verwenden. Es gibt auch ganz simple Anwendungsfälle. Damals habe ich eine Administrationskonsole für meine Serveranwendung geschrieben. Da ging es einfach nur darum, Befehle, die der User am Client eingibt an den Server zu übertragen, dort auszuführen und das Resultat an den Client zurückzuliefern. 
Hier hat es ausgereicht ein kleines Interface mit 1 Methode  String execute (String comand) zu entwickeln, auf Serverseite dieses Interface zu implementieren und eine Webservice-Ohr zu starten. Der Client kann sich dann mit wenigen Codezeilen auf den Server connecten und loslegen.

Das Interface:


```
public interface IConsoleComandHandler
{
    /**
     * handles the user inputs
     * 
     * @param cmd   the comand or shortkey with all params 
     * @return      the result
     */
    public String executeComand(String cmd);
}
```

Die Serverlogik:


```
ObjectServiceFactory serviceFactory = new ObjectServiceFactory();
    
        // Create an XFire Service (console handler)
        Service consoleHandlerService = serviceFactory.create(IConsoleComandHandler.class);
        consoleHandlerService.setInvoker(new BeanInvoker(new ConsoleComandHandler()));
        
        // Register the service in the ServiceRegistry
        XFire xfire = XFireFactory.newInstance().getXFire();
        xfire.getServiceRegistry().register(consoleHandlerService);
        
        // Start the HTTP server
        server = new XFireHttpServer();
        server.setPort(this.port);
        server.start();
```

Der Client:


```
ObjectServiceFactory serviceFactory = new ObjectServiceFactory();
        org.codehaus.xfire.service.Service serviceModel = serviceFactory.create(IConsoleComandHandler.class);

        // Create a client proxy
        XFireProxyFactory proxyFactory = new XFireProxyFactory();
        
        try
            {
            IConsoleComandHandler handler = (IConsoleComandHandler) proxyFactory.create(serviceModel, webHandler);

            String comand = getConsoleComand(handler);
            while (!comand.equalsIgnoreCase(QUIT_COMAND) )
                {
                try
                    {
                    System.out.println(handler.executeComand(comand));                    
                    }
                catch (Exception ex)
                    {
                    logger.error("AdminConsole.main(): Error executing the comand " + comand + ".", ex);
                    }                
                finally
                    {
                    comand = getConsoleComand(handler);
                    }
                }
            }
        catch (MalformedURLException muex)
            {
            logger.error("The given adress of the server was not correct.", muex);
            System.exit(-1);
            }
```

Die Codebeispiele sind stark vereinfacht und unvollständig.
Es ist jedoch zu sehen, daß XFire sehr einfach zu verwenden ist.

Gruß
lr


----------



## Niki (27. Nov 2007)

Zu deinen Fragen:

1.) Es gibt schon axis2 in der Version 1.3, die habe ich verwendet
2.) im Eclipse auf Window -> Preferences... -> Java -> Build Path -> User Libraries -> New...
         Namen vergeben und die jars über "Add Jars..." hinzufügen.
     Dann das Projekt markieren.
     Project -> Properties -> Java Build Path -> Add Library -> User Library -> und die definierte axis2 lib auswählen
3.) Einfach rechts-klick auf das Project -> New -> File -> createservice.xml als Dateinamen vergeben und schon ist es geschehn


----------



## oetzi (27. Nov 2007)

puh, ich probier grad den ganzen vorgang nach zu vollziehen, um es später auch auf andere projekte anwenden zu können.
ok, das axisplugin liefert mir u.a. die möglichkeiten aus der wsdl code zu erzeugen. darum binde ich das als library ein (konnte man nicht eigentlich plugins einfach in den plugin ordner packen...?)

so, das antfile...  :bahnhof: 
1. woher haste du den ganzen "code" den du mir dazu gepostet hast? muss man das einfach drauf haben? *g*
2. und dieses antfile dient doch dazu die wsdl in den java code umzuwandeln oder? habe das mal vor einiger zeit bei nem PHP projekt gemacht. da konnte ich dann per rechtsklick auf die wsdl -> xyz ->... mich durchklicken und hatte dann irgendwann den erzeugten code. mich verwirrt also ein bischen das vorgehen mit diesem ant file
3. bekomme ich in zeile 32 einen fehler  und beim drüber gucken ist mir in der 4. zeile das c:/javalibs aufgefallen. dat klappt wohl unter suse nicht so wirklich  auf welches verzeichniss muss dieser wert genau gesetzt werden? welche java librarys werden da gebraucht?

PS kann sein, dass ich erst morgen wieder dazu komme hiermit weiter zu machen


----------



## Niki (27. Nov 2007)

Den Code hab ich aus Jahre langer Berufserfahrung. Mit der Zeit schreibt man das recht schnell herunter.
Ja, das Antfile dient zum Generieren der Java-Dateien
bei mir wären die Bibliotheken unter
c:/javalibs/[bibliothekenname]/[version der lib]
abgespeichert also:
c:/javalibs/axis2/1.3/

unter Linux wär das IMHO zb:
/javalibs/axis2/1.3

Ich hab noch nie unter SUSE gearbeitet, denke aber das es so ausschauen müsste
Der Fehler aus Zeile 32 dürfte daran liegen, weil er die Bibliotheken nicht findet. Also den Pfad /javalibs.... richtig setzen, dort wo halt axis2 entpackt ist


----------



## oetzi (28. Nov 2007)

moin moin,
neuer tag neues glück 

/*
gelöscht dat hat sich nämlich erledigt 
*/

PS: kann es vll sein, dass ich die falsche datei runtergeladen habe?? vll hat jemand mal nen link für mich. einfach zur sicherheit, dass ich nicht mit wat ganz falschen hier arbeite 

--> genau das war das problem... verdammt. hab mir jetzt mit nem windows rechner die 1.3er version gezogen entpackt und dann auf die linux kiste geschoben. jetzt habe ich auch alle ordner drin die benötigt werden. 
so weiter gehts


----------



## oetzi (28. Nov 2007)

naja ganz ohne weitere fehler wäre ja langweilig 

1. in dem ganz oben geposteten code die zeile 44. 
BUILD FAILED
...createservice.xml:44: org.apache.axis2.wsdl.codegen.CodeGenerationException: Error parsing WSDL

2. außerdem unterschlängelt der mir das '<wsdl2java>' in zeile 35 und meint 'element type "wsdl2java" must be declared' 
mhh, hierbei fehlt mir das genaue verständniss von ant-files. ist das was relevantes? oder kann ich das ignorieren?


----------



## Guest (28. Nov 2007)

weiß nicht wie, aber den 1. fehler habe ich wegbekommen 
so: hier ist mal mein aktueller code.habe ihn lediglich an wenigen stellen angepasst.
wenn ich jetzt das run as -> ant build laufen lasse. kommt ein fenster in dem folgendes steht: 
'the user operation is waiting for "Building workspace" to complete.'
da drunter steht dann launching und 'the user operation is waiting for background work to complete: 1 work left'
das habe ich einfach mal 3-4 minuten laufen gelassen, aber es ist nichts weiter passiert. sollte ich nicht erst irgendwas auswählen, bevor der code generiert wird?


```
<?xml version="1.0" encoding="UTF-8"?>
<project name="myservice" default="generate" basedir=".">
   <property name="sys.dir" value="/home/mkoll/lib" />
   <property name="src.dir" value="src" />
   <property name="ws.wsdl"
             value="${basedir}/wsdl/myservice.wsdl" />
   <property name="ws.namespace"
             value="urn:myservicenamespace" />
   <property name="ws.package"
             value="myservice" />
   <property name="axis2.home" value="${sys.dir}/axis2-1.3" />
	
   <path id="axis2.classpath">
      <fileset dir="${axis2.home}/lib">
         <include name="axis2-*.jar" />
         <include name="wsdl4j-1.6.2.jar" />
         <include name="stax-api-1.0.1.jar" />
         <include name="commons-logging-1.1.jar" />
         <include name="neethi-2.0.2.jar" />
         <include name="XmlSchema-1.3.2.jar" />
         <include name="axiom-api-1.2.5.jar" />
         <include name="axiom-impl-1.2.5.jar" />
         <include name="activation-1.1.jar" />
         <include name="wstx-asl-3.2.1.jar" />
         <include name="xbean-2.2.0.jar" />
      </fileset>
   </path>
   <taskdef name="wsdl2java"
            classname="org.apache.axis2.tool.ant.AntCodegenTask"
            classpathref="axis2.classpath" />

   <target name="generate">
      <wsdl2java targetsourcefolderlocation="${src.dir}"
             skipwsdl="true"
             serverside="true"
             wsdlfilename="${ws.wsdl}"
             synconly="true"
             databindingname="xmlbeans"
             generateservicexml="true"
             unwrap="false"
             skipbuildxml="false"
             namespacetopackages="${ws.namespace}=${ws.package}" />
   </target>
</project>
```


----------



## oetzi (28. Nov 2007)

(ka warum das obere posting als gast gepostet wurde 0o)
edit: unten rechts in eclipse bleibt der launching status auch bei 0% stehen. es passiert also wirklich nichts


----------



## Niki (28. Nov 2007)

Hast du das Target "generate" im Dialog bei Run Ant... ausgewählt?


----------



## Guest (29. Nov 2007)

Hallo,

ich befasse mich auch mit dem Problem. Bin bereits schon so weit gekommen, dass die class-Dateien mit ant erstellt wurden. Jedoch klappt bei mir der folgende Schritte nich



			
				Niki hat gesagt.:
			
		

> ...
> 
> * im Verzeichnis build/lib wird ein .aar File erstellt, dieses ist dein WebService und du kannst es in deiner WebApp deployen.
> 
> ...



, da ich in diesem Verzeichnis nur 2 *.jar Dateien hab. Eine davon heißt ...-test-client.jar, abba wenn ich versuche diese auszuführen kommt ein Fehler, dass die main() Funktion fehlt. Was is da schief gelaufen? Ich arbeite mit Windows.   
Wäre über Hilfe sehr dankbar.


----------



## Niki (29. Nov 2007)

welches Target hast du mit ant ausgeführt? du musst das jar.server target ausfüren um das aar  file zu bekommen


----------



## Gast (29. Nov 2007)

ich hab die build.xml benutzt


----------



## SnakeHo (29. Nov 2007)

ich bin der Gast von eben 
ich hab mal suchen lassen: bei mir is kein "jar.server" target.
hab ich nach dem Falschen target gesucht?


----------



## Niki (29. Nov 2007)

ja schon, aber welches *TARGET* hast du von dem build.xml ausgeführt? Verwendest du eclipse? Wenn ja, mach einen rechtsklick auf die build.xml, dann Run As --> *Run Ant...* (Das untere der beiden Menüpunkte) und wähl *jar.server* aus


----------



## Niki (29. Nov 2007)

ist das build.xml das, welches dir axis2 selber erstellt hat? ich hoffe schon, sonst wirst du das target natürlich nicht haben


----------



## SnakeHo (29. Nov 2007)

okay hab das target in der Build.xml gefunden, abba bei "öffnen mit" is bei mir kein "Run Ant"
ich glaube ich hab das Programm nicht installiert. hab einfach über die Eingabeaufforderung versucht ant zu benutzen


----------



## Niki (29. Nov 2007)

Das geht auch, mach aus der Eingabeaufforderung einfach : ant jar.server
dann wird das Target jar.server aufgerufen


----------



## SnakeHo (29. Nov 2007)

cool, danke für die schnelle Hilfe 
ich hab jetz die *.aar und was mach ich jetz?


----------



## Niki (29. Nov 2007)

Die kopierst du ins WEB-INF/services Verzeichnis von axis2 oder deiner WebApp. Ich hab eine lange Beschreibung zum Vorgehen gepostet. Lies dir das einfach mal durch, das sollte dir weiter helfen


----------



## SnakeHo (29. Nov 2007)

oki, hast ja oben geschrieben 
Abba ich versteh die vorgehensweise nich ganz
was is das für ne Programmiersprache bzw. wie bekomme ich das in geeigneter Form, dass ich es auf ner HTML-Seite nutzen kann?


----------



## SnakeHo (29. Nov 2007)

D:\Java\axis2-1.3\webapp\WEB-INF
soll ich jetz hier noch nen Ordner "services" erstellen? da is nämlich nur nen Ordner "classes"


----------



## Niki (29. Nov 2007)

Das kannst du so nicht in einer html Seite verwenden.
Das ganze funktioniert so:
Es gibt zwei Möglichkeiten:
1.) Du besitzt von irgendwo eine wsdl-Datei, die dein Service beschreibt (contract first)
* Dann kannst du aus der wsdl deine java-sourcen generieren lassen und dir das .aar File erstellen lassen. Dieses ist dein Service, welches du in deiner Webapplikation deployen kannst. Die WebApplikation muss bestimmte Bibliotheken von axis2 haben bzw. die Servlets von axis2 gehören in deiner web.xml ebenfalls definiert
2.) Du willst ein komplett neues Service erstellen (code first)
* Erstell dein Service Interface und/oder Implementierungsklasse
* Erzeuge die wsdl anhand des Interfaces/Klasse
* gehe weiter wie bei Schritt 1 vor

Vielleicht hilft dir dieser Link ein wenig weiter:
Axis2_from_scratch

Um das ganze laufen zu lassen brauchst du einen Servlet Container (z.B Tomcat). Hast du dein WebService erstellt und deployt kannst du dir aus der wsdl auch den Client Code generieren lassen. Dieser ruft dann das Service tatsächlich auf!


----------



## lhein (29. Nov 2007)

Also wenn ich das alles so lese, dann kannst Du mir nicht ernsthaft sagen, daß XFire schwieriger ist 

lr


----------



## SnakeHo (29. Nov 2007)

hab ich dann jetz nen Web Service generiert?
Ich wollt eigentlich nen Client haben, der den Web Service nutzt und nen Request daran setzt und die Antwort anzeigt


----------



## Niki (29. Nov 2007)

@lr
Ich hab schon relativ viel mit axis1.4 gemacht, daher ist mir axis2 auch nicht sooo schwer gefallen. bei XFire hat mich irritiert dass ich spring braucht, ich bekam die ganze zeit fehlermeldungen, dass irgendwelche Beans nicht gefunden werden konnten. Ich mag auch nicht per code mein Service registrieren müssen, das Framework soll selber erkennen das da ein service ist

@snakeho wenn du ein service ansprechen willst brauchst du dir nur den Client generieren lassen.

ich vermute das hast du schon gemacht, jetzt brauchst du halt deine java-klasse wo du den aufruf implementierst


----------



## SnakeHo (29. Nov 2007)

Also komm ich mit deinem ersten beitrag nicht zum Client, oda is der jetz schon als Nebenrodukt entstanden?
Sorry, dass ich so schwer von Begriff bin. Ich seh die Dinge nich immer gleich auch wenn sie schon da stehen.


----------



## Niki (29. Nov 2007)

Schau mal nach ob dir eine Datei namens [Server]Stub.java generiert worden ist. Wenn ja, ist das deine Client Klasse mit der du dein Service ansprechen kannst:

```
MyServiceStub stub = new MyServiceStub("http://localhost:8080/mywebapp/services/MyService");
  stub.machWasAmServer();
```


----------



## lhein (29. Nov 2007)

Niki hat gesagt.:
			
		

> @lr
> Ich hab schon relativ viel mit axis1.4 gemacht, daher ist mir axis2 auch nicht sooo schwer gefallen. bei XFire hat mich irritiert dass ich spring braucht, ich bekam die ganze zeit fehlermeldungen, dass irgendwelche Beans nicht gefunden werden konnten. Ich mag auch nicht per code mein Service registrieren müssen, das Framework soll selber erkennen das da ein service ist



Klar, für Deine Anforderungen macht so eine integrierte Lösung keinen Sinn. XFire hatte seinerzeit einen ziemlichen Affenschwanz an Dependencies. Wahrscheinlich hast Du einfach nicht alle eingebunden, die es gebraucht hat.
Werd mich bei Gelegenheit mal an dieses CXF machen.

Gruß
lr


----------



## Niki (29. Nov 2007)

Es wäre toll wenn du ein kleines "from the scratch with XFire" tutorial hier posten könntest. Sowas habe ich im Netz leider nirgends gefunden. Axis2 hat leider auch extrem viele Abhängigkeiten. Ich bin mir aber ziehmlich sicher dass ich bei XFire alle libs eingebunden hatte. Die Konfiguration dürfte nur noch nicht gestimmt haben.


----------



## SnakeHo (29. Nov 2007)

oki die stub hab ich
muss ich jetz also nen neue Java-Datei programmieren mit der Anfrage, oda wie?
und wenn ja kann ich dann an der Stelle


			
				Niki hat gesagt.:
			
		

> ```
> MyServiceStub stub = new MyServiceStub("http://localhost:8080/mywebapp/services/MyService");
> stub.machWasAmServer();
> ```


auch die richtige wsdl location im Netz angeben um es von überall aufrufen zu können?


----------



## lhein (29. Nov 2007)

Niki hat gesagt.:
			
		

> Es wäre toll wenn du ein kleines "from the scratch with XFire" tutorial hier posten könntest. Sowas habe ich im Netz leider nirgends gefunden. Axis2 hat leider auch extrem viele Abhängigkeiten. Ich bin mir aber ziehmlich sicher dass ich bei XFire alle libs eingebunden hatte. Die Konfiguration dürfte nur noch nicht gestimmt haben.



Heut sicher nicht mehr, aber evtl. mach ich das am Wochenende mal.

lr


----------



## Niki (29. Nov 2007)

Yep, du musst eine Java Datei schreiben. Du kannst die location für das WebService auch als start-Argument mitgeben, aber normalerweise ändert sich die Location eines Service ja nicht täglich. Ein Property-File wäre auch eine Möglichkeit das ganze dynamisch zu halten.
Normalerweise steht in der wsdl Datei die URL vom Service drin. Die wird auch als default Wert genommen, wenn man beim Konstruktor des Stubs nichts übergibt


----------



## SnakeHo (29. Nov 2007)

```
package net.webservicex.www;

public class test{
	CurrencyConvertorStub stub=new CurrencyConvertorStub();
}
```
da sacht er mir nen Fehler, dass der Konstruktor damit nich arbeiten kann auch wenn ich die url angebe klappt das nich
die Datei liegt im selben Ordner, wo auch die CurrencyConvertorStub.java is


----------



## Niki (29. Nov 2007)

Ja, weil der Konstruktor eine Exception werfen kann und du das ganze als Attribut verwendest. Schreib das ganze in eine Methode (z.B. main) und bau einen try-catch Block darüber


----------



## SnakeHo (29. Nov 2007)

oki, so weit alles kla
was schreib ich nach

```
try{
...
}catch
```
?


----------



## byte (29. Nov 2007)

Axis hat doch mittlerweile bestimmt eine JAX-WS Implementierung oder?

Falls ja, hat man doch ein prima Tutorial bei Sun: http://java.sun.com/javaee/5/docs/tutorial/doc/bnayl.html


----------



## SnakeHo (29. Nov 2007)

okay, ich versuchs mal damit, denk ma jetz wird's eh nich mehr so allgemein, also muss ich wohl auch selber klar kommen
trotzdem danke Guys


----------



## Niki (29. Nov 2007)

```
public static void main(String[] args){
  try{
    CurrencyConvertorStub stub=new CurrencyConvertorStub(); 
  }catch(Exception ex){
    ex.printStackTrace();
  }
}
```

Mich wundert nur wie jemand, der anscheinend noch nicht viel mit Java gemacht hat, gleich ein WebService mit Java ansprechen soll


----------



## lhein (29. Nov 2007)

Die Methode nennt sich "ins kalte Wasser werfen" und kann verschiedene Resultate erzeugen, wie z.B.: "geht unter" oder "kann schwimmen" 

Aber mal ganz nebenbei, das ist in einigen Firmen absolut gängig. Hab mal in einer gearbeitet, da wurde immer der mit einer Aufgabe betreut, der davon am wenigsten Ahnung hatte. Die Logik dahinter blieb mir leider verborgen 

lr


----------



## Niki (29. Nov 2007)

Ahhh, das ist natürlich sehr klug und wirtschaftlich. Wär vielleicht klüger gewesen einen Erfahrenen mit einem Unerfahrenem zusammen zu tun.
Es gibt schon eigenartige Firmen....


----------



## SnakeHo (29. Nov 2007)

ganz so wenig Ahnung mit Java hab ich auch nich,
hab auch schon einige Programme mit Java geschrieben
bin allerdings Student und als solcher muss man mit allerhand Programmiersprachen klar kommen 
wenn man dann ne Weile eine nich mehr benutzt hat, muss man erstma wieda reinkommen 

```
try{ 
    CurrencyConvertorStub stub=new CurrencyConvertorStub(); 
  }catch(Exception ex){
  }
```
reicht auch


----------



## lhein (29. Nov 2007)

Leere catch-Blöcke sollte man tunlichst vermeiden. Sonst wird die Fehlersuche irgendwann zur Glückssache.

lr


----------



## Niki (29. Nov 2007)

Richtig, am besten ist jedoch das sogenantne "wirf alles weiter Pattern" einzusetzen. Bei allen Methoden einfach throws *Throwable* deklarieren und im main-Thread einen fetten try-catch Block zu bauen! Dann ist man immer auf der sicheren Seite.
 :autsch:


----------



## ms (29. Nov 2007)

Niki hat gesagt.:
			
		

> Richtig, am besten ist jedoch das sogenantne "wirf alles weiter Pattern" einzusetzen. Bei allen Methoden einfach throws *Throwable* deklarieren und im main-Thread einen fetten try-catch Block zu bauen! Dann ist man immer auf der sicheren Seite.
> :autsch:



Öhm ... bitte einen lachenden smile machen, wenns lustig gemeint war.

ms


----------



## Niki (29. Nov 2007)

Ich hoffe schon, dass das alle als Ironie verstehen, oder meinst du ich könnte für Verwirrung sorgen?


----------



## ms (29. Nov 2007)

Niki hat gesagt.:
			
		

> Ich hoffe schon, dass das alle als Ironie verstehen, oder meinst du ich könnte für Verwirrung sorgen?


Ja, aber jetzt ist es klar.  :wink: 

ms


----------



## SnakeHo (13. Dez 2007)

Hätte hier noch en Frage anzusetzen:
Hab alles so getan, wie es am Anfang beschrieben wurde und die .aar Datei erzeugt. Einen Client hab ich auch der auf den Server zugreift und eine Anfrage ausführt. Nun ist das Problem, dass ich einen Server auf meinem Rechner erstellen muss um eine Anfrage machen zu können. Dies habe ich mit Tomcat und Ecclipse versucht, hab abba imma nen Fehler bekommen, wenn ich dann den Client ausführen wollte, weil der Speicher schon reserviert war. Bei 2GB Ram kann es auch nich zu wenig sein. 
Bekomm ich nun irgendwie anders einen Server aufegesetzt?
Ich hab im Axis2 Ordner zum beispiel ne EXE gefunden: Axis2server. Abba wenn ich die ausführe schmeißt er auch nen Fehler. Muss ich da erst noch den Service spezifizieren und wenn ja wie mach ich das?
Wäre über Hilfe sehr dankbar.


----------



## SnakeHo (14. Dez 2007)

Weiß nich warum, abba nu geht's auf ein Mal. Vielleicht geht's nu, weil jetz nach dem Neustart der Arbeitsspeicher wieda frei is. (Mein Notebook hier hat NUR 512 MB  )


----------

