IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

在 Websphere Process Server 中验证业务对象

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码

英文原文

英文原文


级别: 中级

Zhi Qiu Xie, 软件工程师, IBM
Zi Hui Duan, 软件工程师, IBM

2009 年 9 月 09 日

本文描述了 WebSphere® Process Server 中的业务对象实例验证服务。您可调用该服务进行 “基于接口限定符” 的隐式验证或者显式编程验证。

简介

关于 WebSphere Process Server 更多技术资源,请参考 WebSphere Process Server 产品专题,该专题为您提供了相关的最新技术资源。

IBM 客户要求使用已定义的 XSD(XML 模式定义)约束在运行时中对业务对象(BO)实例进行验证。此验证针对特定的业务系统,以确保数据的一致性和准确性。从 6.1 版开始,WebSphere Process Server 提供了在运行时进行 BO 实例验证的支持。这个功能可以确认传递到操作的数据与 XSD 类型和该操作输入的约束相匹配。有两种方法可用来验证 BO 实例:

  • 利用数据验证限定符
  • 调用 BOInstanceValidator APIs

本文主要讨论在 WebSphere Process Server 中进行业务对象验证,演示如何创建带约束的业务对象,以及如何在运行时中根据已定义的约束验证业务对象实例。





回页首


根据约束定义业务对象

业务对象是应用程序数据(如客户或者发票)的容器。业务对象的底层结构是一个 XML 模式定义(XSD)。您可以通过直接在 WebSphere Integration Developer 中创建一个业务对象或者导入一个现有的 XSD 文件,从而对业务对象进行定义。您可以为它的元素添加约束,从而在运行时环境中进一步验证。

如要创建带约束的业务对象,您可以下载一个 示例模块

  1. 选择 File > Import,遵循 Import Wizard,然后选择 Project Interchange(图 1),把示例模块导入您的工作区,以继续后面的操作。

    图 1. Import Wizard
    Import Wizard

  2. 在示例模块中,您能够找到三个业务对象:User、Order 和 Item。如图 2 所示。

    图 2. 示例中的 Business Objects
    示例中的 Business Objects

  3. 为业务对象(User,Order 和 Item)元素添加约束。您可以给 XSD 内置的原语类型添加约束,以进行特定的验证检查。要查看显示数据类型和约束支持的表的链接,请参见 Quality of service qualifier reference。我们将通过 String 类型和它支持的约束(如 Length、minLength、maxLength、Pattern、Enumeration 等等)来说明这个部分。
  4. 限制在 String 类型中的元素的长度。定义 User 的 ID 元素的长度限制:
    1. 在业务对象编辑器中打开 User,然后通过单击选择 ID 字段。
    2. 在 Properties 视图中,把 Minimum lengthMaximum length 分别设为 8 和 16,如图 3 所示。
    3. OrderItemID 元素添加和上面相同的约束,用以限制长度。

      图 3. 定义长度约束
      定义长度约束

  5. 在 String 类型中,为元素添加 Enumeration 约束。假设订单状态仅限于特定的一些枚举值。要定义这个约束,执行下面的操作:
    1. 在业务对象编辑器中打开 Order,然后选择 status 字段。
    2. 在 Properties 视图中,选择复选框 Only permit certain values
    3. 选择 Enumerations,然后添加枚举值,如图 4 所示。


    图 4. 定义 Enumeration 约束
    定义 Enumeration 约束

  6. 在 String 类型中,为元素添加 Pattern 约束:
    1. 假设用户密码遵循一个规则 “由字母和数字等混合字符组成,最短 6 个字符,最长 16 个字符”。
    2. 您可以使用正则表达式描述这个规则。为了便于正则表达式的编写和测试,在业务对象编辑器中,提供了一个 RegularExpression Wizard
    3. 要定义这个约束,在业务对象编辑器中打开 User,然后选择 password 字段。
    4. 在 Properties 视图,选择 Only permit certain values
    5. 单击 Patterns,将会打开 Regular Expression Wizard。要为密码规则创建正则表达式,对 Token contents 选择 Alphanumeric character ( \w )。然后,在 Occurrence Range 中输入类型 6 到 16,如图 5 所示,然后单击 Add

      图 5. 在 Regular Expression Wizard 中编写正则表达式
      在 Regular Expression Wizard 中编写正则表达式

    6. 单击 Next。您可以加入示例文本,测试正则表达式(图 6)。显示匹配结果后,单击 Finish

      图 6. 在 Regular Expression Wizard 中测试正则表达式
      在 Regular Expression Wizard 中测试正则表达式

    7. 在 Patterns(图 7)中添加了一个正则表达式。

      图 7. 定义 Pattern 限制
      定义 Pattern 限制





回页首


验证业务对象实例

有两种方法可用来在运行时中验证业务对象实例,如上述 XSD 约束所定义:

  • 使用数据验证限定符
  • 使用 BOinstanceValidator APIs

使用数据验证限定符

