<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>UDDI and WS-Inspection</title>
<link rel="stylesheet" type="text/css" href="../xslides-summary.css"></link>
<meta name="AUTHOR" content="Jose M Vidal"></meta>
<meta name="GENERATOR" content="xslides.el, written by J.M. Vidal"></meta>
</head>
<!--HEADER LEFT "http://jmvidal.cse.sc.edu/talks/uddi/" --> 
<body>  
<h1 class="slidelist">UDDI and WS-Inspection</h1><div class="slidebody">
      We describe the Universal Description, Discovery, and
      Integration project. This talk is based on:
      <ul>
	<li class="index">James Snell, Doug Tidwell, and Pavel Kulchenko. 
	  <span><a href="http://www.amazon.com/exec/obidos/ASIN/0596000952/multiagentcom/">Programming
	    Web Services with SOAP</a> [1]</span>. 2002. Chapter 6</li>

	<li class="index">Tyler Jewell and Dave Chappell <span><a href="http://www.onjava.com/pub/a/onjava/excerpt/jws_6/index1.html">UDDI:
	    Universal Description, Discovery, and Integration Part 1</a> [2]</span></li>

      </ul>
    </div><h2 id="introduction">1 Introduction</h2><div class="slidebody">
      <ul>
	
	<li>Once everyone posts the <a href="../wsdl/allslides.xml#index">WSDL</a> description of their
	  service, how do you find the service you need?</li>

	<li>The <span><a class="remote" href="http://www.uddi.org" title="UDDI.org">Universal Description,
	    Discovery, and Integration of Business for the Web</a> [3]</span> project
	  is an industry effort to define a registry where users can
	  automatically discover the services they need (and rent
	  them).</li>

	<li>They publish the official <span><a class="remote" href="http://uddi.org/pubs/uddi-v3.00-published-20020719.htm">UDDI
	Specification</a> [4]</span>. </li>

	<li>UDDI has two parts
	  <ul>
	    <li>A registry of all the web service's metadata.</li>

	    <li>A set of WSDL port type definition for manipulating and
	      searching the registry.</li>

	  </ul>
	</li>

      </ul>
    </div><h2 id="registry">2 UDDI Registry</h2><div class="slidebody">
      <ul>
	
	<li>Allows a business to publicly list a description of itself
	  and the services it provides.</li>

	<li>Customers will go to it and locate what they want based on
	  taxonomical information.
	  <ul>
	    <li>e.g. who provides weather reports for offshore vessels?</li>
	  </ul>
	</li>

	<li>The registry itself is defined as a hierarchy of business,
	  service, and binding descriptions expressed in XML.</li>

      </ul>
    </div><h3 id="businessentity">2.1 Business Entity</h3><div class="slidebody">
      <ul>
	
	<li>The business entity structure represents the provider of web
	  services.</li>

	<li>It contains information about the company
	  itself: contact information, industry categories, business
	  identifiers, and a list of services provided.</li>

      </ul>
      <pre>
<span class="type">&lt;businessEntity 
                businessKey=</span><span class="string">"uuid:dkeieie-sdfsdf-sdfs-3343334342234"</span><span class="type">
                operator=</span><span class="string">"http://www.ibm.com"</span><span class="type">
                authorizedName=</span><span class="string">"John Palms"</span><span class="type">&gt;</span>
  <span class="type">&lt;name&gt;</span>Acme Company<span class="type">&lt;/name&gt;</span>
  <span class="type">&lt;description&gt;</span>
    We make things that go wrong.
  <span class="type">&lt;/description&gt;</span>
  <span class="type">&lt;contacts&gt;</span>  
    <span class="type">&lt;contact useType=</span><span class="string">"general info"</span><span class="type">&gt;</span>
      <span class="type">&lt;description&gt;</span>General Information<span class="type">&lt;/description&gt;</span>
      <span class="type">&lt;personName&gt;</span>John Doe<span class="type">&lt;/personname&gt;</span>
      <span class="type">&lt;phone&gt;</span>(803) 777-0234<span class="type">&lt;/phone&gt;</span>
      <span class="type">&lt;email&gt;</span>jdoe@acme.com<span class="type">&lt;/email&gt;</span>
    <span class="type">&lt;/contact&gt;</span>
  <span class="type">&lt;/contacts&gt;</span>
  <span class="type">&lt;businessServices&gt;</span>
    ...
  <span class="type">&lt;/businessservices&gt;</span>
  <span class="type">&lt;identifierBag&gt;</span>
    <span class="type">&lt;keyedReference
                    TModelKey=</span><span class="string">"UUID:8989df-09df0df9-eede"</span><span class="type">
                    name=</span><span class="string">"D-U-N-S"</span><span class="type">
                    value=</span><span class="string">"123456"</span><span class="type">/&gt;</span>
  <span class="type">&lt;/identifierbag&gt;</span>
  <span class="type">&lt;categoryBag&gt;</span>
    <span class="type">&lt;keyedReference
                    TModelKey=</span><span class="string">"UUID:eer90-erere99-9898e-ee3"</span><span class="type">
                    name=</span><span class="string">"NAICS"</span><span class="type">
                    value=</span><span class="string">"12334455"</span><span class="type">/&gt;</span>
  <span class="type">&lt;/categorybag&gt;</span>
