37.3.3. placeWidgetOrder 작업


37.3.3.1. 개요

placeWidgetOrder 는 대체 그룹을 포함하는 두 가지 복잡한 유형을 사용합니다. 이 작업은 Java 구현에서 이러한 구조를 사용하는 방법을 보여줍니다. 소비자와 서비스 둘 다 대체 그룹의 멤버를 가져오고 설정해야 합니다.

37.3.3.2. 소비자 구현

placeWidgetOrder() 를 호출하려면 소비자가 위젯 대체 그룹의 하나의 요소가 포함된 위젯 순서를 구성해야 합니다. 주문에 위젯을 추가할 때 소비자는 대체 그룹의 각 요소에 대해 생성된 개체 팩토리 메서드를 사용해야 합니다. 이렇게 하면 런타임 및 서비스가 순서를 올바르게 처리할 수 있습니다. 예를 들어, 플라스틱 위젯에 대한 순서가 배치되는 경우 ObjectFactory.createPlasticWidget() 메서드는 순서에 추가하기 전에 요소를 만드는 데 사용됩니다.

예 37.16. “하위 그룹 멤버 설정” 위젯 OrderInfo 개체의 위젯 속성 을 설정하기 위 한 소비자 코드를 표시합니다.

예 37.16. 하위 그룹 멤버 설정

ObjectFactory of = new ObjectFactory();

WidgetOrderInfo order = new of.createWidgetOrderInfo();
...
System.out.println();
System.out.println("What color widgets do you want to order?");
String color = reader.readLine();
System.out.println();
System.out.println("What shape widgets do you want to order?");
String shape = reader.readLine();
System.out.println();
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 = of.createWidgetType();
    widget.setColor(color);
    widget.setShape(shape);
    JAXB<WidgetType> widgetElement = of.createWidget(widget); order.setWidget(widgetElement);
    break;
  }
  case '2':
  {
    WoodWidgetType woodWidget = of.createWoodWidgetType();
    woodWidget.setColor(color);
    woodWidget.setShape(shape);
    System.out.println();
    System.out.println("What type of wood are your widgets?");
    String wood = reader.readLine();
    woodWidget.setWoodType(wood);
    JAXB<WoodWidgetType> widgetElement = of.createWoodWidget(woodWidget); order.setWoodWidget(widgetElement);
    break;
  }
  case '3':
  {
    PlasticWidgetType plasticWidget = of.createPlasticWidgetType();
    plasticWidget.setColor(color);
    plasticWidget.setShape(shape);
    System.out.println();
    System.out.println("What type of mold to use for your
                        widgets?");
    String mold = reader.readLine();
    plasticWidget.setMoldProcess(mold);
    JAXB<WidgetType> widgetElement = of.createPlasticWidget(plasticWidget); order.setPlasticWidget(widgetElement);
    break;
  }
  default :
    System.out.println("Invaid Widget Selection!!");
    }

37.3.3.3. 서비스 구현

placeWidgetOrder() 메서드는 WidgetOrderInfo 개체 형태로 주문을 수신하고, 주문을 처리하며, 위젯 OrderBillInfo 개체 형태로 소비자에게 청구서를 반환합니다. 주문은 일반 위젯, 플라스틱 위젯 또는 목재 위젯일 수 있습니다. 주문한 위젯 유형은 widget OrderForm 오브젝트의 위젯 속성에 저장되는 오브젝트 유형에 따라 결정됩니다. 위젯 속성은 대체 그룹이며 위젯 요소, woodWid get 요소 또는 plasticWidget 요소를 포함할 수 있습니다.

구현은 순서에 따라 가능한 요소 중 어느 것이 저장되는지 결정해야합니다. 이 작업은 JAXBElement<? 확장 T > 개체의 getName() 메서드를 사용하여 요소의 QName을 결정합니다. 그런 다음 QName을 사용하여 대체 그룹의 요소를 순서대로 결정할 수 있습니다. 청구서에 포함된 요소가 알려지면 해당 값을 적절한 유형의 개체로 추출할 수 있습니다.

예 37.17. “placeWidgetOrder()구현” 가능한 구현을 보여줍니다.

예 37.17. placeWidgetOrder()구현

public com.widgetvendor.types.widgettypes.WidgetOrderBillInfo placeWidgetOrder(WidgetOrderInfo widgetOrderForm)
{
  ObjectFactory of = new ObjectFactory();

  WidgetOrderBillInfo bill = new WidgetOrderBillInfo()

   // Copy the shipping address and the number of widgets
   // ordered from widgetOrderForm to bill
   ...

  int numOrdered = widgetOrderForm.getAmount();

  String elementName = widgetOrderForm.getWidget().getName().getLocalPart();
  if (elementName.equals("woodWidget")
  {
    WoodWidgetType widget=order.getWidget().getValue();
    buildWoodWidget(widget, numOrdered);

    // Add the widget info to bill
    JAXBElement<WoodWidgetType> widgetElement = of.createWoodWidget(widget);
    bill.setWidget(widgetElement);

    float amtDue = numOrdered * 0.75;
    bill.setAmountDue(amtDue);
  }
  else if (elementName.equals("plasticWidget")
  {
    PlasticWidgetType widget=order.getWidget().getValue();
    buildPlasticWidget(widget, numOrdered);

    // Add the widget info to bill
    JAXBElement<PlasticWidgetType> widgetElement = of.createPlasticWidget(widget);
    bill.setWidget(widgetElement);

    float amtDue = numOrdered * 0.90;
    bill.setAmountDue(amtDue);
  }
  else
  {
    WidgetType widget=order.getWidget().getValue();
    buildWidget(widget, numOrdered);

    // Add the widget info to bill
    JAXBElement<WidgetType> widgetElement = of.createWidget(widget);
    bill.setWidget(widgetElement);

    float amtDue = numOrdered * 0.30;
    bill.setAmountDue(amtDue);
  }

  return(bill);
}

예 37.17. “placeWidgetOrder()구현” 의 코드는 다음을 수행합니다.

요소를 만들기 위해 개체 팩토리를 인스턴스화합니다.Sertss an object factory to create elements.

위젯 OrderBillInfo 개체를 인스턴스화하여 청구서를 보유합니다.

정렬된 위젯 수를 가져옵니다.Gets the number of widgets ordered.

순서에 저장된 요소의 로컬 이름을 가져옵니다.Gets the local name of the element stored in the order.

요소가 woodWidget 요소인지 확인합니다.

요소의 값을 순서에서 적절한 유형의 개체로 추출합니다.

bill에 있는 JAXBElement<T > 개체를 만듭니다.

bill 개체의 위젯 속성 설정합니다.

bill 개체의 amountDue 속성을 설정합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.