35.4. 복잡한 유형에서 복잡한 유형 파생


35.4.1. 개요

XML 스키마를 사용하면 complexContent 요소를 사용하여 다른 복잡한 형식을 확장하거나 제한하여 새로운 복잡한 형식을 파생할 수 있습니다. 파생된 복잡한 유형을 나타내는 Java 클래스를 생성할 때 Apache CXF는 기본 유형의 클래스를 확장합니다. 이러한 방식으로 생성된 Java 코드는 XML 스키마에서 의도한 상속 계층 구조를 유지합니다.

35.4.2. 스키마 구문

complexContent 요소 및 확장 요소 또는 제한 요소를 사용하여 다른 복잡한 형식에서 복잡한 형식을 파생합니다.You derive complex types from other complex types by using the complexContent element, and either the extension element or the restriction element. complexContent 요소는 포함된 데이터 설명이 두 개 이상의 필드를 포함하도록 지정합니다. complexContent 요소의 하위 요소인 extension 요소 및 제한 요소는 새 유형을 생성하기 위해 수정할 기본 유형을 지정합니다. 기본 유형은 base 속성으로 지정됩니다.

35.4.3. 복잡한 유형 확장

복잡한 형식을 확장하려면 extension 요소를 사용하여 새 형식을 구성하는 추가 요소 및 특성을 정의합니다. 복잡한 유형 설명에서 허용되는 모든 요소는 새 형식의 정의의 일부로 사용할 수 있습니다. 예를 들어 새 형식에 익명 열거를 추가하거나 선택 요소를 사용하여 새 필드 중 하나만 사용할 수 있도록 지정할 수 있습니다.For example, you can add an anonymous enumeration to the new type, or you can use the choice element to specify that only one of the new fields can be valid at a time.

예 35.15. “확장을 통해 복잡한 유형 파생” 두 가지 복잡한 유형인 widgetOrderInfowidgetOrderBillInfo 를 정의하는 XML 스키마 조각을 보여줍니다. widgetOrderBillInfowidgetOrderInfo 를 확장하여 orderNumberamtDue 라는 두 개의 새로운 요소를 포함하도록 파생됩니다.

예 35.15. 확장을 통해 복잡한 유형 파생

<complexType name="widgetOrderInfo">
  <sequence>
    <element name="amount" type="xsd:int"/>
    <element name="order_date" type="xsd:dateTime"/>
    <element name="type" type="xsd1:widgetSize"/>
    <element name="shippingAddress" type="xsd1:Address"/>
  </sequence>
  <attribute name="rush" type="xsd:boolean" use="optional" />
</complexType>
<complexType name="widgetOrderBillInfo">
  <complexContent>
    <extension base="xsd1:widgetOrderInfo">
      <sequence>
        <element name="amtDue" type="xsd:decimal"/>
        <element name="orderNumber" type="xsd:string"/>
      </sequence>
      <attribute name="paid" type="xsd:boolean"
                 default="false" />
    </extension>
  </complexContent>
</complexType>
Copy to Clipboard Toggle word wrap

35.4.4. 복잡한 유형 제한

복잡한 유형을 제한하려면 restriction 요소를 사용하여 기본 유형의 요소 또는 특성의 가능한 값을 제한합니다. 복잡한 유형을 제한할 때 기본 유형의 모든 요소 및 특성을 나열해야 합니다. 각 요소에 대해 정의에 제한적인 특성을 추가할 수 있습니다. 예를 들어 요소에 max#187 특성을 추가하여 발생할 수 있는 횟수를 제한할 수 있습니다. 고정 특성을 사용하여 하나 이상의 요소가 사전 결정된 값을 갖도록 할 수도 있습니다.

예 35.16. “제한별 복잡한 유형 정의” 다른 복잡한 유형을 제한하여 복잡한 형식을 정의하는 예를 보여줍니다. 제한된 유형인 wallawallaAddresscity 요소, state 요소 및 zipCode 요소에 대한 값이 고정되어 있기 때문에 walla walla의 주소에만 사용할 수 있습니다.

예 35.16. 제한별 복잡한 유형 정의

<complexType name="Address">
  <sequence>
    <element name="name" type="xsd:string"/>
    <element name="street" type="xsd:short" maxOccurs="3"/>
    <element name="city" type="xsd:string"/>
    <element name="state" type="xsd:string"/>
    <element name="zipCode" type="xsd:string"/>
  </sequence>
</complexType>
<complexType name="wallawallaAddress">
  <complexContent>
    <restriction base="xsd1:Address">
      <sequence>
        <element name="name" type="xsd:string"/>
        <element name="street" type="xsd:short"
                 maxOccurs="3"/>
        <element name="city" type="xsd:string"
                 fixed="WallaWalla"/>
        <element name="state" type="xsd:string"
                 fixed="WA" />
        <element name="zipCode" type="xsd:string"
                 fixed="99362" />
      </sequence>
    </restriction>
  </complexContent>
</complexType>
Copy to Clipboard Toggle word wrap

35.4.5. Java에 매핑

모든 복잡한 유형에서와 마찬가지로 Apache CXF는 다른 복잡한 유형에서 파생된 복잡한 유형을 나타내는 클래스를 생성합니다. 파생된 복잡한 형식에 대해 생성된 Java 클래스는 생성된 Java 클래스를 확장하여 기본 복잡한 유형을 지원합니다. 기본 Java 클래스도 @ CryostatSeeAlso 주석을 포함하도록 수정되었습니다. 기본 클래스의 @ CryostatSeeAlso 주석은 기본 클래스를 확장하는 모든 클래스를 나열합니다.

새로운 complex 유형이 확장에 의해 파생되면 생성된 클래스에는 추가된 모든 요소 및 속성에 대한 멤버 변수가 포함됩니다. 새 멤버 변수는 다른 모든 요소와 동일한 매핑에 따라 생성됩니다.

새로운 complex 유형이 제한에 의해 파생되면 생성된 클래스에는 새 멤버 변수가 없습니다. 생성된 클래스는 단순히 추가 기능을 제공하지 않는 쉘입니다. XML 스키마에 정의된 제한 사항이 적용되도록 하는 것은 전적으로 사용자에게 달려 있습니다.

예를 들어 예 35.15. “확장을 통해 복잡한 유형 파생” 의 스키마는 두 개의 Java 클래스를 생성합니다. 즉, OrderInfo 및 Cryostat BillOrderInfo. widgetOrderBillInfo widgetOrderInfo 의 확장에 의해 파생되기 때문에 CryostatOrderInfo를 확장합니다. 예 35.17. “WidgetOrderBillInfo” widgetOrderBillInfo 에 대한 생성된 클래스를 표시합니다.

예 35.17. WidgetOrderBillInfo

@XmlType(name = "widgetOrderBillInfo", propOrder = {
    "amtDue",
    "orderNumber"
})
public class WidgetOrderBillInfo
    extends WidgetOrderInfo
{
    @XmlElement(required = true)
    protected BigDecimal amtDue;
    @XmlElement(required = true)
    protected String orderNumber;
    @XmlAttribute
    protected Boolean paid;

    public BigDecimal getAmtDue() {
        return amtDue;
    }

    public void setAmtDue(BigDecimal value) {
        this.amtDue = value;
    }

    public String getOrderNumber() {
        return orderNumber;
    }

    public void setOrderNumber(String value) {
        this.orderNumber = value;
    }

    public boolean isPaid() {
        if (paid == null) {
            return false;
        } else {
            return paid;
        }
    }

    public void setPaid(Boolean value) {
        this.paid = value;
    }
}
Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat