Index: simple-browser/pom.xml =================================================================== --- simple-browser/pom.xml (revision 0) +++ simple-browser/pom.xml (working copy) @@ -0,0 +1,66 @@ + + 4.0.0 + org.apache.juddi + simple-browse + Simple Browser 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.SimpleBrowse + + + + + + + + + + + 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: simple-browser/README.txt =================================================================== --- simple-browser/README.txt (revision 0) +++ simple-browser/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: simple-browser/src/main/java/org/apache/juddi/example/browse/SimpleBrowse.java =================================================================== --- simple-browser/src/main/java/org/apache/juddi/example/browse/SimpleBrowse.java (revision 0) +++ simple-browser/src/main/java/org/apache/juddi/example/browse/SimpleBrowse.java (working copy) @@ -0,0 +1,376 @@ +/* + * 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.List; +import java.util.Properties; +import org.apache.juddi.ClassUtil; +import org.apache.juddi.query.util.FindQualifiers; +import org.apache.juddi.v3.client.config.UDDIClientContainer; +import org.apache.juddi.v3.client.transport.Transport; +import org.apache.juddi.v3_service.JUDDIApiPortType; +import org.uddi.api_v3.AuthToken; +import org.uddi.api_v3.BindingTemplates; +import org.uddi.api_v3.BusinessDetail; +import org.uddi.api_v3.BusinessInfos; +import org.uddi.api_v3.BusinessList; +import org.uddi.api_v3.BusinessService; +import org.uddi.api_v3.CategoryBag; +import org.uddi.api_v3.Contacts; +import org.uddi.api_v3.Description; +import org.uddi.api_v3.FindBusiness; +import org.uddi.api_v3.GetAuthToken; +import org.uddi.api_v3.GetBusinessDetail; +import org.uddi.api_v3.GetServiceDetail; +import org.uddi.api_v3.KeyedReference; +import org.uddi.api_v3.Name; +import org.uddi.api_v3.ServiceDetail; +import org.uddi.api_v3.ServiceInfos; +import org.uddi.v3_service.UDDIInquiryPortType; +import org.uddi.v3_service.UDDISecurityPortType; + +/** + * A Simple UDDI Browser that dumps basic information to console + * + * @author Alex O'Ree + */ +public class SimpleBrowse { + + private static UDDISecurityPortType security = null; + private static UDDIInquiryPortType inquiry = null; + + /** + * This sets up the ws proxies using uddi.xml in META-INF + */ + public SimpleBrowse() { + 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(); + } + } 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; + } + SimpleBrowse sp = new SimpleBrowse(); + sp.Browse(args); + } + + public void Browse(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 + } + + String token = GetAuthKey("uddi", "uddi", AuthStyle.UDDI_AUTH); + BusinessList findBusiness = GetBusinessList(token); + PrintBusinessInfo(findBusiness.getBusinessInfos()); + PrintBusinessDetails(findBusiness.getBusinessInfos(), token); + PrintServiceDetailsByBusiness(findBusiness.getBusinessInfos(), token); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * Find all of the registered businesses. This list may be filtered based on + * access control rules + * + * @param token + * @return + * @throws Exception + */ + private BusinessList GetBusinessList(String token) throws Exception { + FindBusiness fb = new FindBusiness(); + fb.setAuthInfo(token); + org.uddi.api_v3.FindQualifiers fq = new org.uddi.api_v3.FindQualifiers(); + fq.getFindQualifier().add(FindQualifiers.APPROXIMATE_MATCH); + + fb.setFindQualifiers(fq); + Name searchname = new Name(); + searchname.setValue(org.apache.juddi.query.util.DynamicQuery.WILDCARD); + fb.getName().add(searchname); + BusinessList findBusiness = inquiry.findBusiness(fb); + return findBusiness; + + } + + /** + * Converts category bags of tmodels to a readable string + * @param categoryBag + * @return + */ + private String CatBagToString(CategoryBag categoryBag) { + StringBuilder sb = new StringBuilder(); + if (categoryBag == null) { + return "no data"; + } + for (int i = 0; i < categoryBag.getKeyedReference().size(); i++) { + sb.append(KeyedReferenceToString(categoryBag.getKeyedReference().get(i))); + } + for (int i = 0; i < categoryBag.getKeyedReferenceGroup().size(); i++) { + sb.append("Key Ref Grp: TModelKey="); + for (int k = 0; k < categoryBag.getKeyedReferenceGroup().get(i).getKeyedReference().size(); k++) { + sb.append(KeyedReferenceToString(categoryBag.getKeyedReferenceGroup().get(i).getKeyedReference().get(k))); + } + } + return sb.toString(); + } + + + private String KeyedReferenceToString(KeyedReference item) { + StringBuilder sb = new StringBuilder(); + sb.append("Key Ref: Name="). + append(item.getKeyName()). + append(" Value="). + append(item.getKeyValue()). + append(" tModel="). + append(item.getTModelKey()). + append(System.getProperty("line.separator")); + return sb.toString(); + } + + + private void PrintContacts(Contacts contacts) { + if (contacts == null) { + return; + } + for (int i = 0; i < contacts.getContact().size(); i++) { + System.out.println("Contact " + i + " type:" + contacts.getContact().get(i).getUseType()); + for (int k = 0; k < contacts.getContact().get(i).getPersonName().size(); k++) { + System.out.println("Name: " + contacts.getContact().get(i).getPersonName().get(k).getValue()); + } + for (int k = 0; k < contacts.getContact().get(i).getEmail().size(); k++) { + System.out.println("Email: " + contacts.getContact().get(i).getEmail().get(k).getValue()); + } + for (int k = 0; k < contacts.getContact().get(i).getAddress().size(); k++) { + System.out.println("Address sort code " + contacts.getContact().get(i).getAddress().get(k).getSortCode()); + System.out.println("Address use type " + contacts.getContact().get(i).getAddress().get(k).getUseType()); + System.out.println("Address tmodel key " + contacts.getContact().get(i).getAddress().get(k).getTModelKey()); + for (int x = 0; x < contacts.getContact().get(i).getAddress().get(k).getAddressLine().size(); x++) { + System.out.println("Address line value " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getValue()); + System.out.println("Address line key name " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getKeyName()); + System.out.println("Address line key value " + contacts.getContact().get(i).getAddress().get(k).getAddressLine().get(x).getKeyValue()); + } + } + for (int k = 0; k < contacts.getContact().get(i).getDescription().size(); k++) { + System.out.println("Desc: " + contacts.getContact().get(i).getDescription().get(k).getValue()); + } + for (int k = 0; k < contacts.getContact().get(i).getPhone().size(); k++) { + System.out.println("Phone: " + contacts.getContact().get(i).getPhone().get(k).getValue()); + } + } + + } + + private void PrintServiceDetail(BusinessService get) { + if (get == null) { + return; + } + System.out.println("Name " + ListToString(get.getName())); + System.out.println("Desc " + ListToDescString(get.getDescription())); + System.out.println("Key " + (get.getServiceKey())); + System.out.println("Cat bag " + CatBagToString(get.getCategoryBag())); + if (!get.getSignature().isEmpty()) { + System.out.println("Item is digitally signed"); + } else { + System.out.println("Item is not digitally signed"); + } + PrintBindingTemplates(get.getBindingTemplates()); + } + + /** + * 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; + } + + private void PrintBusinessInfo(BusinessInfos businessInfos) { + if (businessInfos == null) { + System.out.println("No data returned"); + } else { + for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) { + System.out.println("==============================================="); + System.out.println("Business Key: " + businessInfos.getBusinessInfo().get(i).getBusinessKey()); + System.out.println("Name: " + ListToString(businessInfos.getBusinessInfo().get(i).getName())); + + System.out.println("Name: " + ListToDescString(businessInfos.getBusinessInfo().get(i).getDescription())); + System.out.println("Services:"); + PrintServiceInfo(businessInfos.getBusinessInfo().get(i).getServiceInfos()); + } + } + } + + private String ListToString(List name) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < name.size(); i++) { + sb.append(name.get(i).getValue()).append(" "); + } + return sb.toString(); + } + + private String ListToDescString(List name) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < name.size(); i++) { + sb.append(name.get(i).getValue()).append(" "); + } + return sb.toString(); + } + + private void PrintServiceInfo(ServiceInfos serviceInfos) { + for (int i = 0; i < serviceInfos.getServiceInfo().size(); i++) { + System.out.println("-------------------------------------------"); + System.out.println("Service Key: " + serviceInfos.getServiceInfo().get(i).getServiceKey()); + System.out.println("Owning Business Key: " + serviceInfos.getServiceInfo().get(i).getBusinessKey()); + System.out.println("Name: " + ListToString(serviceInfos.getServiceInfo().get(i).getName())); + } + } + + private void PrintBusinessDetails(BusinessInfos businessInfos, String token) throws Exception { + GetBusinessDetail gbd = new GetBusinessDetail(); + gbd.setAuthInfo(token); + for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) { + gbd.getBusinessKey().add(businessInfos.getBusinessInfo().get(i).getBusinessKey()); + } + BusinessDetail businessDetail = inquiry.getBusinessDetail(gbd); + for (int i = 0; i < businessDetail.getBusinessEntity().size(); i++) { + System.out.println("Business Detail - key: " + businessDetail.getBusinessEntity().get(i).getBusinessKey()); + System.out.println("Name: " + ListToString(businessDetail.getBusinessEntity().get(i).getName())); + System.out.println("CategoryBag: " + CatBagToString(businessDetail.getBusinessEntity().get(i).getCategoryBag())); + PrintContacts(businessDetail.getBusinessEntity().get(i).getContacts()); + } + } + + private void PrintServiceDetailsByBusiness(BusinessInfos businessInfos, String token) throws Exception { + for (int i = 0; i < businessInfos.getBusinessInfo().size(); i++) { + GetServiceDetail gsd = new GetServiceDetail(); + for (int k = 0; k < businessInfos.getBusinessInfo().get(i).getServiceInfos().getServiceInfo().size(); k++) { + gsd.getServiceKey().add(businessInfos.getBusinessInfo().get(i).getServiceInfos().getServiceInfo().get(k).getServiceKey()); + } + gsd.setAuthInfo(token); + System.out.println("Fetching data for business " + businessInfos.getBusinessInfo().get(i).getBusinessKey()); + ServiceDetail serviceDetail = inquiry.getServiceDetail(gsd); + for (int k = 0; k < serviceDetail.getBusinessService().size(); k++) { + PrintServiceDetail(serviceDetail.getBusinessService().get(k)); + } + System.out.println("................"); + + } + } +} Index: simple-browser/src/main/resources/META-INF/uddi.xml =================================================================== --- simple-browser/src/main/resources/META-INF/uddi.xml (revision 0) +++ simple-browser/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 + + + +