本文是关于使用WSDL和UDDI的新方法系列文章中的第二篇文章,在OASIS
UDDI Technical Note中定义了这种新方法。本文描述了UDDI查询类型,这种查询类型可以使用于根据Technical
Note建立的UDDI模型。
本系列文章中的第一篇文章(参阅参考资料)介绍并描述了构造WSDL描述的UDDI模型的方法。本文描述了该新方法可用的UDDI查询类型,同时使用了几个查询实例,这些查询采用了UDDI
V2 API请求的形式。
该系列文章的第三篇文章提供的例子比在Technical
Note中提供的例子更复杂,包括发布UDDI实体和构造Technical
Note中定义的查询类型的屏幕画面。
本系列文章的最后一篇文章讲述如何编写Java应用程序,使用UDDI4J将这些模型发布到UDDI以及进行查询。
查询类型
本文讲述的查询能在设计/构建时间或在运行时间发布,这有赖于所开发的应用程序的类型。但是,在新的Technical
Note生产期间,考虑的主要情景是在设计/构建期间选择portType。如果需要的话,可以是特定的绑定,可以生成存根或相似的编程制品(artifact)。在运行时间,可以查询portType和绑定(可选)的实现。
必须注意的是,虽然Technical
Note只定以了了与WSDL有关的信息,将其它信息(例如:行业分类或者业务等)添加到UDDI模型也是有效的,并且在查询时也可以使用这些信息。
清单1展示了一个portType
tModel简单查询,portType tModel的名称为:StockQuotePortType。
清单1. 根据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>
|
清单2显示portType
tModel的查询,portType tModel的名称为StockQuotePortType,命名空间是http://example.com/stockquote/
,并且工业分类是NAICS Category System的52312 (Securities
Brokerage) 。
清单2.使用WSDL和其它标准来查询portType
<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>
|
查询绑定tModels
如果名字和/或绑定的命名空间的名字已知,那么作为portType
tModels定义的相同类型的查询能被用来找到绑定,但是,一旦与portType相对应的tModel已知后,绑定查询的大部分查询很可能是查找特定portType的绑定。
清单3显示了查询代表了一个portType的绑定tModel(s),而这个绑定的portType对应于一个key为uuid:11111111-1111-1111-1111-111111111111的portType
tModel。
清单3. portType
tModel的全部绑定 tModels 的查询
<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>
|
categoryBag 中的第一个keyedReference 不是必需的。然而如果利用portType
Reference Category System来查找绑定tModels,将以使用这个它。因为将来的Technical
Note或最优方法将扩展portType Reference Category System的使用,使得也可以对portType之间的关系建模,因此,包括来自WSDL
Entity Type Category System的keyedReference 将确保返回唯一的绑定tModels。
不管在绑定中指定的协议和/或传输是什么,清单3中的查询将返回portType的绑定。如果需要特定的协议和/或传输,那么来自Protocol
Category System和/或Transport Category System的额外keyedReference 也是需要添加的。
清单4显示了关于必需的协议(SOAP)和传输(HTTP)的特定查询。
清单 4. portType
tModel的绑定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>
|
查询businessService
如果用户想在自己权限范围内查询businessService s,和将它们作为bindingTemplates 的部分来查询相反,那么用户就可使用WSDL相关信息(包括服务名字,服务名字空间、与WSDL服务相符合的businessService 的事实)、普通的UDDI信息和主要的服务种类中的任何一种组合来查询。
清单5显示了带有局部名字为“StockQuoteService”和地址为http://example.com/stockquote/名字空间的
businessService 查询。 注意,使用categoryBag 中的keyedReference 来查询局部名字,而不是作为businessService 的名字来查询。正如Technical
Note中所提及的,为存在的UDDI businessService 映射WSDL服务是有效的,在这种情况下,不能假定businessService 和WSDL的服务名字是相匹配的。因此,WSDL服务名字总是存储在businessService
categoryBag 中,并且当根据WSDL服务名字来查询时,通常应该使用keyedReference 。
清单5. 与WSDL服务相符合的businessService 查询
<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>
|
查询bingTemplates
当利用UDDI V2 API查询bindingTemplates 时,由于V2
find_binding API需要一个serviceKey,第一次查询服务是必需的。如果对bindingTemplates 的查询没有引用任何服务相关信息,
那么,将唯一使用tModelBag 。但是,象前面章节中所描述的,使用tModelBag 中的port/bindingTemplate信息,结合一些与服务相关的信息来做查询是可能的。
根据portType或绑定tModel可以查询bindingTemplates 。如果所有portType绑定的实现是必需的,那么查询应该使用和portType相应的tModel键值。如果仅仅portType的单一绑定的实现是必需的,那么必须找到正确的绑定tModel,并且必须在find_query中使用绑定tModel的键值。如果所有portType绑定子集的实现是必需的,那么多个tModel键值必须是在tModelBag 中提供的,并且必须提供orAllKeys
findQualifier 。否则,由于每一个bindingTemplate将只引用一个单一的绑定tModel,就不能返回bindingTemplates 。因此,如果多个绑定tMode键值以缺省andAllKeys 行为提供,那么bindingTemplates 将与之不匹配。
如果返回多个服务,那么必须对每一个返回的服务做find_binding 调用,否则几乎返回的每一个服务都会放弃。
清单6显示了一个find_service查询,后面跟着一个find_binding查询,用来查找与一个port相对应的bindingTemplate。这个port代表了一个portType的实现,而该portType是由tModel建模,key为uuid:11111111-1111-1111-1111-111111111111 。
清单6. 查询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>
|
注意,两个查询中的tModelBag 是相同的。
清单7显示了一个相似的查询,但是这次也使用一些与服务相关的信息,即希望得到的命名空间(Namespace)名字。
清单7.
在特定的命名空间中查询portType的实现
<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>
|
结束语
本章讲述了WSDL描述的新UDDI模型发布的的大部分通用的查询类型。在Technical
Note中描述的方法允许发布灵活准确的查询,可以包括WSDL相关信息和其它信息,例如产业分类。
在这一个系列中的下一篇文章把Technical
Note中描述的查询方法应用到一个样本WSDL描述,演示如何发布在这篇文章中讲述的一些查询类型。
参考资料
关于作者
John Colgrave是IBM
WebSphere UDDI Registry的工程师,也是OASIS UDDI规范技术委员会的一位成员。他是一位关于使用UDDI和WSDL的新OASIS
UDDI Technical Note的作者。
|
|