UDDI 规范 v3.0.2 – UDDI Programmers APIs 之 Value Set API Set
当在 save_xxx 操作中使用到 keyedReference 时, 它可能会被检查是否是有效的. 类似的, 在 save_xxx 操作中使用到一个 keyedReferenceGroup element 可能也要接受检查确定其是否有效. 检查针对那些被 UDDI 注册中心认为是 “checked” 的 tModels.
UDDI 提供了让第三方注册 value set 的能力, 然后控制检验过程(由 UDDI 使用)去执行这种检查. UDDI 注册中心可能支持缓存这些外部 value sets. UDDI 注册中心也可能支持外部校验. 由节点和注册中心策略确定使用哪种校验方式去执行对外部值集引用的检查. 这一系列 APIs 能够供 UDDI 注册中心和节点用在它们的校验策略中.
想提供一个外部检验能力的第三方实体可能需要使用跟 UDDI 一样的方式去实现一个 Web service(举例来说, 使用 literal encoding SOAP 作为消息传递机制), 这个 Web service 只暴露一个方法 validate_values. validate_values 接口将在随后描述.
在某些情况下, 一个节点可能希望消除或者减少对外部校验 Web service 的调用次数. 它能够通过缓存那些 允许缓存的外部值集 的有效值来达到这一目的. 一个节点有两种标准选项用于获得有效值的集合. 一个是周期性从那些实现了 get_allValidValues API Web service 的值集提供者那里获得有效值集合. 另一种获得有效值缓存的方式是累积每次从 validate_values 成功获得的有效值.
Value Set 编程接口
本系列的 APIs 提供了一种能力: UDDI registry 可能使用这种能力对值集的引用进行校验. 注册中心策略确定哪个外部值集是受支持的, 如何支持.
公共可访问的用于支持外部值集校验的 APIs 如下:
· validate_values: 由节点使用, 允许外部值集校验 Web service 的提供者评估 keyedReferences or keyedReferenceGroups 是否是有效的. 返回一个 dispositionReport 结构.
· get_allValidValues: 由支持从可缓存检查型值集缓存有效值的节点使用, 用于获得有效值的集合. 返回一个空消息或者一个 dispositionReport 结构.
注册中心策略可能需要提供其中一种 Web service 的值集提供者通过特定方式为这个 service 发布 bindingTemplate, 为该值集发布 tModel, 这样才能够找到正确的 Web service. 当一个值集提供者提供了其中一种 Web service, 应该在任何该提供者想要提供该值集的注册中心中为该检查型值集发布一个 tModel, 为值集提供者为该检查型值集提供的 Web service 发布一个 bindingTemplate. 该 tModel 应该具有 uddi-org:types category system 的分类, 表明值集类型(categorization, identifier, relationship, categorizationGroup), 是检查型的(checked), 并且, 如果该值集提供者允许根据节点对有效值的缓存进行校验, 也应该标明是 cacheable 类别.
为了让一个值集成为检查型的, 该 tModel 必须首先引用 uddi-org:types category system 使用 checked 值将其划为 checked 的. 检查这样的值集是由注册中心和节点策略决定的.
如果一个值集 tModel 被划分为 checked, 那么在试图发布一个使用到这个 checked tModel 的 keyedReference 时, 节点必须或者执行必要的校验, 或者返回 E_unsupported.
该 tModel 也应该具有一个到 get_allValidValues or validate_values Web service 的 bindingTemplate 的分类引用, 这需要使用 uddi-org:validatedBy category system.
get_allValidValues or the validate_values Web service 的 bindingTemplate 应该在它 tModelInstanceDetails 中引用适当的值集 tModel, 和其它该服务所适用的所有的值集 tModels.
validate_values:
当发布者保存的数据使用 keyedReference or keyedReferenceGroup 而引用了某检查型值集, 支持外部校验的 UDDI 节点调用适当的外部 Web service 的 validate_values API 进行校验, 这个外部 Web service 有且只有一个 API. 为了讨论方便, keyedReference elements 引用的 identifier, category, and relationship type systems 统称为检查型值集(checked value sets). keyedReferenceGroup elements 引用的 category group systems 也类似地称为 checked category group systems.
检查型值集的正常用途是验证特定值(检查 keyValue 属性的值)是否存在于值集中. 对于特定值集, 值集提供者可能依据所传递数据的上下文环境进一步限制对值的使用. 提供者可以通过提供一个校验 Web service 来执行这种上下文环境检查.
checked category group systems 的校验算法也类似, 依据该 checked category group system 的校验算法检查 keyedReferenceGroup elements 内容是否构成了一个有效值集合. 这种校验经常是确认它所包含的 keyedReferences 的 tModelKey 集合都是允许参加这个 category group system(Frequently such validation ensures that the value sets identified in contained keyedReferences are allowed to participate in the category group system).
参数:
UDDI 节点在调用 validate_values 时必须传递一个或多个 businessEntity elements, 一个或多个 businessService elements, 一个或多个 bindingTemplate elements, 一个或多个 tModel elements, 或者一个或多个 publisherAssertion elements, 作为唯一参数传给这个 Web service. 这些 elements 就是在调用 save_business, save_service, save_binding, save_tModel, add_publisherAssertion, or set_publisherAssertions API 时所传递的 UDDI 数据.
如果在同一保存操作中包含了多个同一类型的 elements, 它们可以一起传递给 validate_values.
可选的 authInfo 参数包含一个 authentication token. 可以通过 get_authToken API 或其它途径获得一个 authentication token. 同时服务多个注册中心的 validate_values Web services 提供者和需要限制哪些用户可以使用该 Web service 的该 service 提供者可能需要 authInfo.
行为:
为检查型值集所提供的 Web service 对所有引用到它的 keyedReferences or keyedReferenceGroups 执行校验. 这可以包括只检查 keyValue 值对该(由 keyedReference tModelKey 值指定的)给定值集来说是良好的. 其它期望的校验也可以, 包括利用要保存实体中的信息进行上下文敏感的检查.
要保存的实体可能包含多个到某(些)值集的引用. 当要保存的实体是一个 businessEntity, 它所包含的 businessService and bindingTemplate 实体可能自己也引用该值集中的值. 不管在被保存的实体中处于何位置, 所有到该(些)值集值的引用必须被校验.
如果外部值集和节点都支持缓存有效值, 节点通过检查它的缓存已经知道该被引用值是有效的, 节点可以不调用 validate_values.
一个 checked category group system 按照与一个 checked value set 相同的方式对待. keyedReferenceGroup 的 tModelKey 指向 checked category group system. 如果节点通过使用它的缓存可以确定包含于 keyedReferenceGroup 中的 keyedReference elements 的 tModelKey 属性都允许参加这个 category group system, 它可能不调用 validate_values 校验到该 cacheable checked category group system 的引用.
返回值:
如果在被保存实体中所有被引用值对该值集或者category group system(s)来说都是有效的, 正确的响应是一个空消息.
错误警告:
如果出现任何错误, 或者被调用 Web service 需要指出根据外部 Web service 提供者所选择的校验算法, 被保存的数据是无效的, 那么该 Web service 必须生成一个 SOAP Fault.
当使用这种方式声明一个错误时, UDDI 节点必须拒绝等候作出更改的改动并将该校验 Web service 所返回的相同的 SOAP fault 数据返回给原始调用者. 错误代码指出以下某个错误原因, 错误文本清楚指出被拒绝的 keyedReference 或者 keyedReferenceGroup 数据和被拒绝的原因.
· E_invalidValue: keyedReference 或 keyedReferenceGroup 里的 keyedReferences 中一个或多个 keyValues 校验失败. 只需要返回第一个错误.
· E_valueNotAllowed: 值可能是有效的, 但上下文环境不允许.
get_allValidValues:
支持外部值集的 UDDI node 经某外部值集提供者许可, 可能会调用该外部值集提供者提供的一个 get_allValidValues Web service 去缓存该值集的有效值. 外部值集提供者可能提供这个 get_allValidValues Web service, UDDI node 可能会使用它. 正常的用法是返回该值集有效值的一个完整集合. 如果值集提供者确认一次需要返回太多的值, 该有效值集合可能会分多次返回.
当缓存应该被注册中心的节点重新获取时, 注册中心策略可能需要该提供了 get_allValidValues Web service 的值集提供者重新发布这个值集的 tModel.
get_allValidValues 同样能够用于获得一个可缓存的 category group system 中的可参与该 category group system 的值集的 tModelKeys.
参数:
· tModelKey: 这个必需的 uddiKey 值标识了某值集或 category group system 的 tModel 的特定实例, 这个 Web service 就是用于为该 tModel 获得所有有效值. 它唯一标识 category, identifier, or category group system.
· chunkToken: 当第一次调用这个 API 时有太多数据, 这个可选元素可用于分几组来连续获取这些数据. 这种情况通常发生于在 validValuesList 结构中返回了一个 chunkToken 且值不为 “0″ 的时候. 为了获取下一批次数据, 返回的 chunkToken 应该用作下一次调用该 API 的参数.
· authInfo: 这个可选元素包含一个 authentication token. 可使用 get_authToken API 或其它方式获得 Authentication tokens. 服务于多个注册中心的 get_allValidValues Web services 的提供者和想要限制谁可以使用自己服务的提供者可能需要 authInfo.
返回值:
返回的 validValuesList 结构包含外部 category or identifier system 的有效值集合. 如果 Web service 提供者希望分批次提供提供数据的话, 该列表必须包含一个 chunkToken.
validValuesList 有:
- chunkToken 元素:可选
- validValue 元素:0..∞
行为:
成功的话, 这个被调用的 Web service 在 validValuesList 中返回有效值集合. 这个结构列出所传递 tModelKey 描述的值集或 category group system 中的每个有效值. 如果在一次响应中需要返回太多值(即, 消息大小超出了 UDDI 注册中心所允许的最大字节数), 或者值集提供者想要分多个批次提供这些值, 那么在 validValueList 中包含 chunkToken element 随后再次调用这个 API 便可得到剩下的有效值.
Chunking of valid values:
如果值集提供者认为在一组中返回的值太多, 那么该提供者应该为该结果集提供一个 chunkToken. chunkToken 是一个基于 token 的字符串, 当这些结果分多批次跨越多次响应时, 这个 token 用于为该特定调用者维护值的集合的状态. 提供者应该建立他们自己的策略用于确定 chunkToken 的内容和格式. 一个特定值集结果集的 chunkToken 应该被用于获取成批次的(subsequent)结果. 如果再没有结果集了, chunkToken 值将是 “0″ 或者省略掉(absent) chunkToken.
chunkToken 是为了用作短期内分批次获得结果的目的(A chunkToken is intended as a short-term aid in obtaining contiguous results across multiple API calls), 因此可能只在很短时间内保持有效. 值集提供者可以建立策略用于确定一个 chunkToken 可以保持多久有效.
错误警告:如果发生错误, 必须在 SOAP Fault 中返回一个 dispositionReport
· E_invalidKeyPassed: 所传递的 tModelKey 与任何已知的 tModels 的 uddiKey 都不匹配. 无效 key 的详细信息应该包含到 dispositionReport element 中.
· E_noValuesAvailable: 没有任何有效值.
· E_unsupported: 这个 Web service 不支持这个 API.
· E_invalidValue: chunkToken 值或者是无效的或者已经过期了.
Categorized in: SOA · Tagged with: SOAP, UDDI, Webservice, WSDL


(