您可以使用一个数据验证限定符验证来自业务对象的实例数据。构成限定符的运行时验证器将检查业务对象正在传递的 XSD 类型是否是客户所期望的类型。为 WSDL 界面添加限定符时,传递进来的数据对象将得到验证。

  1. 在 WSDL 界面添加数据验证限定符。您可以把限定符设为三个级别:
    • 组件的所有界面
    • 单个界面
    • 一个界面的单个操作。在本文中将把它应用在最后一个级别。
  2. 打开示例模块的组装图表,然后选择 SaveUserInfo 组件。
  3. 在 Properties 视图中,选择 Interfaces > SaveUser(界面)> saveUserInfo(操作)。
  4. 单击 Qualifiers 标签,然后添加 Data 验证限定符,如图 8 所示。

    图 8. 添加数据验证限定符
    添加数据验证限定符

  5. 定义限定符设置:Log error and continue (default) 和 Throw exception。如果在 BO 实例验证中出现了异常情况,限定符设置将定义动作。数据验证限定符有两种设置:
    • Log error and continue (default):如果在验证的过程中出现异常情况,相关的错误将被记录到日志中,继续执行所请求操作。由于无法保证服务能够处理无效数据,因此,导致了一个运行时错误。
    • Throw exception:如果在验证过程中出现异常情况,将会抛出一个异常,所请求操作也将停止执行。

      图 9. 定义限定符设置
      定义限定符设置

  6. 测试限定符:
    1. 启动服务器,并且在其上部署示例应用程序(图 10)。

      图 10. 部署应用程序
      部署应用程序

    2. 打开示例模块的组装图表,右键单击 SaveUserInfo 组件,然后选择 Test Component
    3. User 输入数据,如图 11 所示。然后,单击绿色箭头。

      图 11. 输入数据 1
      输入数据 1

      由于 User 中的密码元素的模式约束被违背,而且 Throw exception 被选为针对错误执行的动作,因此将抛出一个异常。检查服务器日志,您会发现所请求的操作 saveUserInfo() 已经停止了执行(图 12)。

      图 12. 验证结果 1
      验证结果 1

    4. User 输入数据,包括它的子 BO:Order Item(图 13),然后单击绿色箭头。

      图 13. 输入数据 2
      输入数据 2

数据验证限定符对 BO 实例进行深度验证。如果一个 BO 有子 BO,整个 BO 树都将得到验证。因此,当 User 的实例传递进来后,OrderItem 的内部 BO 实例也会得到检查。然后,抛出一个异常,指出 user/orders[0]/items[0]/ID 长度约束被违背(图 14)。


图 14. 验证结果 2
验证结果 2

使用 BOInstanceValidator APIs

在 WebSphere Process Server 中,BO Instance Validator 服务支持数据验证限定符。这个服务也提供 BOInstanceValidator APIs,用来验证 BO 实例。

  1. 帮助客户机确定 BO Instance Validator 服务的位置:
    BOInstanceValidator boValidator=(BOInstanceValidator)ServiceManager.INSTANCE.
      locateService("com/ibm/websphere/bo/BOInstanceValidator");
    

  2. 帮助客户对 BO 实例进行具有深度的验证。下面的代码同时验证了一个 User 实例以及 OrderItem 的内部实例。
    ArrayList diagnostics = new ArrayList();
    boolean result = boValidator.validate(user, diagnostics);
    System.out.println("The result of validate() is: " + result);
    
    //Print the diagnostics info
    if (!result) {
          Iterator errorList = diagnostics.iterator();
          while(errorList.hasNext()){
                 DataObject error = (DataObject)errorList.next();
                 System.out.println("Error property: " + error.get("property"));
                 System.out.println("Error message: " + error.get("message"));
    }
    }
    

  3. 帮助客户机对 BO 实例进行简单的验证。仅仅对 BO 树的第一层进行验证。下面的代码验证一个 User 实例,但是,没有对 Order 和 Item 的内部实例进行验证。
    boolean result = boValidator.validateShallow(user, diagnostics);
    

  4. 帮助客户机对 BO 实例的属性进行详细的或者简单的验证。在下面的代码中,当一个 User 实例传递进来时,由属性路径(第二个参数)指定的 Order 实例将得到验证。validateProperty 方法对它们进行详细的验证,而 validatePropertyShallow 方法仅仅检查第一层,忽略内部的 Item 实例。
    boolean result1= boValidator.validateProperty(user, "orders", diagnostics);
    boolean result2= boValidator.validatePropertyShallow(user, "orders", diagnostics);
    





回页首


结束语

本文描述了 WebSphere Process Server 的业务对象实例验证服务。您可以调用这个服务进行隐式的 “基于接口限定符” 的验证,或者显式编程验证。您学习了如何定义带有约束的业务对象,以及如何验证业务对象实例。






回页首


下载

描述名字大小下载方法
代码样例BOValidation_PI.zip23 KBHTTP
关于下载方法的信息


参考资料

学习

获得产品和技术
  • 下载 IBM 产品评估版 ,并开始使用来自 DB2、Lotus、Rational、Tivoli 和 WebSphere® 的应用程序开发工具和中间件产品。


作者简介

Zhi Qiu Xie 的照片

Zhi Qiu Xie 是位于中国北京的 IBM China Development Lab 的一名软件工程师。他曾在 WebSphere Process Server 系统验证团队工作了两年,目前在 Business Process Management Integration Quality Assurance 团队工作。


Zi Hui Duan 的照片

Zi Hui Duan 是位于中国北京的 IBM China Development Lab 的一名资深软件工程师。他曾从事 WebSphere Process Server L3 支持,目前效力于 Business Process Management Integration Quality Assurance 团队。




对本文的评价








IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款