Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info
iconfalse

Web Service is one of many well-defined extension points supported by the WSO2 Governance Registry. Read more on Supported Extension Points for a complete list of extension points supported by WSO2 Governance Registry.

This sample explains how to use the Governance API of WSO2 Governance Registry to create a simple webservice which is capable of looking up service endpoints. WSO2 Governance Registry contains an Apache Axis2 based runtime as a part of the WSO2 Carbon Framework. You can deploy web services on this runtime, which can be used as internal endpoints to receive notifications generated on the WSO2 Governance Registry. We will be reusing the code of the Handler Sample in this example. This sample requires Apache Maven. See Installing Apache Maven on Windows or Installing Apache Maven on Linux. This . See Installation Prerequisites for links on how to install it. This example also explains how to use soapUI, which is a very useful tool for testing web services.

...

2. Add the following dependency to your POM file:

Info
titleTip

Project Object Model (POM) is an XML representation of a Maven project held in a file named pom.xml. You should find POM file by the name pom.xml inside GREG_HOME/ samples/handler/src.

Code Block
languagehtml/xml
<dependency>
    <groupId>org.wso2.carbon</groupId>
    <artifactId>org.wso2.carbon.governance.api</artifactId>
    <version>4.02.1<0</version>
</dependency>

3. Add the following plugin to your POM file:

...

Code Block
languagehtml/xml
<!--Fragment-Host>org.wso2.carbon.registry.core</Fragment-Host-->
Tip
Info
title

The Fragment-Host Bundle Manifest Header declares this sample bundle to be a Fragment of the Registry Kernel. This would mean that the sample handler bundle will become an extension to the Registry Kernel. However, bundles containing services.xml files would not be deployed until the Apache Axis2 runtime has been initialized. Due to OSGi bundle start-up order, it is required that the Registry Kernel starts up before the Apache Axis2 runtime.

Since the Fragment now also being an extension to the Registry Kernel, the combination of this bundle and the Registry Kernel (plus any other fragments) should start up before the Apache Axis2 runtime. But, due to the bundle not getting deployed until the Apache Axis2 runtime has been initialized, it will create a deadlock situation. Due to this reason, we have to get rid of the Fragment-Host header.

5. Add the following content to Create a file named services.xml in GREG_HOME/samples/handler/src/resources/META-INFINF and add the following content:

Code Block
languagehtml/xml
<serviceGroup>
    <service name="EndpointLookupService" scope="transportsession">
        <transports>
            <transport>http</transport>
        </transports>
        <parameter name="ServiceClass" locked="false">
            org.wso2.carbon.registry.samples.services.EndpointLookupService
        </parameter>
    </service>
</serviceGroup>

...

Code Block
languagejava
package org.wso2.carbon.registry.samples.services;
 
import org.wso2.carbon.governance.api.exception.GovernanceException;
import org.wso2.carbon.governance.api.services.ServiceFilter;
import org.wso2.carbon.governance.api.services.ServiceManager;
import org.wso2.carbon.governance.api.services.dataobjects.Service;
import org.wso2.carbon.registry.core.Registry;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
 
import java.util.LinkedList;
import java.util.List;
 
public class EndpointLookupService {
 
    private Registry governanceRegistry;
 
    public EndpointLookupService() {
        try {
            governanceRegistry = EndpointLookupServiceComponent.getRegistryService()
                    .getGovernanceSystemRegistry();
        } catch (RegistryException e) {
            e.printStackTrace();
        }
    }
 
    public String[] getEndpoints(final String serviceName, final String serviceNamespace,
                                 final String version, final String environment)
            throws GovernanceException, RegistryException {
        ServiceManager manager = new ServiceManager(governanceRegistry);
        Service[] services = manager.findServices(new ServiceFilter() {
            public boolean matches(Service service) throws GovernanceException {
                return serviceName.equals(service.getQName().getLocalPart()) &&
                        (serviceNamespace == null || serviceNamespace.length() == 0 ||
                                serviceNamespace.equals(service.getQName().getNamespaceURI())) &&
                        (version == null || version.length() == 0 ||
                                version.equals(service.getAttribute("overview_version")));
            }
        });
        if (services != null && services.length > 0) {
            List<String> endpoints = new LinkedList<String>();
            for (Service service : services) {
                String[] entries = service.getAttributes("endpoints_entry");
                if (entries != null && entries.length > 0) {
                    for (String entry : entries) {
                        int idx = entry.indexOf(":");
                        if (entry.substring(0, idx).equals(environment)) {
                            endpoints.add(entry.substring(idx + 1));
                        }
                    }
                }
            }
            return endpoints.toArray(new String[endpoints.size()]);
        }
        return new String[0];
    }
}

...

Code Block
mvn clean install
Note
Info
title

The command mvn clean install will trigger an Apache Maven Build in your command line. This requires you having installed Apache Maven. See Installing Apache Maven on Windows or Installing Apache Maven on Linuxrequires you having installed Apache Maven. See Installation Prerequisites for links on how to install it.

A successful run of Apache Maven will generate a report similar to the following:

...

9. Copy the GREG_HOME/ samples/handler/src/target/org.wso2.carbon.registry.samples.handler-4.56.0.jar into GREG_HOME/repository/components/dropins.

10. Start the server and observe the command prompt. See  See Running the Product on Windows or Installing on Linux for more information.

Image Removed

Running the Sample

1. After the sample has been successfully deployed and the server has started, open a browser Window and type the following URL:

Code Block
http://localhost:9763/services/EndpointLookupService/getEndpoints?serviceName=SimpleStockQuoteService&environment=Dev
Note
Info
title

In this step, we only have passed in the parameters serviceName and environment. This sample service also supports serviceNamespace and version as optional parameters.

...

4. Fill in the following payload as the request:. At least one endpoint must exist for the Dev environment in order to receive a response.

Code Block
languagehtml/xml
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ser="http://services.samples.registry.carbon.wso2.org">
   <soap:Header/>
   <soap:Body>
      <ser:getEndpoints>
         <ser:serviceName>SimpleStockQuoteService</ser:serviceName>
         <ser:environment>Dev</ser:environment>
      </ser:getEndpoints>
   </soap:Body>
</soap:Envelope>

...