Friday 29 July 2011

Search a registry for organizations that offer services based on technical specifications that take the form of WSDL documents

 
 
/*
 * Copyright 2007 Sun Microsystems, Inc.
 * All rights reserved.  You may not modify, use,
 * reproduce, or distribute this software except in
 * compliance with  the terms of the License at:
 * http://developer.sun.com/berkeley_license.html
 */

/*
Copyright 1994-2006 Sun Microsystems, Inc. All Rights Reserved.
Redistribution and use in source and binary forms, with or without modification, 
are permitted provided that the following conditions are met:
 

* Redistribution of source code must retain the above copyright notice, 
this list of conditions and the following disclaimer.

* Redistribution in binary form must reproduce the above copyright notice, 
this list of conditions and the following disclaimer in the documentation 
and/or other materials provided with the distribution.

 
Neither the name of Sun Microsystems, Inc. or the names of contributors may be 
used to endorse or promote products derived from this software without specific 
prior written permission.
 
This software is provided "AS IS," without a warranty of any kind. ALL EXPRESS OR 
IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY 
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY 
EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY 
DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS 
SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY 
LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, 
INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF 
LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF 
SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 
You acknowledge that this software is not designed, licensed or intended for use in 
the design, construction, operation or maintenance of any nuclear facility. 
*/


import javax.xml.registry.Connection;
import javax.xml.registry.ConnectionFactory;
import javax.xml.registry.RegistryService;
import javax.xml.registry.BusinessLifeCycleManager;
import javax.xml.registry.LifeCycleManager;
import javax.xml.registry.BusinessQueryManager;
import javax.xml.registry.BulkResponse;
import javax.xml.registry.JAXRException;
import javax.xml.registry.infomodel.RegistryObject;
import javax.xml.registry.infomodel.Organization;
import javax.xml.registry.infomodel.ClassificationScheme;
import javax.xml.registry.infomodel.Classification;
import javax.xml.registry.infomodel.Concept;
import javax.xml.registry.infomodel.ExternalLink;
import java.util.ResourceBundle;
import java.util.Properties;
import java.util.Collection;
import java.util.ArrayList;


/**
 * The JAXRQueryByWSDLClassification class consists of a main
 * method, a makeConnection method, an executeQuery method, and
 * some private helper methods. It searches a registry for
 * information about organizations that offer services based
 * on technical specifications that take the form of WSDL
 * documents. Use the query-string argument to limit the search
 * to certain specification concept names.
 */
public class JAXRQueryByWSDLClassification {
    Connection connection = null;

    public JAXRQueryByWSDLClassification() {
    }

    public static void main(String[] args) {
        ResourceBundle bundle = ResourceBundle.getBundle("JAXRExamples");

        String queryURL = bundle.getString("query.url");
        String publishURL = bundle.getString("publish.url");

        if (args.length < 1) {
            System.out.println(
                    "Argument required: " "-Dquery-string=<value>");
            System.exit(1);
        }

        String queryString = args[0];
        System.out.println("Query string is " + queryString);

        JAXRQueryByWSDLClassification jq = new JAXRQueryByWSDLClassification();

        jq.makeConnection(queryURL, publishURL);

        jq.executeQuery(queryString);
    }

