37.3.2. checkWidgets Operation

概述

checkWidgets 是一个简单操作,其参数是替换组的头成员。此操作演示了如何处理作为替换组的成员的单个参数。使用者必须确保 参数是替换组群的有效成员。该服务必须正确确定在请求中发送替换组的成员。

消费者实施

生成的方法签名使用 Java 类来支持替换组的 head 元素类型。由于替换组的成员元素是与 head 元素类型相同的类型,或者由 head 元素类型派生的 Java 类,生成的 Java 类从生成的 Java 类中继承为支持 head 元素的 Java 类。Java 类型层次结构原生支持使用子类来代替父类。

由于 Apache CXF 如何生成替换组和 Java 类型层次结构的类型,客户端可以在不使用任何特殊代码的情况下调用 checkWidgets()。当开发逻辑来调用 checkWidgets() 时,您可以传递一个类的对象,以支持 widget 替换组。

例 37.14 “消费者检查 检查Widgets() 显示调用 checkWidgets() 的使用者。

例 37.14. 消费者检查 检查Widgets()

System.out.println("What type of widgets do you want to order?");
System.out.println("1 - Normal");
System.out.println("2 - Wood");
System.out.println("3 - Plastic");
System.out.println("Selection [1-3]");
String selection = reader.readLine();
String trimmed = selection.trim();
char widgetType = trimmed.charAt(0);
switch (widgetType)
{
  case '1':
  {
    WidgetType widget = new WidgetType();
    ...
    break;
  }
  case '2':
  {
    WoodWidgetType widget = new WoodWidgetType();
    ...
    break;
  }
  case '3':
  {
    PlasticWidgetType widget = new PlasticWidgetType();
    ...
    break;
  }
  default :
    System.out.println("Invaid Widget Selection!!");
}

proxy.checkWidgets(widgets);

服务实施

该服务的 checkWidgets() 实施会将一个小部件描述作为 widget Type 对象获取,检查小部件清单,并返回库存中的小部件数量。由于用于实施替换组的所有类都会从同一基础类继承,因此您可以在不使用任何 JAXB 特定的 API 的情况下实施 checkWidgets()

生成的所有类,以支持 widget 的 replace 组的成员扩展 widget Type 类。由于这一事实,您可以使用 instanceof 确定传递的小部件类型,只需在适当的时将 widgetPart 对象转换为更严格的类型。具有正确类型对象后,您可以检查正确类型的小部件。

例 37.15 “checkWidgets()的服务实施” 显示可能的实施。

例 37.15. checkWidgets()的服务实施

public int checkWidgets(WidgetType widgetPart)
{
  if (widgetPart instanceof WidgetType)
  {
    return checkWidgetInventory(widgetType);
  }
  else if (widgetPart instanceof WoodWidgetType)
  {
    WoodWidgetType widget = (WoodWidgetType)widgetPart;
    return checkWoodWidgetInventory(widget);
  }
  else if (widgetPart instanceof PlasticWidgetType)
  {
    PlasticWidgetType widget = (PlasticWidgetType)widgetPart;
    return checkPlasticWidgetInventory(widget);
  }
}