| Version 2 (modified by lauer, 19 years ago) (diff) |
|---|
Using own concete types
[|Special case: Using own types in Collections and Maps.] Java's type erasure in action!
Server side
public interface Api
{
Param returnParam();
void passAsParameter( Param p );
}
public class Impl implements Api
{
public Param returnParam() { return new ParamImpl( ... ); }
void passAsParameter( Param p ) {}
}
To use type Param, we have to make it XML-RPC compliant. We use java annotations and user-defined conversion operations to do this.
- the @XmlRpc annotation declares that type Param uses XML-RPC type ARRAY as transport representation
- The interface {{{Convertable}} declares what specific java type is used for transfer via XML-RPC
- toXmlRpc converts an instance of type Param into its XML-RPC representation
- the constructor creates an instance of type Param back from it's XML-RPC representation
@XmlRpc( type=Type.ARRAY )
public class Param
implements Convertable<Collection<String>>
{
public Param( Collection<String> xmlRpcRepresentation ) { ... }
public Collection<String> toXmlRpc() { return ... }
}
Now our type ist XML-RPC compliant! We can register the implementation as usual...
WebServer xmlRpcServer = new WebServer( port ); xmlRpcServer.addHandler( "handlerId", XmlRpcHandlerFactory.createHandlerFor( new Impl() ); xmlRpcServer.start();
Client Side
Our client can be used without any extra statements:
Api remote_api = XmlRpc.createClient( Api.class, "handlerId", host, port ); Param p = remote_api.returnParam(); Param asParam = ...; remote_api.passAsParameter( asParam ); ...
