Package eu.planets_project.tb.impl.services.util

Source Code of eu.planets_project.tb.impl.services.util.DiscoveryUtils

/*******************************************************************************
* Copyright (c) 2007, 2010 The Planets Project Partners.
*
* All rights reserved. This program and the accompanying
* materials are made available under the terms of the
* Apache License, Version 2.0 which accompanies
* this distribution, and is available at
* http://www.apache.org/licenses/LICENSE-2.0
*
*******************************************************************************/
/**
*
*/
package eu.planets_project.tb.impl.services.util;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import eu.planets_project.services.PlanetsService;
import eu.planets_project.services.characterise.Characterise;
import eu.planets_project.services.datatypes.ServiceDescription;
import eu.planets_project.services.identify.Identify;
import eu.planets_project.services.migrate.Migrate;
import eu.planets_project.services.validate.Validate;
import eu.planets_project.services.view.CreateView;

/**
* This class provides some utilities for those who wish to consume Planets Service.
*
* @author <a href="mailto:Andrew.Jackson@bl.uk">Andy Jackson</a>
*
*/
public class DiscoveryUtils {
    /** */
    private static final Log log = LogFactory.getLog(DiscoveryUtils.class);
    
    /**
     * Attempts to determine the service description for the given WSDL.
     *
     * @param wsdlLocation
     * @return
     */
    public static ServiceDescription getServiceDescription( URL wsdlLocation ) {
        try {
            PlanetsServiceExplorer se = new PlanetsServiceExplorer(wsdlLocation);
            PlanetsService s = (PlanetsService) createServiceObject(se.getServiceClass(), wsdlLocation);
            if( s == null ) return null;
            ServiceDescription sd = s.describe();
        return sd;
        } catch( Exception e ) {
            log.error("Runtime exception while inspecting WSDL: "+wsdlLocation+" : "+e);
            return null;
        }
    }
   
    /**
     * A generic method that can be used as a short-cut for instanciating Planets services.
     *
     * e.g. Migrate m = DiscoveryUtils.createServiceClass( Migrate.class, wsdlLocation);
     *
     * If the given WSDL points to one of the older 'Basic' service forms, it will be wrapped up
     * to present the new API and hide the old one.
     *
     * @param <T> Any recognised service class (extends PlanetsService).
     * @param serviceClass The class of the Planets service to instanciate, e.g. Identify.class
     * @param wsdlLocation The location of the WSDL.
     * @return A new instance of the the given class, wrapping the referenced service.
     */
    public static <T> T createServiceObject( Class<T> serviceClass, URL wsdlLocation ) {
        PlanetsServiceExplorer se = new PlanetsServiceExplorer(wsdlLocation);
        Service service;
        if( serviceClass == null || wsdlLocation == null ) return null;
       
            service = Service.create(wsdlLocation, se.getQName());
            return (T) service.getPort(serviceClass);
    }
   
    /**
     * Determine the high-level service class for this service type.
     * e.g. the Basic forms are wrapped up in higher level forms.
     * @return
     */
    public static Class<? extends PlanetsService> getServiceWrapperClass( QName qName ) {

        // Unqualified services cannot be dealt with:
        if (qName == null)
            return null;

        // Determine class of service:
        if (qName.equals(Migrate.QNAME)) {
            return Migrate.class;
           
        } else if (qName.equals(Identify.QNAME)) {
            return Identify.class;
           
        } else if (qName.equals(Validate.QNAME)) {
            return Validate.class;
           
        } else if (qName.equals(Characterise.QNAME) ) {
            return Characterise.class;
           
        } else if (qName.equals(CreateView.QNAME) ) {
            return CreateView.class;
           
        }

        // Otherwise, this is and unrecognised service:
        return null;
    }
   
   
    /**
     *
     * @param args
     * @throws MalformedURLException
     */
    public static void main(String [] args) throws MalformedURLException {
        // If called from the command line, parse the argument as a WSDL URL.
        if( args.length == 1 ) {
            URL wsdl  = new URL(args[0]);
            ServiceDescription sd = DiscoveryUtils.getServiceDescription(wsdl);
            System.out.print(sd.toXmlFormatted());
            return;
        }
        // Otherwise, do a simple test:
        URL wsdls[] = new URL[] {
                new URL("http://127.0.0.1:8080/pserv-if-simple/AlwaysSaysValidService?wsdl"),
                new URL("http://127.0.0.1:8080/pserv-if-simple/PassThruMigrationService?wsdl"),
                new URL("http://127.0.0.1:8080/pserv-pa-sanselan/SanselanMigrate?wsdl")
                };
        for( URL wsdl : wsdls ) {
            ServiceDescription sd = DiscoveryUtils.getServiceDescription(wsdl);
            System.out.println(" Description: "+sd.toXmlFormatted());
        }
    }
   
}
TOP

Related Classes of eu.planets_project.tb.impl.services.util.DiscoveryUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.