Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Publish ECF Remote Service As WebService
Revision as of 05:26, 20 June 2010 by Mayworm.gmail.com (Talk | contribs)
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";