37.3.2. checkWidgets Operation
概述
checkWidget
是一个简单操作,它有一个参数是替换组的头成员。此操作演示了如何处理作为替换组成员的单个参数。消费者必须确保 参数是替换组的成员。该服务必须正确决定在请求中发送的替换组的成员。
消费者实施
生成的方法签名使用 Java 类,支持替换组的 head 元素类型。由于替换组的 member 元素与 head 元素或来自 head 元素的类型相同,所以生成的 Java 类是支持从 Java 类继承的替换组的成员来支持 head 元素。Java 的类型层次结构原生支持使用子类来代替父类。
由于 Apache CXF 如何为替换组和 Java 类型层次结构生成类型,客户端可以在不使用任何特殊代码的情况下调用 checkWidgets ()
。在开发用于调用 checkWidgets ()
的逻辑时,您可以传递生成的其中一个类对象来支持小部件替换组。
例 37.14 “consumer Invoking checkWidgets ()
” 显示调用 checkWidgets ()
的使用者。
例 37.14. consumer Invoking checkWidgets ()
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 ()
获取一个小部件描述作为 WidgetType
对象,检查小部件清单,并返回库存中的小部件数量。由于用于实施替换组的所有类都继承自同一基础类,因此您无需使用任何 JAXB 特定的 API,即可实施 checkWidgets ()
。
所有生成的类都用于支持 widget
扩展 WidgetType
类的替换组的成员。鉴于这一事实,您可以使用 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); } }