# Objekte in übergebenen Objekten mit WebServices?



## Anselmus (30. Mai 2005)

hi,

probiere immer nochmit Web Services rum und hab folgendes problem:

auf der client seite bekommt nach authentifizierung ein "session" objekt:


```
public class AuthManager {
	public Session authenticate(User user){
		if(UserManager.authUser(user)){
			Session session = new Session();
			return session;
		}else{
			return null;
		}
	}
}
```

diese session enthält zwei weitere objekte:


```
public class Session {
	public ServerManager server= new ServerManager();
	public EmployeeManager eManager = new EmployeeManager();
}
```

ServerManager und EmployeeManager sind klassen mit denen man zb Server Objekte erzeugen kann:


```
public class ServerManager {
	public int createServer(String name){
		try{
			Server server = new Server();
			server.setServerName(name);
			return 0;
		}catch(Exception e){
			return -1;
		}
	}
}
```

jetzt lasse ich mir vom eclispe wizard ein webservice aus von AuthManager erstellen. das funkioniert auch wunderbar. ich bekomme auch ein session objekt zurück. aber leider haben ServerManager und EmployeeManager auf der client seite keine funkionen mehr... das heißt ich kann zum beispiel nicht mehr folgendes machen (client seite):




```
//...
ServerManager serverManager = session.getServer(); // geht noch
serverManager.createServer; // geht leider nicht,
```

die letzte anweisung geht leider nicht... die funktion createServer kennt er gar nicht auf der clientseite... 
weiß jemand ob sowas überhaupt geht?

gruß
stephan


----------



## Sven (16. Jun 2005)

Hi,

ein Webservice nutzt SOAP, d.h. deine Objekte werden als Text (XML) über http übertragen. Dies funktioniert nur mit serialisierbaren Objekten. 

Gruss
Sven


----------



## Anselmus (17. Jun 2005)

das stimmt nicht ganz. man kann nicht alle serialisierbaren objekte übergeben. man kann nur objekte mit primitiven datentypen und set und get übergeben. alles andere geht nicht...

falls doch, sag mir bitte wie  :wink:


----------



## Bleiglanz (17. Jun 2005)

stephanschoeffel hat gesagt.:
			
		

> das stimmt nicht ganz. man kann nicht alle serialisierbaren objekte übergeben. man kann nur objekte mit primitiven datentypen und set und get übergeben. alles andere geht nicht...
> 
> falls doch, sag mir bitte wie  :wink:



das ist alles Quatsch, serialisierbar oder nicht spielt bei SOAP überhaupt keine Rolle (auch wenn die meisten tools das natürlich einbauen)

übertragen werden kann alles, was sich hinschreiben lässt, bzw als schema-datantyp ausdrückbar ist; teilweise sogar bilder und sounds (als attachments)

es wird ja nur xml übers kabel geschickt

das problem: beim client und beim endpoint braucht man (meistens  ) übersetzer, die so einen xml-string in java-objekte verwandeln

muss man halt einstellen, macht jedes tool ein bissl anders usw. usf


----------



## Anselmus (17. Jun 2005)

dann müßte ich aber für alle objekte, die überben werden -und für die objekte in den objekten usw...- , einen parser schreiben, auf server und client seite... 

das das irgendwie geht, ist mir schon klar.

was ich sagen wollte, ist das man nicht einfach folgendes als service machen kann

```
public TollesObjekt gibtMirEinObjekt(...){...}
```

mit
	
	
	
	





```
public class TollesObjekt{
private nochEinAnderesObjekt; //mit anderen methoden als get und set
...
//andere methoden als get und set
...}
```


----------



## Bleiglanz (17. Jun 2005)

> dann müßte ich aber für alle objekte, die überben werden -und für die objekte in den objekten usw...- , einen parser schreiben, auf server und client seite...


genau dafür gibt es die diversen Toolboxen (Axis, JAX-RPC,  bei Websphere und Weblogic sind natürlich auch solche "WSDL-compiler" dabei)

von hand bist du da ziemlich aufgeschmissen, du könntest natürlich input und output selber als DOM-Objekte verwalten


----------



## Anselmus (17. Jun 2005)

falls das so "einfach" geht, bin ich leider noch nicht dahintergestiegen, wies geht. ich hab mit websphere sowie mit tomcat alles in eclipse und hab mir vom eclpise wizard den webservice erstellen lassen. der generiert auch ein wsdl file. aber in dem tauchen methoden von objekten, die übergeben werden, nicht auf...


----------

