Index: pom.xml =================================================================== --- pom.xml (revision 0) +++ pom.xml (working copy) @@ -0,0 +1,66 @@ + + 4.0.0 + org.apache.juddi + simple-create-tmodel-partition + Simple Create tModel Partition Example + 0.0.1-SNAPSHOT + Demonstrates the steps taken to Browse a UDDI directory + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.5 + 1.5 + + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.1.1 + + + test + + java + + + org.apache.juddi.example.browse.SimpleCreateTmodelPartition + + + + + + + + + + + org.apache.juddi + uddi-ws + 3.1.5-SNAPSHOT + + + org.apache.juddi + juddi-core + 3.1.5-SNAPSHOT + + + org.apache.juddi + juddi-client + 3.1.5-SNAPSHOT + + + + + Index: README.txt =================================================================== --- README.txt (revision 0) +++ README.txt (working copy) @@ -0,0 +1,18 @@ +This example contains one class: the SimplePublish.java. When +executed it will obtain an AuthToken and use it to publish +a Publisher, a Business and a Service. + +The easiest way to run execute the main of this class in from +your IDE. If your IDE has maven integration it should set up +the project class path for you, and you can simple run it from +there. + +You should see the following output being written to the console: + +root AUTHTOKEN = authtoken:0494e382-1ad3-4c52-8806-ae70a0ed37ad +myPub AUTHTOKEN = authtoken:bf973e5f-7361-4c57-92f7-7b499b886b6d +myBusiness key: uddi:juddi.apache.org:6f3e4e62-e483-48ff-a1b3-6855310505c6 +myService key: uddi:juddi.apache.org:549a9580-cd7b-4969-9b77-527ab9f8f261 + +However since the keys are being generated in this case your keys will differ. + Index: src/main/java/org/apache/juddi/example/browse/SimpleCreateTmodelPartition.java =================================================================== --- src/main/java/org/apache/juddi/example/browse/SimpleCreateTmodelPartition.java (revision 0) +++ src/main/java/org/apache/juddi/example/browse/SimpleCreateTmodelPartition.java (working copy) @@ -0,0 +1,229 @@ +/* + * Copyright 2001-2010 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.juddi.example.browse; + +import java.util.Properties; +import org.apache.juddi.ClassUtil; +import org.apache.juddi.v3.client.config.UDDIClientContainer; +import org.apache.juddi.v3.client.transport.Transport; +import org.uddi.api_v3.AuthToken; +import org.uddi.api_v3.BindingTemplates; +import org.uddi.api_v3.CategoryBag; +import org.uddi.api_v3.GetAuthToken; +import org.uddi.api_v3.KeyedReference; +import org.uddi.api_v3.Name; +import org.uddi.api_v3.SaveTModel; +import org.uddi.api_v3.TModel; +import org.uddi.api_v3.TModelDetail; +import org.uddi.v3_service.UDDIInquiryPortType; +import org.uddi.v3_service.UDDIPublicationPortType; +import org.uddi.v3_service.UDDISecurityPortType; + +/** + * An example for creating a key partition, aka key generator, aka 'special' + * tModel + * + * @author Alex O'Ree + */ +public class SimpleCreateTmodelPartition { + + private static UDDISecurityPortType security = null; + private static UDDIInquiryPortType inquiry = null; + private static UDDIPublicationPortType publish = null; + + /** + * This sets up the ws proxies using uddi.xml in META-INF + */ + public SimpleCreateTmodelPartition() { + try { + String clazz = UDDIClientContainer.getUDDIClerkManager(null). + getClientConfig().getUDDINode("default").getProxyTransport(); + Class transportClass = ClassUtil.forName(clazz, Transport.class); + if (transportClass != null) { + Transport transport = (Transport) transportClass. + getConstructor(String.class).newInstance("default"); + + security = transport.getUDDISecurityService(); + inquiry = transport.getUDDIInquiryService(); + publish = transport.getUDDIPublishService(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static void DisplayHelp() { + //TODO + } + + /** + * Main entry point + * + * @param args + */ + public static void main(String args[]) { + if (args.length == 1 && args[0].equalsIgnoreCase("help")) { + DisplayHelp(); + return; + } + SimpleCreateTmodelPartition sp = new SimpleCreateTmodelPartition(); + sp.Go(args); + } + + public void Go(String[] args) { + try { + Properties prop = ParseArgs(args); + if (prop.containsKey("AuthStyle")) { + //TODO, determine a way to pass parameters from the command line, hardcoded for now + //UDDI Token + //HTTP Username/Password (basic or digest) + //HTTP Client Cert + } + + + //Note: when creating a tModel Key Generator, aka Partition, you MUST follow the below pattern + //for jUDDI, the following is required + // Name + // CategoryBag/KR for the below fixed values + // a tModelKey that starts with uddi::keygenerator - recommended all lower case + + String key = GetAuthKey("uddi", "uddi", AuthStyle.UDDI_AUTH); + SaveTModel st = new SaveTModel(); + st.setAuthInfo(key); + TModel tm = new TModel(); + tm.setName(new Name()); + tm.getName().setValue("My Company's Keymodel generator"); + tm.getName().setLang("en"); + tm.setCategoryBag(new CategoryBag()); + KeyedReference kr = new KeyedReference(); + kr.setTModelKey("uddi:uddi.org:categorization:types"); + kr.setKeyName("uddi-org:keyGenerator"); + kr.setKeyValue("keyGenerator"); + tm.getCategoryBag().getKeyedReference().add(kr); + tm.setTModelKey("uddi:www.mycoolcompany.com:keygenerator"); + st.getTModel().add(tm); + TModelDetail saveTModel = publish.saveTModel(st); + System.out.println("Creation of Partition Success!"); + + tm = new TModel(); + tm.setName(new Name()); + tm.getName().setValue("My Company's Department"); + tm.getName().setLang("en"); + tm.setTModelKey("uddi:www.mycoolcompany.com:department"); + st.getTModel().add(tm); + saveTModel = publish.saveTModel(st); + System.out.println("Creation of tModel Department Success!"); + + tm = new TModel(); + tm.setName(new Name()); + tm.getName().setValue("My Company's Authentication Method"); + tm.getName().setLang("en"); + tm.setTModelKey("uddi:www.mycoolcompany.com:authmode"); + st.getTModel().add(tm); + saveTModel = publish.saveTModel(st); + System.out.println("Creation of tModel Auth Mode Success!"); + + + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * This function is useful for translating UDDI's somewhat complex data + * format to something that is more useful. + * + * @param bindingTemplates + */ + private void PrintBindingTemplates(BindingTemplates bindingTemplates) { + if (bindingTemplates == null) { + return; + } + for (int i = 0; i < bindingTemplates.getBindingTemplate().size(); i++) { + System.out.println("Binding Key: " + bindingTemplates.getBindingTemplate().get(i).getBindingKey()); + //TODO The UDDI spec is kind of strange at this point. + //An access point could be a URL, a reference to another UDDI binding key, a hosting redirector (which is + //esscentially a pointer to another UDDI registry) or a WSDL Deployment + //From an end client's perspective, all you really want is the endpoint. + + //So if you have a wsdlDeployment useType, fetch the wsdl and parse for the invocation URL + //If its hosting director, you'll have to fetch that data from uddi recursively until the leaf node is found + //Consult the UDDI specification for more information + + if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint() != null) { + System.out.println("Access Point: " + bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getValue() + " type " + bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType()); + } + + } + } + + private enum AuthStyle { + + HTTP_BASIC, + HTTP_DIGEST, + HTTP_NTLM, + UDDI_AUTH, + HTTP_CLIENT_CERT + } + + /** + * Gets a UDDI style auth token, otherwise, appends credentials to the ws + * proxies (not yet implemented) + * + * @param username + * @param password + * @param style + * @return + */ + private String GetAuthKey(String username, String password, AuthStyle style) { + try { + + GetAuthToken getAuthTokenRoot = new GetAuthToken(); + getAuthTokenRoot.setUserID(username); + getAuthTokenRoot.setCred(password); + + // Making API call that retrieves the authentication token for the 'root' user. + AuthToken rootAuthToken = security.getAuthToken(getAuthTokenRoot); + System.out.println("root AUTHTOKEN = " + rootAuthToken.getAuthInfo()); + return rootAuthToken.getAuthInfo(); + } catch (Exception ex) { + System.out.println("Could not authenticate with the provided credentials " + ex.getMessage()); + } + return null; + } + + /** + * Converts command line args into a simple property structure + * + * @param args + * @return + */ + private Properties ParseArgs(String[] args) { + + Properties p = new Properties(); + if (args == null) { + return p; + } + for (int i = 0; i < args.length; i++) { + if (args[i] != null && args[i].length() >= 3) { + p.put(args[i].split("=")[0], args[i].split("=")[1]); + } + } + return p; + } +} Index: src/main/resources/META-INF/uddi.xml =================================================================== --- src/main/resources/META-INF/uddi.xml (revision 0) +++ src/main/resources/META-INF/uddi.xml (working copy) @@ -0,0 +1,27 @@ + + + + 5000 + + + + + default + + + + + Main jUDDI node + + org.apache.juddi.v3.client.transport.JAXWSTransport + http://${serverName}:${serverPort}/juddiv3/services/custody-transfer + http://${serverName}:${serverPort}/juddiv3/services/inquiry + http://${serverName}:${serverPort}/juddiv3/services/publish + http://${serverName}:${serverPort}/juddiv3/services/security + http://${serverName}:${serverPort}/juddiv3/services/subscription + http://${serverName}:${serverPort}/juddiv3/services/subscription-listener + http://${serverName}:${serverPort}/juddiv3/services/juddi-api + + + +