<span class="type">&lt;/businessEntity&gt;</span></pre>
      <ul>
	<li>It contains information such as the name, description,
	  contacts, categories, and business keys.</li>
      </ul>
    </div><h3 id="businessservices">2.2 Business Services</h3><div class="slidebody">
      <ul>
	<li>Includes information about how to bind to the web service,
	  what type of web service it is, and what taxonomical categories
	  it belongs to.</li>

	<li>The Universally Unique Identifiers (UUID) are assigned by
	  the registry when the information is first entered. </li>

      </ul>
      <pre>
<span class="type">&lt;businessService serviceKey=</span><span class="string">"uuid:udjeei-ded3-d33343"</span><span class="type">
                 businessKey=</span><span class="string">"uuid:ccdkjd898-98cd9-cddd"</span><span class="type">&gt;</span>
  <span class="type">&lt;name&gt;</span>Hello World Web Service<span class="type">&lt;/name&gt;</span>
  <span class="type">&lt;description&gt;</span>A basic web service<span class="type">&lt;/description&gt;</span>
  <span class="type">&lt;bindingTemplates&gt;</span>
    ....
  <span class="type">&lt;/bindingtemplates&gt;</span>
  <span class="type">&lt;categoryBag/&gt;</span>
<span class="type">&lt;/businessService&gt;</span>
</pre>
    </div><h3 id="bindingtemplates">2.3 Binding Templates</h3><div class="slidebody">
      <ul>
	<li>Technical descriptions of the web services represented by
	  the business service structure. </li>

	<li>One service might have multiple binding templates.</li>

	<li>The binding template represents the implementation of the
	  web service, i.e., what protocol, network address, etc. it
	  uses. </li>
      </ul>
      <pre>
<span class="type">&lt;bindingTemplate serviceKey=</span><span class="string">"uudi:123"</span><span class="type">
                 bindingKey=</span><span class="string">"uuid:abd45"</span><span class="type">&gt;</span>
  <span class="type">&lt;description&gt;</span>Hellow World SOAP binding.<span class="type">&lt;/description&gt;</span>
  <span class="type">&lt;accessPoint URLType=</span><span class="string">"http"</span><span class="type">&gt;</span>
    http://localhost:8080
  <span class="type">&lt;/accesspoint&gt;</span>
  <span class="type">&lt;TModelInstanceDetails&gt;</span>
    <span class="type">&lt;TmodelInstanceInfo
                        TModelKey=</span><span class="string">"uuid:abfdg"</span><span class="type">&gt;</span>
      <span class="type">&lt;instanceDetails&gt;</span>
        <span class="type">&lt;overviewDoc&gt;</span>
          <span class="type">&lt;description&gt;</span>
            references the description of the WSDL
            service definition.
          <span class="type">&lt;/description&gt;</span>
          <span class="type">&lt;overviewURL&gt;</span>
            http://localhost/helloworld.wsdl
          <span class="type">&lt;/overviewURL&gt;</span>
        <span class="type">&lt;/overviewDoc&gt;</span>
      <span class="type">&lt;/instanceDetails&gt;</span>
    <span class="type">&lt;/TModelInstanceInfo&gt;</span>
<span class="type">&lt;/bindingTemplate&gt;</span>
</pre>
    </div><h3 id="tmodels">2.4 TModels</h3><div class="slidebody">
      <ul>
	<li>A TModel is a way of describing the various business,
	  service, and template structures stored within the UDDI
	  registry. </li>

	<li>For example, you can define a TModel to represent a WSDL
	  port type then associate the TModel with one of the business
	  service's binding templates.</li>
      </ul>
      <pre>
<span class="type">&lt;TModel TModelKey=</span><span class="string">"uuid:asdf34"</span><span class="type">
        operator=</span><span class="string">"http://www.ibm.com"</span><span class="type">
        authorizedName=</span><span class="string">"John Doe"</span><span class="type">&gt;</span>
  <span class="type">&lt;name&gt;</span>HelloWorldInterface Port Type<span class="type">&lt;/name&gt;</span>
  <span class="type">&lt;description&gt;</span>
    An interface for a friendly web service
  <span class="type">&lt;/description&gt;</span>
  <span class="type">&lt;overviewDoc&gt;</span>
    <span class="type">&lt;overviewURL&gt;</span>
      http://localhost/helloworld.wsdl
    <span class="type">&lt;/overviewURL&gt;</span>
  <span class="type">&lt;/overviewDoc&gt;</span>
