Skip to main content

A new approach to UDDI and WSDL, Part 2: Queries supported by the new OASIS UDDI WSDL Technical Note

What can I do with this new UDDI model of WSDL?

John Colgrave (colgrave@uk.ibm.com), Senior Software Engineer, IBM United Kingdom Limited
John Colgrave is the architect of the IBM WebSphere UDDI Registry and a member of the OASIS UDDI Specifications Technical Committee. He is one of the authors of the new OASIS UDDI Technical Note on using UDDI and WSDL.

Summary:  This is the second article in a series of articles that relate to a new approach to using WSDL and UDDI, described in a new OASIS UDDI Technical Note. This article describes the types of UDDI query that can be issued against a UDDI model built according to the Technical Note.

View more content in this series

Date:  03 Sep 2003
Level:  Advanced
Activity:  713 views

The first article in this series (see Resources) introduced and described the new approach to constructing a UDDI model of a WSDL description. This article describes the types of UDDI query that are enabled by this new approach, with examples of several queries given in the form of UDDI V2 API requests.

The third article will present a more complex example than the one in the Technical Note, including screen shots showing how to publish the UDDI entities and how to construct the types of query described in the Technical Note.

The final article will describe how to write Java applications that can publish these models to UDDI and issue the queries, using UDDI4J.

Types of query

The queries described here can be issued at design/build time or at run time, depending on the type of application being developed, but the main scenario considered during the production of the new Technical Note was that at design/build time, a portType is chosen and, if necessary a particular binding, from which a stub or similar programming artifact is generated. At run time, implementations of this portType and, optionally, binding are searched for.

It is important to note that although the Technical Note describes only the WSDL-related information, it is valid to add other information to the UDDI model such as industry classifications, or owning business etc. and this information can also be used when querying.


Querying portType tModels

Unless specifically querying for tModels corresponding to both portTypes and bindings, a keyedReference with the appropriate value from the WSDL Entity Type Category System should always be included so that only tModels of the correct type are returned.

Listing 1 shows a simple query for a portType tModel with a name of StockQuotePortType


Listing 1. Simple query by name of portType tModel
<find_tModel generic="2.0" xmlns="urn:uddi-org:api_v2">
    <name>StockQuotePortType</name>
    <categoryBag>
        <keyedReference
            tModelKey="uuid:6e090afa-33e5-36eb-81b7-1ca18373f457"
            keyValue="portType"/>
    </categoryBag>
</find_tModel>

Listing 2 shows a query for a portType tModel with a name of StockQuotePortType, a namespace of http://example.com/stockquote/ and an industry classification of 52312 (Securities Brokerage) in the NAICS Category System.


Listing 2. Query for portType tModel using WSDL and other criteria
<find_tModel generic="2.0" xmlns="urn:uddi-org:api_v2">
    <name>StockQuotePortType</name>
    <categoryBag>
        <keyedReference
            tModelKey="uuid:6e090afa-33e5-36eb-81b7-1ca18373f457"
            keyValue="portType"/>
        <keyedReference
            tModelKey="uuid:d01987d1-ab2e-3013-9be2-2a66eb99d824"
            keyValue="http://example.com/stockquote/"/>
        <keyedReference
            tModelKey="uuid:C0B9FE13-179F-413D-8A5B-5004DB8E5BB2"
            keyValue="52312"/>
    </categoryBag>
</find_tModel>


Querying binding tModels

If the name and/or the namespace name of the binding is known then the same types of query as described for portType tModels can be used to find bindings, but the most common type of query for bindings is likely to be finding bindings of a particular portType, once the tModel corresponding to the portType is known.

Listing 3 shows a query for binding tModel(s) that represent binding(s) for a portType that has a corresponding portType tModel with a key of uuid:11111111-1111-1111-1111-111111111111.


Listing 3. Query for all binding tModels for a portType tModel
<find_tModel generic="2.0" xmlns="urn:uddi-org:api_v2">
    <categoryBag>
        <keyedReference
            tModelKey="uuid:6e090afa-33e5-36eb-81b7-1ca18373f457"
            keyValue="binding"/>
        <keyedReference
            tModelKey="uuid:082b0851-25d8-303c-b332-f24a6d53e38e"
            keyValue="uuid:11111111-1111-1111-1111-111111111111"/>
    </categoryBag>
</find_tModel>

The first keyedReference in the categoryBag is not required. However, it is recommended that it is used when finding binding tModels using the portType Reference Category System as it is likely that a future Technical Note or Best Practice will extend the use of the portType Reference Category System to also model relationships between portTypes, so including a keyedReference from the WSDL Entity Type Category System will ensure that only binding tModels are returned.

