The division in Client and Server parts can be how on the picture:
|Service interface||Descriptor for invocation, method signatuture with parameter und return type.|
|Service implementation||Implementation from the services on the server.|
|Crispy library||Library to easy communication with the services.|
|Communication library||Library for to useful technology.|
|Server (intern)||Server in the intranet. I can control the libraries.|
|Server (extern)||The server is in the internet (WWW), he is beyond our control.|
How is Crispy work? On the image you can see a graphical description of the work from Crispy. It is a classic Client - Server communication, where the data (paramter and the result) become marshalling and unmarshalling. For the marshalling, the most technology require, that the transfer object implement the interface java.io.Serializable. If it is not wanted, you can transform the transfer object to a simple data structure with the method net.sf.crispy.util.Converter.makeSimple on the client side. Before you call the service on the server side you make the original object structure from the client with the method net.sf.crispy.util.Converter.makeComplex.
Optional you can transform data on the client side, before they transfer (send to the server). On the server side transform back, before call the service method.
Complex Java Object are transform to the java.util.Hashtable. By the Hashtable are the keys the attribute names from the Java Object and the Hashtable values are the attribute values. Relationship are mapped to the java.util.Vector. A example you can see on the image.