<span class="type">&lt;/TModel&gt;</span>
</pre>
    </div><h2 id="federated">3 Federated and Private UDDI Registries</h2><div class="slidebody">
      <ul>
	<li>UDDI is built of a number of linked registries, all of which
	  implement the same interface. </li>

	<li>These can provide distributed search capability.
	  <ul>
	    <li>Not hierarchical like DNS.</li>

	    <li>A producer might only register with some
	      registries. </li>
	  </ul> 
	</li>

	<li>Another option is to deploy your own private UDDI
	  registry. </li>

	<li>If you later want to open its services, its a simple matter
	  since it already implements all the interfaces. </li>
      </ul>
    </div><h2 id="uddiinterfaces">4 UDDI Interfaces</h2><div class="slidebody">
      <ul>
	<li>The UDDI standard provides two SOAP interfaces: </li>

	<li><code>InquireSOAP</code> is used by service consumers to
	  find a service. </li>

	<li><code>PublishSOAP</code> is used by providers to list a
	  service. </li>

	<li>The services are described with WSDL. </li>
      </ul>
    </div><h3 id="publisher">4.1 Publisher Interface</h3><div class="slidebody">

      <ul>
	<li>It defines 16 operations: </li>

	<li><code>get&#095;authToken</code> </li>

	<li><code>discard&#095;authToken</code> </li>

	<li><code>save&#095;business</code>: creates or updates a business' information. </li>

	<li><code>save&#095;service</code>: creates or updates information
	  about the web services that a business provides.</li>

	<li><code>save&#095;binding</code> </li>

	<li><code>save&#095;TModel</code> </li>

	<li><code>delete&#095;business</code> </li>

	<li><code>delete&#095;service</code> </li>

	<li><code>delete&#095;binding</code> </li>

	<li><code>delete&#095;TModel</code> </li>

	<li><code>get&#095;registeredInfo</code> </li>
      </ul>
    </div><h3 id="inquire">4.2 Inquiry Interface</h3><div class="slidebody">
      <ul>
	<li> It defines the following operations:</li>

	<li><code>find&#095;binding</code> </li>

	<li><code>find&#095;business</code> </li>

	<li><code>find&#095;TModel</code> </li>

	<li><code>get&#095;bindingDetail</code> </li>

	<li><code>get&#095;businessDetail</code> </li>

	<li><code>get&#095;businessDetailExt</code> </li>

	<li><code>get&#095;serviceDetail</code> </li>

	<li><code>get&#095;TModelDetail</code> </li>
      </ul>
    </div><h2 id="wsdl2uddi">5 From WSDL to UDDI</h2><div class="slidebody">
      <ul>
	<li>There is some overlap between them in the way they describe
	  services.</li>

	<li>The coalition has a document describing the best practices
	  to follow when using a WSDL description to generate a UDDI
	  registration. </li>

      </ul>
      <ol>
	<li>Divide the WSDL description into two files.
	  <ul>
	    <li>One file includes the data <code>types</code>,
	      <code>message</code>s, <code>portType</code>s, and
	      <code>binding</code>s. It is known as the <b>interface
		description</b>.</li>

	    <li>The other file includes just the <code>service</code>
	      definition. It is known as the <b>implementation
		description</b>. Use <code>wsdl:import</code> to import the
	      first one.</li>

	  </ul>
	</li>

	<li>Register the interface description as a UDDI
	  <code>TModel</code> and mark the <code>TModel</code> as one that
	  represents a WSDL interface description (whose WSDL file must be
	  available in a website). </li>

	<li>Specify that the service is an instance of this
	  <code>TModel</code>.</li>

	<li>Provide a link to the WSDL implementation description, which
	  must also be available in a website. </li>

	<li>Initialize the proxy and call the <code>save&#095;service</code>
	  operation to register the service. </li>

      </ol>
      <ul>
	<li>For example, <span><a class="remote" href="http://www.alphaworks.ibm.com/tech/ettk">IBM's
	    Emerging Technologies Toolkit</a> [5]</span> allows you to easily
	  find a service with UDDI and invoke it via a dynamically
	  configured WSDL-based proxy.</li>
      </ul>
    </div><h2 id="wsinspection">6 WS-Inspection</h2><div class="slidebody">
      <ul>
	<li>UDDI has a lot of features. It might be overkill for a small
	  (in-house) application. </li>

	<li>IBM and Microsoft got together and came up with the <span><a class="remote" href="http://www-106.ibm.com/developerworks/webservices/library/ws-wsilspec.html">Web
	    Services Inspection Language</a> [6]</span>. </li>

	<li>It can be used to create a simple index of service
	  descriptions. </li>

	<li>An example of two services. The first provides stock quotes
	  with a HTTP-accessible WSDL file and UDDI-accessible. The second
	  provides a calculator with an FTP-accessible WSDL file. </li>
      </ul>
      <pre>