The query in Listing 3 will return all bindings for a portType, regardless of the protocol and/or transport specified in the binding. If a particular protocol and/or transport is required, then extra keyedReferences from the Protocol Category System and/or the Transport Category System can be added as necessary. Listing 4 shows a query that is specific about the protocol (SOAP) and transport (HTTP) that is required.


Listing 4. Query for a specific type of binding tModel for a portType tModel
<find_tModel generic="2.0" xmlns="urn:uddi-org:api_v2">
    <categoryBag>
        <keyedReference
            tModelKey="uuid:6e090afa-33e5-36eb-81b7-1ca18373f457"
            keyValue="binding"/>
        <keyedReference
            tModelKey="uuid:082b0851-25d8-303c-b332-f24a6d53e38e"
            keyValue="uuid:11111111-1111-1111-1111-111111111111"/>
        <keyedReference
            tModelKey="uuid:4dc74177-7806-34d9-aecd-33c57dc3a865"
            keyName="SOAP protocol"
            keyValue="uuid:aa254698-93de-3870-8df3-a5c075d64a0e"/>
        <keyedReference
            tModelKey="uuid:e5c43936-86e4-37bf-8196-1d04b35c0099"
            keyName="HTTP transport"
            keyValue="uuid:68DE9E80-AD09-469D-8A37-088422BFBC36"/>
    </categoryBag>
</find_tModel>


Querying businessServices

If you wish to query businessServices in their own right, as opposed to querying them as part of querying bindingTemplates, then you can use any combination of the WSDL-related information (the service name, its namespace, and the fact that the businessService corresponds to a WSDL service) and generic UDDI information, primarily categorizations of the service.

Listing 5 shows a query for a businessService with a local name of "StockQuoteService" and a namespace of http://example.com/stockquote/. Note that the local name is queried for using a keyedReference in the categoryBag and not as the name of the businessService. As is mentioned in the Technical Note, it is valid to map a WSDL service to an existing UDDI businessService, in which case it cannot be assumed that the businessService name matches the WSDL service name, so the WSDL service name is always stored in the businessService categoryBag and it should always be this keyedReference that is used when querying based on the WSDL service name.


Listing 5. Query for a businessService corresponding to a WSDL service
<find_service generic="2.0" xmlns="urn:uddi-org:api_v2">
    <categoryBag>
        <keyedReference
            tModelKey="uuid:6e090afa-33e5-36eb-81b7-1ca18373f457"
            keyValue="service"/>
        <keyedReference
            tModelKey="uuid:2ec65201-9109-3919-9bec-c9dbefcaccf6"
            keyValue="StockQuoteService"/>
        <keyedReference
            tModelKey="uuid:d01987d1-ab2e-3013-9be2-2a66eb99d824"
            keyValue="http://example.com/stockquote/"/>
    </categoryBag>
</find_tModel>


Querying bindingTemplates

When querying bindingTemplates using the UDDI V2 API, it is necessary to first query services as the V2 find_binding API requires a serviceKey. If the query for bindingTemplates is being made without reference to any of the service-related information then only the tModelBag will be used, but it is possible to do a query that combines some of the information relating to the service, as described in the previous section, with the port/bindingTemplate information in the tModelBag.

The query for bindingTemplates can be made based on either a portType tModel or a binding tModel. If implementations of all bindings for a portType are required, then the query should use the key of the tModel corresponding to the portType. If implementations of only a single binding of a portType are required, then the correct binding tModel must be found and the key of that binding tModel used in the find_binding query. If implementations of a subset of all bindings of a portType are required, then multiple tModel keys must be supplied in the tModelBag and the orAllKeys findQualifier must be supplied otherwise no bindingTemplates will be returned as each bindingTemplate will only refer to a single binding tModel so if multiple binding tModel keys are supplied with the default andAllKeys behaviour then no bindingTemplates will match.

If multiple services are returned then a find_binding call must be made for each one unless all but one of the returned services are discarded.

Listing 6 shows a find_service query followed by a find_binding query to find the bindingTemplate corresponding to a port that represents an implementation of the portType that is modeled by a tModel with a key of uuid:11111111-1111-1111-1111-111111111111.


Listing 6. Query for an implementation of a portType
<find_service generic="2.0" xmlns="urn:uddi-org:api_v2">
    <tModelBag>
        <tModelKey>uuid:11111111-1111-1111-1111-111111111111<tModelKey>
    </tModelBag>