    /**
     * Establishes a connection to a registry.
     *
     @param queryUrl        the URL of the query registry
     @param publishUrl        the URL of the publish registry
     */
    public void makeConnection(
        String queryUrl,
        String publishUrl) {
        /*
         * Specify proxy information in case you
         *  are going beyond your firewall.
         */
        ResourceBundle bundle = ResourceBundle.getBundle("JAXRExamples");
        String httpProxyHost = bundle.getString("http.proxyHost");
        String httpProxyPort = bundle.getString("http.proxyPort");
        String httpsProxyHost = bundle.getString("https.proxyHost");
        String httpsProxyPort = bundle.getString("https.proxyPort");

        /*
         * Define connection configuration properties.
         * For simple queries, you need the query URL.
         * To use a life cycle manager, you need the publish URL.
         */
        Properties props = new Properties();
        props.setProperty("javax.xml.registry.queryManagerURL", queryUrl);
        props.setProperty("javax.xml.registry.lifeCycleManagerURL", publishUrl);
        props.setProperty("com.sun.xml.registry.http.proxyHost", httpProxyHost);
        props.setProperty("com.sun.xml.registry.http.proxyPort", httpProxyPort);
        props.setProperty(
                "com.sun.xml.registry.https.proxyHost",
                httpsProxyHost);
        props.setProperty(
                "com.sun.xml.registry.https.proxyPort",
                httpsProxyPort);

        try {
            // Create the connection, passing it the 
            // configuration properties
            ConnectionFactory factory = ConnectionFactory.newInstance();
            factory.setProperties(props);
            connection = factory.createConnection();
            System.out.println("Created connection to registry");
        catch (Exception e) {
            e.printStackTrace();

            if (connection != null) {
                try {
                    connection.close();
                catch (JAXRException je) {
                }
            }
        }
    }

    /**
     * Searches for organizations using a WSDL
     * classification and displays data about them.
     *
     @param qString        the string argument
     */
    public void executeQuery(String qString) {
        RegistryService rs = null;
        BusinessQueryManager bqm = null;
        BusinessLifeCycleManager blcm = null;

        try {
            // Get registry service and managers
            rs = connection.getRegistryService();
            bqm = rs.getBusinessQueryManager();
            blcm = rs.getBusinessLifeCycleManager();
            System.out.println(
                    "Got registry service, query "
                    "manager, and lifecycle manager");

            ResourceBundle bundle = ResourceBundle.getBundle("JAXRExamples");

            /*
             * Find the uddi-org:types classification scheme defined
             * by the UDDI specification, using well-known key id.
             */
            String uuid_types = "uuid:C1ACF26D-9672-4404-9D70-39B756E62AB4";
            ClassificationScheme uddiOrgTypes = (ClassificationSchemebqm
                .getRegistryObject(
                        uuid_types,
                        LifeCycleManager.CLASSIFICATION_SCHEME);

            // Define name pattern
            Collection<String> namePatterns = new ArrayList<String>();
            namePatterns.add("%" + qString + "%");

            /*
             * Create a classification, specifying the scheme
             *  and the taxonomy name and value defined for WSDL
             *  documents by the UDDI specification.
             */
            Classification wsdlSpecClassification = blcm.createClassification(
                        uddiOrgTypes,
                        blcm.createInternationalString("wsdlSpec"),
                        "wsdlSpec");

            Collection<Classification> classifications = new ArrayList<Classification>();
            classifications.add(wsdlSpecClassification);

            // Find concepts
            BulkResponse br = bqm.findConcepts(
                        null,
                        namePatterns,
                        classifications,
                        null,
                        null);
            Collection specConcepts = br.getCollection();

            // Display information about the concepts found
            int numConcepts = 0;

            if (specConcepts.isEmpty()) {
                System.out.println("No WSDL specification concepts found");
            else {
                for (Object sc : specConcepts) {
                    numConcepts++;

                    Concept concept = (Conceptsc;

                    String name = getName(concept);

                    Collection links = concept.getExternalLinks();

                    System.out.println(
                            "\nSpecification Concept:\n\tName: " + name
                            "\n\tKey: " + getKey(concept)
                            "\n\tDescription: " + getDescription(concept));

                    if (links.size() 0) {
                        ExternalLink link = (ExternalLinklinks.iterator()
                                                                .next();
                        System.out.println(
                                "\tURL of WSDL document: '"
                                + link.getExternalURI() "'");
                    }

                    // Find organizations that use this concept
                    Collection<Concept> specConcepts1 = new ArrayList<Concept>();
                    specConcepts1.add(concept);

                    br = bqm.findOrganizations(
                                null,
                                null,
                                null,
                                specConcepts1,
                                null,
                                null);

                    Collection orgs = br.getCollection();

                    // Display information about organizations
                    if (!(orgs.isEmpty())) {
                        System.out.println(
                                "Organizations using the '" + name
                                "' WSDL Specification:");
                    else {
                        System.out.println(
                                "No Organizations using the '" + name
                                "' WSDL Specification");
                    }

                    for (Object o : orgs) {
                        Organization org = (Organizationo;
                        System.out.println(
                                "\tName: " + getName(org"\n\tKey: "
                                + getKey(org"\n\tDescription: "
                                + getDescription(org));
                    }
                }
            }

            System.out.println("Found " + numConcepts + " concepts");
        catch (Exception e) {
            e.printStackTrace();
        finally {
            // At end, close connection to registry
            if (connection != null) {
                try {
                    connection.close();
                catch (JAXRException je) {
                }
            }
        }
    }

    /**
     * Returns the name value for a registry object.
     *
     @param ro        a RegistryObject
     @return                the String value
     */
    private String getName(RegistryObject rothrows JAXRException {
        try {
            return ro.getName()
                     .getValue();
        catch (NullPointerException npe) {
            return "No Name";
        }
    }

    /**
     * Returns the description value for a registry object.
     *
     @param ro        a RegistryObject
     @return                the String value
     */
    private String getDescription(RegistryObject rothrows JAXRException {
        try {
            return ro.getDescription()
                     .getValue();
        catch (NullPointerException npe) {
            return "No Description";
        }
    }

    /**
     * Returns the key id value for a registry object.
     *
     @param ro        a RegistryObject
     @return                the String value
     */
    private String getKey(RegistryObject rothrows JAXRException {
        try {
            return ro.getKey()
                     .getId();
        catch (NullPointerException npe) {
            return "No Key";
        }
    }
}



//////////////////////////////
//
//    File: JAXRExamples.properties
//
//////////////////////////////
## Registry Server:
query.url=http://localhost:8080/RegistryServer/
publish.url=http://localhost:8080/RegistryServer/
registry.username=testuser
registry.password=testuser
## HTTP and HTTPS proxy host and port

No comments:

Post a Comment