<span class="variable-name">&lt;?xml version=</span><span class="string">"1.0"</span><span class="variable-name">?&gt;</span>
<span class="type">&lt;inspection </span><span class="keyword">xmlns="http://schemas.xmlsoap.org/ws/2001/10/inspection/"</span><span class="type">
            </span><span class="keyword">xmlns:wsiluddi="http://schemas.xmlsoap.org/ws/2001/10/inspection/uddi/"</span><span class="type">&gt;</span>
  <span class="type">&lt;service&gt;</span>
    <span class="type">&lt;abstract&gt;</span>A stock quote service with two descriptions<span class="type">&lt;/abstract&gt;</span>
    <span class="type">&lt;description referencedNamespace=</span><span class="string">"http://schemas.xmlsoap.org/wsdl/"</span><span class="type">
                 location=</span><span class="string">"http://example.com/stockquote.wsdl"</span><span class="type">/&gt;</span>
    <span class="type">&lt;description referencedNamespace=</span><span class="string">"urn:uddi-org:api"</span><span class="type">&gt;</span>
      <span class="type">&lt;wsiluddi:serviceDescription location=</span><span class="string">"http://www.example.com/uddi/inquiryapi"</span><span class="type">&gt;</span>
        <span class="type">&lt;wsiluddi:serviceKey&gt;</span>4FA28580-5C39-11D5-9FCF-BB3200333F79<span class="type">&lt;/wsiluddi:serviceKey&gt;</span>
      <span class="type">&lt;/wsiluddi:serviceDescription&gt;</span>
    <span class="type">&lt;/description&gt;</span>
  <span class="type">&lt;/service&gt;</span>
  <span class="type">&lt;service&gt;</span>
    <span class="type">&lt;description referencedNamespace=</span><span class="string">"http://schemas.xmlsoap.org/wsdl/"</span><span class="type">
                 location=</span><span class="string">"ftp://anotherexample.com/tools/calculator.wsdl"</span><span class="type">/&gt;</span>
  <span class="type">&lt;/service&gt;</span>
  <span class="type">&lt;link referencedNamespace=</span><span class="string">"http://schemas.xmlsoap.org/ws/2001/10/inspection/"</span><span class="type">
        location=</span><span class="string">"http://example.com/moreservices.wsil"</span><span class="type">/&gt;</span>
<span class="type">&lt;/inspection&gt;</span>

</pre>
      <ul>
	<li>These documents should be placed in a website which must
	  also have a http:&#047;&#047;host&#047;inspection.wsil file that
	  lists the services.</li>

	<li>UDDI is useful when you don't know who provides the service
	  you want. WS-Inspection can only be used if you know who you
	  want to use. </li>
      </ul>
    </div><h2>URLs</h2><ol><li>Programming
	    Web Services with SOAP, <a href="http://www.amazon.com/exec/obidos/ASIN/0596000952/multiagentcom/">http://www.amazon.com/exec/obidos/ASIN/0596000952/multiagentcom/</a></li><li>UDDI:
	    Universal Description, Discovery, and Integration Part 1, <a href="http://www.onjava.com/pub/a/onjava/excerpt/jws_6/index1.html">http://www.onjava.com/pub/a/onjava/excerpt/jws_6/index1.html</a></li><li>UDDI.org, <a href="http://www.uddi.org">http://www.uddi.org</a></li><li>UDDI
	Specification, <a href="http://uddi.org/pubs/uddi-v3.00-published-20020719.htm">http://uddi.org/pubs/uddi-v3.00-published-20020719.htm</a></li><li>IBM's
	    Emerging Technologies Toolkit, <a href="http://www.alphaworks.ibm.com/tech/ettk">http://www.alphaworks.ibm.com/tech/ettk</a></li><li>Web
	    Services Inspection Language, <a href="http://www-106.ibm.com/developerworks/webservices/library/ws-wsilspec.html">http://www-106.ibm.com/developerworks/webservices/library/ws-wsilspec.html</a></li></ol><hr class="bottom"/>
<p class="author">This talk available at <a href="http://jmvidal.cse.sc.edu/talks/uddi">http://jmvidal.cse.sc.edu/talks/uddi/</a><br />
Copyright &copy; 2004 <a href="../../index.html">Jos&eacute; M. Vidal</a>
<a href=" http://validator.w3.org/check?uri=http://jmvidal.cse.sc.edu/talks/uddi/allslides.xml">.</a>
 All rights reserved.</p>
<p class="pagenumber">03 April 2004, 03:14PM</p>
</body>
</html>