blob: fe372267e5a2f20eca0e9af506da22325c3b7df4 [file] [log] [blame]
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package uddi.createbulk;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.juddi.api_v3.AccessPointType;
import org.apache.juddi.api_v3.Publisher;
import org.apache.juddi.v3.client.UDDIConstants;
import org.apache.juddi.v3.client.config.UDDIClient;
import org.apache.juddi.v3.client.config.UDDIClientContainer;
import org.apache.juddi.v3.client.crypto.DigSigUtil;
import org.apache.juddi.v3.client.transport.Transport;
import org.uddi.api_v3.*;
import org.uddi.v3_service.DispositionReportFaultMessage;
import org.uddi.v3_service.UDDIInquiryPortType;
import org.uddi.v3_service.UDDIPublicationPortType;
import org.uddi.v3_service.UDDISecurityPortType;
public class UddiDigitalSignatureSearch {
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 UddiDigitalSignatureSearch() {
try {
// create a manager and read the config in the archive;
// you can use your config file name
UDDIClient clerkManager = new UDDIClient("META-INF/simple-publish-uddi.xml");
// register the clerkManager with the client side container
UDDIClientContainer.addClient(clerkManager); // a ClerkManager can be a client to multiple UDDI nodes, so
// supply the nodeName (defined in your uddi.xml.
// The transport can be WS, inVM, RMI etc which is defined in the uddi.xml
Transport transport = clerkManager.getTransport("default");
// Now you create a reference to the UDDI API
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;
}
UddiDigitalSignatureSearch sp = new UddiDigitalSignatureSearch();
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
}
FindService fs = new FindService();
fs.setFindQualifiers(new FindQualifiers());
fs.getFindQualifiers().getFindQualifier().add(UDDIConstants.SORT_BY_DATE_ASC);
fs.getFindQualifiers().getFindQualifier().add(UDDIConstants.SORT_BY_DATE_DESC);
Name n = new Name();
n.setValue("%");
fs.getName().add(n);
ServiceList findService = inquiry.findService(fs);
for (int i = 0; i < findService.getServiceInfos().getServiceInfo().size(); i++) {
System.out.println(ListToString(findService.getServiceInfos().getServiceInfo().get(i).getName()));
}
} 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);
Name n = new Name();
n.setValue("My Business 0 2013-04-11T12:40:52.753-04:00");
fb.getName().add(n);
org.uddi.api_v3.FindQualifiers fq = new org.uddi.api_v3.FindQualifiers();
fq.getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);
fb.setFindQualifiers(fq);
Name searchname = new Name();
searchname.setValue(UDDIConstants.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.
//http://uddi.org/pubs/uddi_v3.htm#_Ref8977716
//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());
if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType() != null) {
if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.END_POINT.toString())) {
System.out.println("Use this access point value as an invocation endpoint.");
}
if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.BINDING_TEMPLATE.toString())) {
System.out.println("Use this access point value as a reference to another binding template.");
}
if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.WSDL_DEPLOYMENT.toString())) {
System.out.println("Use this access point value as a URL to a WSDL document, which presumably will have a real access point defined.");
}
if (bindingTemplates.getBindingTemplate().get(i).getAccessPoint().getUseType().equalsIgnoreCase(AccessPointType.HOSTING_REDIRECTOR.toString())) {
System.out.println("Use this access point value as an Inquiry URL of another UDDI registry, look up the same binding template there (usage varies).");
}
}
}
}
}
private BusinessEntity GetBusinessDetails() throws Exception {
// BusinessInfo get
GetBusinessDetail r = new GetBusinessDetail();
r.getBusinessKey().add("uddi:juddi.apache.org:6fc51bf1-8158-44eb-bc28-b9bf677fbc8f");
return inquiry.getBusinessDetail(r).getBusinessEntity().get(0);
}
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("Description: " + ListToDescString(businessInfos.getBusinessInfo().get(i).getDescription()));
System.out.println("Services:");
PrintServiceInfo(businessInfos.getBusinessInfo().get(i).getServiceInfos());
}
}
}
private String ListToString(List<Name> 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<Description> 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("................");
}
}
}