</find_service>

<find_binding serviceKey="key returned by previous query" 
generic="2.0" xmlns="urn:uddi-org:api_v2">
    <tModelBag>
        <tModelKey>uuid:11111111-1111-1111-1111-111111111111<tModelKey>
    </tModelBag>
</find_binding>

Note that the tModelBag is the same in both queries.

Listing 7 shows a similar query but this time some of the service-related information is also used, namely the desired namespace name.


Listing 7. Query for a an implementation of a portType in a particular namespace
<find_service generic="2.0" xmlns="urn:uddi-org:api_v2">
<categoryBag>
        <keyedReference
            tModelKey="uuid:6e090afa-33e5-36eb-81b7-1ca18373f457"
            keyValue="service"/>
        <keyedReference
            tModelKey="uuid:d01987d1-ab2e-3013-9be2-2a66eb99d824"
            keyValue="http://example.com/stockquote/"/>
    </categoryBag>
    <tModelBag>
        <tModelKey>uuid:11111111-1111-1111-1111-111111111111<tModelKey>
    </tModelBag>
</find_service>

<find_binding serviceKey="key returned by previous query" 
generic="2.0" xmlns="urn:uddi-org:api_v2">
    <tModelBag>
        <tModelKey>uuid:11111111-1111-1111-1111-111111111111<tModelKey>
    </tModelBag>
</find_binding>


Conclusion

This article has described what are likely to be the most common types of query issued against the new UDDI model for WSDL descriptions. The approach described in the Technical Note allows flexible and precise queries to be issued that can include both WSDL-related information and other information, such as industry classification.

The next article in this series will apply the approach described in the Technical Note to a sample WSDL description and show how to issue some of the types of queries described in this article.


Resources

  • Read the other parts of this series:

  • The OASIS UDDI Specifications Technical Committee is now responsible for UDDI standards.

  • This article is based on the Technical Note "Using WSDL in a UDDI Registry, Version 2.0" which has recently been published as an official Technical Note by the OASIS UDDI Specifications Technical Committee.

  • The previous Best Practice "Using WSDL in a UDDI Registry, Version 1.08" has been updated by the OASIS UDDI Specifications Technical Committee since the previous developerWorks articles were written.

  • Access Web services knowledge, tools, and skills with Speed-start Web services, which offers the latest Java-based software development tools and middleware from IBM (trial editions), plus online tutorials and articles, and an online technical forum.

  • Browse for books on these and other technical topics.

  • Want more? The developerWorks SOA and Web services zone hosts hundreds of informative articles and introductory, intermediate, and advanced tutorials on how to develop Web services applications.

About the author

John Colgrave is the architect of the IBM WebSphere UDDI Registry and a member of the OASIS UDDI Specifications Technical Committee. He is one of the authors of the new OASIS UDDI Technical Note on using UDDI and WSDL.

Comments (Undergoing maintenance)



Trademarks  |  My developerWorks terms and conditions

Help: Update or add to My dW interests

What's this?

This little timesaver lets you update your My developerWorks profile with just one click! The general subject of this content (AIX and UNIX, Information Management, Lotus, Rational, Tivoli, WebSphere, Java, Linux, Open source, SOA and Web services, Web development, or XML) will be added to the interests section of your profile, if it's not there already. You only need to be logged in to My developerWorks.

And what's the point of adding your interests to your profile? That's how you find other users with the same interests as yours, and see what they're reading and contributing to the community. Your interests also help us recommend relevant developerWorks content to you.

View your My developerWorks profile

Return from help

Help: Remove from My dW interests

What's this?

Removing this interest does not alter your profile, but rather removes this piece of content from a list of all content for which you've indicated interest. In a future enhancement to My developerWorks, you'll be able to see a record of that content.

View your My developerWorks profile

Return from help

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=1
Zone=SOA and Web services
ArticleID=11836
ArticleTitle=A new approach to UDDI and WSDL, Part 2: Queries supported by the new OASIS UDDI WSDL Technical Note
publish-date=09032003
author1-email=colgrave@uk.ibm.com
author1-email-cc=

My developerWorks community

Tags

Help
Use the search field to find all types of content in My developerWorks with that tag.

Use the slider bar to see more or fewer tags.

Popular tags shows the top tags for this particular content zone (for example, Java technology, Linux, WebSphere).

My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere).

Use the search field to find all types of content in My developerWorks with that tag. Popular tags shows the top tags for this particular content zone (for example, Java technology, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere).

Special offers