// PublishTwoServices.java
//
// Generated: Mon Feb 10 12:25:36 GMT 2003
// For details see http://industry.ebi.ac.uk/soaplab
//
import org.uddi4j.*;
import org.uddi4j.client.*;
import org.uddi4j.datatype.*;
import org.uddi4j.datatype.assertion.*;
import org.uddi4j.datatype.binding.*;
import org.uddi4j.datatype.business.*;
import org.uddi4j.datatype.service.*;
import org.uddi4j.datatype.tmodel.*;
import org.uddi4j.request.*;
import org.uddi4j.response.*;
import org.uddi4j.util.*;
import java.net.URL;
import java.util.Vector;
import java.util.Hashtable;
/**
* A class for publishing services in a UDDI registry using UDDI4J API.
*
* For details see Soaplab documentation.
*/
public class PublishTwoServices {
// names of possible command-line parameters
static final String USERID = "-USERID";
static final String PASSWORD = "-PASSWORD";
static final String PUBLISHURL = "-PUBLISHURL";
static final String INQUIRYURL = "-INQUIRYURL";
static final String PROVIDER = "-PROVIDER";
static final String TAXONOMY = "-TAXONOMY";
// names of service attributes
static final String SRV_NAME = "1";
static final String SRV_URL = "2";
static final String SRV_WSDL_URL = "3";
static final String SRV_VERSION = "4";
static final String SRV_DESCRIPTION = "5";
static final String SRV_TYPE = "6";
static final String SRV_PROVIDER = "7";
static Hashtable knownParams;
static Hashtable[] s = new Hashtable [2];
static boolean unpublish = false;
static boolean list = false;
/**************************************************************************
* static initializer
**************************************************************************/
static {
knownParams = new Hashtable();
//
// parameter name default value
// -------------- -------------
knownParams.put (USERID, "anonymous");
knownParams.put (PASSWORD, "");
knownParams.put (PUBLISHURL, "http://localhost:8080/publish");
knownParams.put (INQUIRYURL, "http://localhost:8080/inquiry");
knownParams.put (PROVIDER, "AppLab/cembalo/Soaplab");
knownParams.put (TAXONOMY, "unknown taxonomy name");
//
// one hashtable (with service attributes) per service
//
s[0] = new Hashtable();
s[0].put (SRV_NAME, "seqret");
s[0].put (SRV_URL, "http://industry.ebi.ac.uk/soap/soaplab/edit::seqret");
s[0].put (SRV_WSDL_URL, "http://industry.ebi.ac.uk/soap/soaplab/edit::seqret?wsdl");
s[0].put (SRV_VERSION, "2.6.0");
s[0].put (SRV_DESCRIPTION, "Reads and writes (returns) sequences");
s[0].put (SRV_TYPE, "Edit");
s[1] = new Hashtable();
s[1].put (SRV_NAME, "showdb");
s[1].put (SRV_URL, "http://industry.ebi.ac.uk/soap/soaplab/display::showdb");
s[1].put (SRV_WSDL_URL, "http://industry.ebi.ac.uk/soap/soaplab/display::showdb?wsdl");
s[1].put (SRV_VERSION, "2.6.0");
s[1].put (SRV_DESCRIPTION, "Displays information on the currently available databases");
s[1].put (SRV_TYPE, "Display, Information");
}
/*************************************************************************
* Return a help text...
*************************************************************************/
public static String getUsage() {
return
"Usage:\n" +
" java PublishTwoServices -h[elp]\n" +
"\n" +
" To publish (register) services:\n" +
" java PublishTwoServices [-userid ] [-password ]\n" +
" [-inquiryurl ] [-publishurl ]\n" +
" [-provider ] [-taxonomy ]\n" +
"\n" +
" To unpublish (unregister) services:\n" +
" java PublishTwoServices -u[npublish]\n" +
" [-userid ] [-password ]\n" +
" [-inquiryurl ] [-publishurl ]\n" +
" [-provider ]\n" +
"\n" +
" To list all services registrable/unregitrabvle by this class:\n" +
" java PublishTwoServices -l[ist]\n" +
"\n" +
"where:\n" +
" inquiry_url ... a URL of a UDDI server for queries\n" +
" (default: http://localhost:8080/inquiry)\n" +
" publish_url ... a URL of a UDDI server for publishing\n" +
" (default: http://localhost:8080/publish)\n" +
" userid ... a user name used to connect to a UDDI server\n" +
" (default: anonymous)\n" +
" password ... a passord for the user above\n" +
" (default: )\n" +
" provider ... a name of a provider of all services\n" +
" registered byte this class\n" +
" taxonomy ... a name of a taxonomy used for registration\n" +
" of all services byte this class\n" +
"\n";
}
/**************************************************************************
* Read parameters from the command-line arguments, combine them with
* the default parameters in 'knownParams'. It changes 'knownParams'.
**************************************************************************/
static public void extractParams (String[] params) {
// first look for several no-value options
for (int i = 0; i < params.length; i++) {
if (params[i].equals ("-h") || params[i].equals ("-help")) {
System.out.print (getUsage());
System.exit (0);
}
if (params[i].equals ("-l") || params[i].equals ("-list")) {
list = true;
return;
}
if (params[i].equals ("-u") || params[i].equals ("-unpublish")) {
unpublish = true;
}
}
// then for all one-value parameters
for (int i = 0; i < params.length - 1; i++) {
String name = params[i].toUpperCase();
if (knownParams.containsKey (name)) {
knownParams.put (name, params [i+1]);
i++;
}
}
}
/**************************************************************************
* Main entry
**************************************************************************/
public static void main (String[] args)
throws Exception {
extractParams (args);
// just list all service names
if (list) {
for (int i = 0; i < 2; i++)
System.out.println (s[i].get (SRV_NAME));
System.exit (0);
}
// do the real stuff
UDDIProxy proxy = new UDDIProxy (new URL ((String)knownParams.get (INQUIRYURL)),
new URL ((String)knownParams.get (PUBLISHURL)));
AuthToken token = proxy.get_authToken ((String)knownParams.get (USERID),
(String)knownParams.get (PASSWORD));
/* Check whether the business (service provider) exists in */
/* UDDI and, if not, create one */
String businessKey = ensureBusinessExists (proxy, token);
/* Check whether the given taxonomy of services exists in */
/* UDDI and, if not, create one */
String taxonomy = ensureTaxonomyExists (proxy, token);
/* Publish/Unpublish all services */
String srvName;
String srvVersion;
if (unpublish) {
for (int i = 0; i < 2; i++) {
srvName = (String)s[i].get (SRV_NAME);
srvVersion = (String)s[i].get (SRV_VERSION);
System.out.println ("Unregistering " + srvName + "_" + srvVersion);
unpublishService (proxy, token, businessKey, srvName, srvVersion);
}
} else {
for (int i = 0; i < 2; i++) {
srvName = (String)s[i].get (SRV_NAME);
System.out.println ("Registering " + srvName);
publishService (proxy, token, businessKey, taxonomy, s[i]);
}
}
}
//
public static String ensureBusinessExists (UDDIProxy proxy, AuthToken token)
throws Exception {
/* Find all businesses matching the service provider's name */
FindQualifiers query = new FindQualifiers ();
Vector qualifiers = new Vector();
qualifiers.add (new FindQualifier ("exactNameMatch"));
query.setFindQualifierVector (qualifiers);
BusinessList businesses = proxy.find_business ((String)knownParams.get (PROVIDER),
query, 100);
BusinessInfos infoList = businesses.getBusinessInfos ();
if (infoList.size () > 0) {
return infoList.get (0).getBusinessKey ();
}
/* If there are no exact matches, the business (service provider) is */
/* not registered, so create and publish the business details */
BusinessEntity providerEntity = new BusinessEntity ("", (String)knownParams.get (PROVIDER));
Vector entities = new Vector ();
entities.addElement (providerEntity);
/* Extract the key from the newly published business so that we can */
/* publish our service */
BusinessDetail providerDetails = proxy.save_business (token.getAuthInfoString (), entities);
Vector businessEntities = providerDetails.getBusinessEntityVector();
BusinessEntity returnedBusinessEntity = (BusinessEntity) businessEntities.elementAt (0);
return returnedBusinessEntity.getBusinessKey ();
}
public static String ensureTaxonomyExists (UDDIProxy proxy, AuthToken token)
throws Exception {
/* Find all taxonomies matching the given taxonomy */
FindQualifiers query = new FindQualifiers ();
Vector qualifiers = new Vector ();
qualifiers.add (new FindQualifier ("exactNameMatch"));
query.setFindQualifierVector (qualifiers);
TModelList models = proxy.find_tModel ((String)knownParams.get (TAXONOMY),
query, 100);
TModelInfos infoList = models.getTModelInfos ();
if (infoList.size () > 0) {
return infoList.get (0).getTModelKey ();
}
/* If there are no exact matches, the taxonomy is not */
/* registered, so create and publish the business details */
TModel taxonomyDetail = new TModel ("", (String)knownParams.get (TAXONOMY));
Vector entities = new Vector ();
entities.addElement (taxonomyDetail);
/* Extract the key from the newly published business so that we can */
/* publish our service */
TModelDetail taxonomyDetails = proxy.save_tModel (token.getAuthInfoString (), entities);
Vector tModelEntities = taxonomyDetails.getTModelVector();
TModel returnedTModelEntity = (TModel) tModelEntities.elementAt (0);
return returnedTModelEntity.getTModelKey ();
}
//
public static void publishService (UDDIProxy proxy, AuthToken token,
String businessKey, String taxonomy,
Hashtable attrs)
throws Exception {
/* If service is already published, don't publish again */
FindQualifiers query = new FindQualifiers ();
Vector qualifiers = new Vector();
qualifiers.add (new FindQualifier ("exactNameMatch"));
query.setFindQualifierVector (qualifiers);
ServiceList servicesList = proxy.find_service (businessKey, (String)attrs.get (SRV_NAME) + "_" +
(String)attrs.get (SRV_VERSION), query, 100);
ServiceInfos infoList = servicesList.getServiceInfos ();
if (infoList.size () > 0) {
return;
}
/* Construct a service description */
BusinessService businessService = new BusinessService ();
businessService.setBusinessKey (businessKey);
businessService.setDefaultNameString ((String)attrs.get (SRV_NAME) + "_" +
(String)attrs.get (SRV_VERSION),
"GB");
TModelInstanceDetails bindingTModels = new TModelInstanceDetails ();
AccessPoint accessURL = new AccessPoint ((String)attrs.get (SRV_URL), "http");
TModelInstanceInfo interfaceInfo = new TModelInstanceInfo ();
InstanceDetails interfaceDetail = new InstanceDetails ();
OverviewDoc overviewWSDL = new OverviewDoc ();
overviewWSDL. setOverviewURL ((String)attrs.get (SRV_WSDL_URL));
interfaceDetail.setOverviewDoc (overviewWSDL);
interfaceInfo. setInstanceDetails (interfaceDetail);
bindingTModels. add (interfaceInfo);
BindingTemplates bindings = new BindingTemplates ();
BindingTemplate endpointBinding = new BindingTemplate ("", bindingTModels);
endpointBinding.setAccessPoint (accessURL);
bindings. add (endpointBinding);
businessService.setBindingTemplates (bindings);
CategoryBag classifications = new CategoryBag ();
KeyedReference category = new KeyedReference ("Type", (String)attrs.get (SRV_TYPE), taxonomy);
classifications.add (category);
businessService.setCategoryBag (classifications);
businessService.setDefaultDescriptionString ((String)attrs.get (SRV_DESCRIPTION));
/* Publish service */
Vector services = new Vector ();
services.addElement (businessService);
proxy.save_service (token.getAuthInfoString (), services);
}
//
public static void unpublishService (UDDIProxy proxy, AuthToken token, String businessKey,
String serviceName, String serviceVersion)
throws Exception {
/* Find all services belonging to this provider and matching the service name */
FindQualifiers query = new FindQualifiers ();
Vector qualifiers = new Vector();
qualifiers.add (new FindQualifier ("exactNameMatch"));
query.setFindQualifierVector (qualifiers);
ServiceList services = proxy.find_service (businessKey, serviceName + "_" + serviceVersion, query, 100);
ServiceInfos infoList = services.getServiceInfos ();
/* If there are no services of this name, then there is nothing to unpublish */
if (infoList.size () == 0) {
return;
}
/* If there is one, delete it */
String serviceKey = infoList.get (0).getServiceKey ();
proxy.delete_service (token.getAuthInfoString (), serviceKey);
}
}