Skip to main content
Jump to: navigation, search

Difference between revisions of "Publish ECF Remote Service As WebService"

Line 9: Line 9:
 
extssh:  :extssh:ecf1.osuosl.org:/home/cvs/ecf
 
extssh:  :extssh:ecf1.osuosl.org:/home/cvs/ecf
  
module:  
+
modules:  
 
plugins/org.eclipse.ecf.remoteservice.soap.host
 
plugins/org.eclipse.ecf.remoteservice.soap.host
 +
tests/org.eclipse.ecf.examples.tests.remoteservice.soap.host.hello
 
</pre>
 
</pre>
  
Line 28: Line 29:
 
IRemoteService remoteService = container.getContainerAdapter().getRemoteService(reference);
 
IRemoteService remoteService = container.getContainerAdapter().getRemoteService(reference);
  
 +
//Publish the ECF remote service as WS
 +
//Get the Soap Server container adapter
 
ISoapServerContainerAdapter soapContainerAdapter =  (ISoapServerContainerAdapter) ContainerFactory.getDefault().createContainer().getAdapter(ISoapServerContainerAdapter.class);
 
ISoapServerContainerAdapter soapContainerAdapter =  (ISoapServerContainerAdapter) ContainerFactory.getDefault().createContainer().getAdapter(ISoapServerContainerAdapter.class);
 +
 
//"hello" It will be the web service name and "*" the allowedMethod
 
//"hello" It will be the web service name and "*" the allowedMethod
 
soapContainerAdapter.deployRemoteServiceAsWebService("hello", "*", remoteService);
 
soapContainerAdapter.deployRemoteServiceAsWebService("hello", "*", remoteService);
  
 +
</source>
 +
 +
After it the web service can be consumed through the endpoint "http://localhost:8080/services/hello";
 +
 +
Or can be used this approach, which send more specific info:
 +
 +
<source lang="java">
 +
// Lookup IRemoteServiceReference
 +
IRemoteServiceReference[] serviceReferences = container.getContainerAdapter().getRemoteServiceReferences(targetID, IHello.class.getName(), null);
 +
 +
// Get remote service for reference
 +
if(serviceReferences == null ||serviceReferences.length == 0)
 +
throw new ECFException("The remote reference is not available : "+IHello.class.getName());
 +
 +
IRemoteServiceReference reference = serviceReferences[0];
 +
IRemoteService remoteService = container.getContainerAdapter().getRemoteService(reference);
 +
 +
//Publish the ECF remote service as WS
 +
//Get the Soap Server container adapter
 +
ISoapServerContainerAdapter soapContainerAdapter =  (ISoapServerContainerAdapter) ContainerFactory.getDefault().createContainer().getAdapter(ISoapServerContainerAdapter.class);
 +
 +
//Create properties to send to Axis which runs behind the scenes
 +
Map properties = new Properties();
 +
properties.put(ISoapServerConstants.SERVICE_NAME, "hello");
 +
//just allow the method hello
 +
properties.put(ISoapServerConstants.ALLOWED_METHODS, "hello");
 +
properties.put(ISoapServerConstants.PROVIDER, "java:RPC");
 +
properties.put(ISoapServerConstants.SCOPE, "Application");
  
 +
//Create the service description
 +
IServiceDescription description = new ServiceDescription(properties);
 +
 +
soapContainerAdapter.deployRemoteServiceAsWebService(description, remoteService);
 +
 
</source>
 
</source>
  
 
After it the web service can be consumed through the endpoint "http://localhost:8080/services/hello";
 
After it the web service can be consumed through the endpoint "http://localhost:8080/services/hello";

Revision as of 05:26, 20 June 2010

With ECF, the remote services can be published "automatically" as web service.

Below is an example of doing this for an existing remote service example available here.

The code is currently located on the ECF OSUOSL site. Here's the CVS information for this site:

anonymous:  :pserver:anonymous@ecf1.osuosl.org:/ecf
extssh:  :extssh:ecf1.osuosl.org:/home/cvs/ecf

modules: 
plugins/org.eclipse.ecf.remoteservice.soap.host
tests/org.eclipse.ecf.examples.tests.remoteservice.soap.host.hello

Publishing the remote service as WS

Below is a short description of how to publish as a web service the remote Hello Example Service defined here.

// Lookup IRemoteServiceReference
IRemoteServiceReference[] serviceReferences = container.getContainerAdapter().getRemoteServiceReferences(targetID, IHello.class.getName(), null);
 
// Get remote service for reference
if(serviceReferences == null ||serviceReferences.length == 0)
	throw new ECFException("The remote reference is not available : "+IHello.class.getName());
 
IRemoteServiceReference reference = serviceReferences[0];			
IRemoteService remoteService = container.getContainerAdapter().getRemoteService(reference);
 
//Publish the ECF remote service as WS
//Get the Soap Server container adapter
ISoapServerContainerAdapter soapContainerAdapter =  (ISoapServerContainerAdapter) ContainerFactory.getDefault().createContainer().getAdapter(ISoapServerContainerAdapter.class);
 
//"hello" It will be the web service name and "*" the allowedMethod
soapContainerAdapter.deployRemoteServiceAsWebService("hello", "*", remoteService);

After it the web service can be consumed through the endpoint "http://localhost:8080/services/hello";

Or can be used this approach, which send more specific info:

// Lookup IRemoteServiceReference
IRemoteServiceReference[] serviceReferences = container.getContainerAdapter().getRemoteServiceReferences(targetID, IHello.class.getName(), null);
 
// Get remote service for reference
if(serviceReferences == null ||serviceReferences.length == 0)
	throw new ECFException("The remote reference is not available : "+IHello.class.getName());
 
IRemoteServiceReference reference = serviceReferences[0];			
IRemoteService remoteService = container.getContainerAdapter().getRemoteService(reference);
 
//Publish the ECF remote service as WS
//Get the Soap Server container adapter
ISoapServerContainerAdapter soapContainerAdapter =  (ISoapServerContainerAdapter) ContainerFactory.getDefault().createContainer().getAdapter(ISoapServerContainerAdapter.class);
 
//Create properties to send to Axis which runs behind the scenes
Map properties = new Properties();
properties.put(ISoapServerConstants.SERVICE_NAME, "hello");
//just allow the method hello
properties.put(ISoapServerConstants.ALLOWED_METHODS, "hello");
properties.put(ISoapServerConstants.PROVIDER, "java:RPC");
properties.put(ISoapServerConstants.SCOPE, "Application");
 
//Create the service description
IServiceDescription description = new ServiceDescription(properties);
 
soapContainerAdapter.deployRemoteServiceAsWebService(description, remoteService);

After it the web service can be consumed through the endpoint "http://localhost:8080/services/hello";

Back to the top