# Webservice: XML Parameter übergabe.



## casi91 (15. Mrz 2012)

Hallo Community.

Ich habe derzeit die wunderschöne Aufgabe einen Webservice zu erstellen, der einmal Daten in eine Datenbank schreibt und einmal ausließt.

Der Datenaustausch soll über XML vorgenommen werden.
Eine XML soll (ungefähr) diesen Aufbau haben:

[XML]
<KOPF>
    <id>4711</id>
    <name>mustermann</name>
    <position>
       <nr>1</nr>
       <artikel>4712</artikel>
    </position>
    <position>
       <nr>2</nr>
       <artikel>4713</artikel>
    </position>
</KOPF>
[/XML]

_Wie oben geschrieben, soll der Datenaustausch über XML stattfinden._
Fall 1:
Benutzer möchte neue Daten in die DB schreiben.
--> Benutzer ruft Webservice "add" auf und gibt als Parameter eine XML mit (Form wie oben beschrieben)

Fall 2:
Benutzer möchte Informationen zu den Daten in der DB abrufen.
--> Benutzer ruft Webservice "get" auf, gibt als Parameter "kopfid = 4711" mit und erwartet als rückgabe eine XML (Form wie oben beschrieben)


Einen Webservice habe ich schon erstellt bekommen. Diesem übergebe ich jedoch keine XML sondern alle Parameter einzeln.

Zum entwickeln benutze ich:
*Eclipse
Tomcat 7
Axis*

Und bin sehr viel nach folgendem Tutorial vorgegangen:
http://www.fassbender.fh-aachen.de/Download/OOS/Praktika/Entwicklung%20von%20WebServices%20in%20Java.pdf

Ich hoffe mir kann jemand erklären, wie ich eine komplette XML als Parameter mit übergeben kann.
Danke schonmal im vorraus


----------



## bygones (15. Mrz 2012)

hab das pdf nicht gelesen...

aber willst du einen SOAP webservice oder REST webservice ?!


----------



## casi91 (15. Mrz 2012)

Ich möchte eine SOAP Webservice.


----------



## bygones (15. Mrz 2012)

mhm - wenn ich mich richtig erinnere kannst du doch das xml einfach in deinen SOAP body mitgeben ?! (wahrscheinlich muss es encoded werden).

oder wenn der payload zu gross sein sollte es als attachment hinzufuegen


----------



## casi91 (15. Mrz 2012)

???:L???:L???:L
ich muss leider gestehen, dass ich gerade nur Bahnhof verstehe... 

Hier mal ein kurzes Beispiel, wie ich einen "Test"-Webservice mal aufgerufen habe.

Webservice:

```
@javax.jws.WebService
public class MyFirstWS {
	
	
	public String helloWorld() {
		return "Hello World";
	}
}
```

Client:

```
public class Test {
	public static void main(String[] args) {
		String result = "";
		
		try {
			MyFirstWSProxy endpoint = new MyFirstWSProxy();
			MyFirstWS service 		= endpoint.getMyFirstWS();
			
			result = service.helloWorld();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		System.out.println(result);
	}
}
```


Und ich hatte gehofft, dass es hier eine Möglicheit gibt, dass ich an dieser Stelle anstatt einem String, eine XML zurückbekommen kann.
Also anstatt als Rückgabewert:

```
String "Hello World"
```
zu erhalten
eben:
[XML]
<KOPF>
    <antwort>Hello World</antwort>
</KOPF>
[/XML]


----------



## casi91 (15. Mrz 2012)

niemand sonst noch eine Idee :-( ?


----------



## casi91 (15. Mrz 2012)

Bin nun mal soweit:

Meine JavaXML-Klasse:

```
@XmlRootElement
public class MyHeader {
	private String id = "";
	private String name = "";
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
```

Mein Webservice:

```
public class MyTest {
	public String helloWorld() {
		MyHeader header = new MyHeader();
		header.setId("1");
		header.setName("test");
		
		String test = "helloWorld";
		try {
			FileWriter writer = new FileWriter("C:/Projekte/test.xml");
			JAXB.marshal(header, writer);
			writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        } 
	return test;
	}
}
```

An dieser stelle, wird mir eine test.xml geschrieben, so wie ich sie erwartet habe:
[XML]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<myHeader>
    <id>1</id>
    <name>test</name>
</myHeader>
[/XML]

Nur wie bekomme ich das was ich nun ja in die Datei schreibe, als return für meine Methode, damit die XML an den Client kommt? Jemand eine Idee =) ?


----------



## casi91 (16. Mrz 2012)

Habs nun hinbekommen.
Anstelle des "FileWriter"s wie in meinem letzten Beispiel.
Benutze ich einen "StringWriter" und gebe den String (in dem sich dann die komplette XML befindet) als Parameter mit bzw. als return Wert zurück.

Obs die beste Lösung ist, weiß ich nicht. Aber es ist immerhin eine ^.^
Ich schließe das Thema nun.


----------

