The current technical note for mapping WSDL to UDDI can be found here: http://www.oasis-open.org/committees/uddi-spec/doc/tn/uddi-spec-tc-tn-wsdl-v202-20040631.htm
On 5/24/05, Andy Cutright <[EMAIL PROTECTED]> wrote: > you can search the repository for the WSDL. there's a couple of standard > schemas for publishing a web service to a UDDI repository. below is an > example of how to publish a webservice. take a look at the data > structures published. i don't currently have an example for dynamically > pulling WSDL from the repository. if you'd like to write something, i'll > be happy to add it to the jUDDI source tree.. > > here's an example using UDDI4J to register a web service in jUDDI. this > should work with any UDDI server. you'll need to adapt this to your > world a bit, but the general idea should be clear, > > also, you might take a look at > http://www.oasis-open.org/committees/uddi-spec/doc/bp/uddi-spec-tc-bp-us > ing-wsdl-v108-20021110.htm, though i've told that is a bit of date. > > cheers, > andy > > ///////////////////////////////////////////////////////////////// > package webservices; > > import java.net.*; > import java.util.*; > > import org.uddi4j.*; > import org.uddi4j.client.*; > import org.uddi4j.datatype.*; > import org.uddi4j.datatype.binding.*; > import org.uddi4j.datatype.business.*; > import org.uddi4j.datatype.service.*; > import org.uddi4j.datatype.tmodel.*; > import org.uddi4j.response.*; > import org.uddi4j.transport.*; > import org.uddi4j.util.*; > > public class UDDIPublish extends UDDIClientBase { > > protected TModelDetail animalProtocol_tModelDetail = null; > protected BusinessDetail businessDetail = null; > > public static void main (String args[]) > { > UDDIPublish app = new UDDIPublish(); > app.run(); > System.exit(0); > } > > > public void run() > { > try > { > init(); > > /** > * First create a common tModel to define the 'AnimalProtocol' > */ > publish_animals_tModel(); > > /** > * Publish the business. > */ > publish_animalBusiness(); > > Vector businessEntities = > businessDetail.getBusinessEntityVector(); > BusinessEntity returnedBusinessEntity = > (BusinessEntity)(businessEntities.elementAt(0)); > System.out.println("Returned businessKey:" + > returnedBusinessEntity.getBusinessKey()); > > /** > * Create and publish the services for each implementation: CORBA, > EJB and the simple > * Java implementation. > * > * The services also could have been published using one message > rather than three. > */ > > publish_animalService(returnedBusinessEntity, JANIMAL_SERVICE, > JANIMAL_WSDL_URL); > publish_animalService(returnedBusinessEntity, EANIMAL_SERVICE, > EANIMAL_WSDL_URL); > publish_animalService(returnedBusinessEntity, VANIMAL_SERVICE, > VANIMAL_WSDL_URL); > > } > /** > * Error handling is typically exception based. If an error occurs > * (???) a DispositionReport will be generated by the UDDI server. > * The report can be examined to discover the problem's cause. > */ > catch( UDDIException e ) > { > DispositionReport dr = e.getDispositionReport(); > if( dr!=null ) > { > System.out.println("UDDIException faultCode:" + e.getFaultCode() > + > "\n operator:" + dr.getOperator() + > "\n generic:" + dr.getGeneric() ); > > Vector results = dr.getResultVector(); > for( int i=0; i<results.size(); i++ ) > { > Result r = (Result)results.elementAt(i); > System.out.println("\n errno:" + r.getErrno() ); > if( r.getErrInfo()!=null ) > { > System.out.println("\n errCode:" + > r.getErrInfo().getErrCode() + > "\n errInfoText:" + > r.getErrInfo().getText()); > } > } > } > > e.printStackTrace(); > } > // Catch any other exception that may occur > catch( Exception e ) > { > e.printStackTrace(); > } > } > > private void publish_animalService(BusinessEntity > returnedBusinessEntity, > String serviceName, > String url) throws > TransportException, UDDIException { > > BusinessService busService = new BusinessService(); > busService.setBusinessKey(returnedBusinessEntity.getBusinessKey()); > Name name = new Name(serviceName); > busService.setDefaultName(name); > busService.setDefaultDescriptionString("Serving the AnimalProtocol: > " + serviceName); > /** > * Services can contain CategoryBags, just like Businesses. We'll > * use the same CategoryBag definition the business does > */ > CategoryBag catBag = createCategoryBag(); > busService.setCategoryBag(catBag); > > /** > * Services require BindingTemplates which contain the web services' > * technical descriptions. These structures provide support > * for determining a technical entry point. Since UDDIs main > * purpose is to enable description and discovery of Web Service > * information, it is the bindingTemplate that provides the most > * interesting technical data. > */ > > BindingTemplate bindingTemplate = new BindingTemplate(); > > /** > * The template can contain any number of tModels. We'll use the > tModel > * we defined for the AnimalProtocol, so querying programs or users > can > * recognize our Service supports the interface. We'll also create a > * unique tModel for this service, using the best practices > published > * by UDDI.org, to identify the service's WSDL endpoint. > */ > > TModelInstanceDetails tModelInstanceDetails = new > TModelInstanceDetails(); > TModelInstanceInfo tModelInstanceInfo = new TModelInstanceInfo(); > > > tModelInstanceInfo.setTModelKey(((TModel)animalProtocol_tModelDetail.get > TModelVector().elementAt(0)).getTModelKey()); > tModelInstanceInfo.setDefaultDescriptionString("Animal Protocol > tModel instance"); > tModelInstanceDetails.add(tModelInstanceInfo); > > > tModelInstanceInfo = new TModelInstanceInfo(); > > tModelInstanceInfo.setTModelKey(((TModel)animalProtocol_tModelDetail.get > TModelVector().elementAt(0)).getTModelKey()); > > /** > * This creates the unique, well-defined tModel representing the > service's WSDL > */ > TModelDetail tmodelDetail = publishWSDL_tModel(url); > tModelInstanceInfo = new TModelInstanceInfo(); > > tModelInstanceInfo.setTModelKey(((TModel)tmodelDetail.getTModelVector(). > elementAt(0)).getTModelKey()); > tModelInstanceInfo.setDefaultDescriptionString("Animal Service > tModel instance"); > tModelInstanceDetails.add(tModelInstanceInfo); > > /** > * Associate the set of tModels with the Service's BindingTemplate > */ > bindingTemplate.setTModelInstanceDetails(tModelInstanceDetails); > > /** > * The binding template needs an [ accessPoint | hostRedirector ] > */ > AccessPoint animalAccessPoint = > createAccessPoint(url.substring(0,url.lastIndexOf("?"))); > bindingTemplate.setAccessPoint(animalAccessPoint); > BindingTemplates bindingTemplates = new BindingTemplates(); > > bindingTemplate.setDefaultDescriptionString("SOAP Binding"); > bindingTemplates.add(bindingTemplate); > > busService.setBindingTemplates(bindingTemplates); > > // save the service > java.util.Vector servicesVector = new Vector(); > servicesVector.add(busService); > proxy.save_service(token.getAuthInfoString(),servicesVector); > } > > /** The BusinessDetail returned by the UDDI server > * includes information necessary to publish the services offered by > * the business, including the UUID generated by the UDDI server > * uniquely identifying the business. > */ > private void publish_animalBusiness() throws > TransportException, UDDIException { > Vector entities = new Vector(); > > /** > * Create a new business entity using required elements constructor > * BusinessKey must be "" to save a new business. The UDDI registry > * automatically generates a UUID representing the business. > */ > BusinessEntity be = new BusinessEntity("", ANIMAL_BUSINESS); > > /** > * Contact information is optional > */ > Contact busContact = new Contact("Olli A. Menendez"); > busContact.setDefaultDescriptionString("Virtual Zookeeper"); > > Email email = new Email(); > email.setText("[EMAIL PROTECTED]"); > Vector emailVector = new Vector(); > emailVector.add(email); > busContact.setEmailVector(emailVector); > > Contacts contactList = new Contacts(); > contactList.add(busContact); > > busContact = new Contact("Steve Irwin"); > busContact.setDefaultDescriptionString("Consulting Crocidile > Hunter"); > email = new Email("[EMAIL PROTECTED]"); > emailVector = new Vector(); > emailVector.add(email); > busContact.setEmailVector(emailVector); > > contactList.add(busContact); > > be.setContacts(contactList); > be.setDefaultDescriptionString("The Number One Supplier of Animal > Services on the Web"); > > /** > * The identifierBag element Busineses to publish information about > common > * forms of identification such as D-U-N-S numbers, tax identifiers, > etc. > * Including data of this sort is optional. > * > * The identifierBag element can also be used with other UDDI > specified datastructures > * and messages. > */ > > IdentifierBag idBag = createIdentifierBag(); > be.setIdentifierBag(idBag); > > /** > * The categoryBag element allows Business to be categorized > according to any of several > * available taxonomy based classification schemes. Operator Sites > * automatically provide validated categorization support for three > taxonomies > * that cover industry codes (via NAICS), product and > * service classifications (via UNSPC) and geography (via ISO 3166). > * > * This data is optional, and can be associated with other UDDI > datastructures > * and UDDI messages. > */ > > CategoryBag catBag = createCategoryBag(); > be.setCategoryBag(catBag); > > entities.addElement(be); > > /** > * publish the business > */ > businessDetail = > proxy.save_business(token.getAuthInfoString(),entities); > > Vector businessEntities = businessDetail.getBusinessEntityVector(); > BusinessEntity returnedBusinessEntity = > (BusinessEntity)(businessEntities.elementAt(0)); > System.out.println("Returned businessKey:" + > returnedBusinessEntity.getBusinessKey()); > } > > private CategoryBag createCategoryBag() { > CategoryBag catBag = new CategoryBag(); > KeyedReference kr = new KeyedReference(TModel.NAICS_TMODEL_KEY, > "<FAKE NAICS NUMBER>"); > catBag.add(kr); > return catBag; > } > > private IdentifierBag createIdentifierBag() { > IdentifierBag idBag = new IdentifierBag(); > KeyedReference kr = new KeyedReference(TModel.D_U_N_S_TMODEL_KEY , > "<FAKE DUNS KEY>"); > idBag.add(kr); > return idBag; > } > > /** > * Creates a tModel, identifying WSDL endpoint. This is the > * best practices model for registering a WSDL describing a business > service. > * Applications searching registries for WSDL will be searching > registries for > * this datastructure. > * > * The datastructure contains a endpoint for the Service's WSDL > document, so > * each service will need a unique tModel. > * > * Best Practices are outlined in the document > * > http://www.oasis-open.org/committees/uddi-spec/doc/bp/uddi-spec-tc-bp-us > ing-wsdl-v108-20021110.htm > * > */ > private TModelDetail publishWSDL_tModel(String url) > throws TransportException, UDDIException > { > TModel animalWSDL_tModel = new TModel(); > /** > * UDDI best practices recommend a specific format for the > OverviewDocument > * for this tModel. > */ > OverviewDoc animalWSDL_overviewDoc = new OverviewDoc(); > animalWSDL_overviewDoc.setDefaultDescriptionString("WSDL source > document"); > animalWSDL_overviewDoc.setOverviewURL(url); > animalWSDL_tModel.setOverviewDoc(animalWSDL_overviewDoc); > > KeyedReference kr = new KeyedReference("uuid-org:types","wsdlSpec"); > kr.setTModelKey(TModel.TYPES_TMODEL_KEY); > CategoryBag catBag = new CategoryBag(); > catBag.add(kr); > animalWSDL_tModel.setCategoryBag(catBag); > > animalWSDL_tModel.setName(ANIMAL_SERVICE_NAME); > animalWSDL_tModel.setDefaultDescriptionString("WSDL description of > Animal protocol interface"); > java.util.Vector tModelVector = new Vector(); > tModelVector.add(animalWSDL_tModel); > TModelDetail animal_tModelDetail = > proxy.save_tModel(token.getAuthInfoString(), tModelVector); > return animal_tModelDetail; > } > > /** > * This creates a tModel with a UUID identiying the uniquely > 'AnimalProtocol'. > * The UUID can then be used to publish services supporting the > * 'AnimalProtocol'. The name or the UUID key can be used by clients > looking for > * support of a particular protocol. > */ > private boolean publish_animals_tModel() > { > TModel animal_tModel = new TModel(); > animal_tModel.setName(ANIMAL_PROTOCOL_NAME); > animal_tModel.setDefaultDescriptionString("An Interface to allow > animals to " + > "programatically talk, > walk and sleep"); > > /** > * An OverviewDoc element allows you to register links to more > complete information, > * like expected behavior, design goals, etc., describing your > registered service. > * This might be used to provide engineers with manual pages, etc. > We create a sample > * url below. > * > * Unlike the WSDL tModel defined above, there is no convention > governing this > * tModel's OverviewDoc. > */ > OverviewDoc overviewDoc = new OverviewDoc(); > overviewDoc.setDefaultDescriptionString("Animal Protocol > Documentation and IDL"); > overviewDoc.setOverviewURL("<url for documentation and IDL>"); > > java.util.Vector tModelVector = new Vector(); > tModelVector.add(animal_tModel); > try { > animalProtocol_tModelDetail = > proxy.save_tModel(token.getAuthInfoString(), > tModelVector); > } > catch (TransportException ex) { > return false; > } > catch (UDDIException ex) { > return false; > } > return true; > } > > private AccessPoint createAccessPoint(String url) { > AccessPoint animalAccessPoint = new AccessPoint(); > animalAccessPoint.setURLType("http"); > animalAccessPoint.setText(url); > return animalAccessPoint; > } > } > > > -----Original Message----- > > From: Vasiliki Pouli [mailto:[EMAIL PROTECTED] > > Sent: Tuesday, May 24, 2005 12:56 AM > > To: [email protected] > > Subject: receive WSDL > > > > Hello, I would like to ask if you know how to receive from > > jUDDI the WSDL of > > a web service programmatically? > > > > > > >
