35.2. 속성

35.2.1. 개요

Apache CXF는 복잡한 Type 요소 범위 내에서 특성 요소 및 attribute Group 요소의 사용을 지원합니다. XML 문서 특성 선언에 대한 구조를 정의할 때 태그가 포함된 값이 아니라 태그 내에 지정된 정보를 추가할 수 있는 수단을 제공합니다. 예를 들어 XML 스키마의 XML 요소 <값 currency ="euro">410<\value>을 설명할 때 통화 속성은 예 35.5. “XML Schema Defining and Attribute” 과 같이 특성 요소를 사용하여 설명됩니다.

attributeGroup 요소를 사용하면 스키마에서 정의한 모든 복잡한 유형에서 참조할 수 있는 재사용 가능한 속성 그룹을 정의할 수 있습니다. 예를 들어 특성 카테고리pubDate 를 사용하는 일련의 요소를 정의하는 경우 이러한 속성을 사용하여 특성 그룹을 정의하고 이를 사용하는 모든 요소에서 해당 요소를 참조할 수 있습니다. 이는 예 35.7. “특성 그룹 정의” 에 표시됩니다.

애플리케이션 논리 개발에 사용할 데이터 유형을 설명하는 경우, 속성을 선택적 또는 필수 로 설정된 특성은 구조의 요소로 취급됩니다. 복잡한 형식 설명에 포함된 각 특성 선언에 대해 요소(element)는 적절한 getter 및 setter 메서드와 함께 특성 클래스에 생성됩니다.

35.2.2. XML 스키마에서 속성 정의

XML Schema 특성 요소에는 특성을 식별하는 데 사용되는 필수 특성이 한 개 있습니다.An XML Schema attribute element has one required attribute, name, that is used to identify the attribute. 또한 표 35.2. “선택 사항 Attributes XML 스키마에서 특성을 정의하는 데 사용됨” 에서 설명하는 네 가지 선택적 속성도 있습니다.

표 35.2. 선택 사항 Attributes XML 스키마에서 특성을 정의하는 데 사용됨

속성설명

Use

특성이 필요한지 여부를 지정합니다. 유효한 값은 필수,선택 사항 또는 금지 됩니다. 선택 사항이 기본값입니다.

type

특성에서 사용할 수 있는 값의 형식을 지정합니다.Specifies the type of value the attribute can take. 사용되지 않는 경우 특성의 스키마 유형을 인라인으로 정의해야 합니다.

default

특성에 사용할 기본값을 지정합니다. 특성 요소의 use 특성선택 옵션으로 설정된 경우에만 사용됩니다.

fixed

특성에 사용할 고정 값을 지정합니다.Specifies a fixed value to use for the attribute. 특성 요소의 use 특성선택 옵션으로 설정된 경우에만 사용됩니다.

예 35.5. “XML Schema Defining and Attribute” 값이 문자열인 특성을 정의하는 특성 요소를 표시합니다.Shows an attribute element defining an attribute, currency, whose value is a string.

예 35.5. XML Schema Defining and Attribute

<element name="value">
  <complexType>
    <xsd:simpleContent>
      <xsd:extension base="xsd:integer">
        <xsd:attribute name="currency" type="xsd:string"
                       use="required"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
</xsd:element>

특성 요소에서 type 속성 을 생략하면 데이터 형식을 줄 바꿈으로 설명해야 합니다. 예 35.6. “In-Line Data Description의 특성” 특성, 카테고리, 값을 autobiography,non-fiction 또는 fiction 을 사용할 수 있는 속성 요소를 표시합니다.

예 35.6. In-Line Data Description의 특성

<attribute name="category" use="required">
  <simpleType>
    <restriction base="xsd:string">
      <enumeration value="autobiography"/>
      <enumeration value="non-fiction"/>
      <enumeration value="fiction"/>
    </restriction>
  </simpleType>
</attribute>

35.2.3. XML 스키마에서 특성 그룹 사용

복잡한 유형 정의에서 특성 그룹을 사용하는 것은 두 가지 단계 프로세스입니다.

  1. 특성 그룹을 정의합니다.

    특성 그룹은 여러 특성 하위 요소가 있는 attribute Group 요소를 사용하여 정의합니다. attributeGroup 에는 특성 그룹을 참조하는 데 사용되는 문자열을 정의하는 name 속성이 필요합니다. 특성 요소는 특성 그룹의 멤버를 정의하고 “XML 스키마에서 속성 정의” 와 같이 지정됩니다. 예 35.7. “특성 그룹 정의” 특성 그룹 catalogIndecies 에 대한 설명을 보여줍니다. 속성 그룹에는 두 개의 멤버가 있습니다. 범주 는 선택 사항이며 pubDate 는 필수 항목입니다.

    예 35.7. 특성 그룹 정의

    <attributeGroup name="catalogIndices">
      <attribute name="category" type="catagoryType" />
      <attribute name="pubDate" type="dateTime"
                 use="required" />
    </attributeGroup>
  2. 복합 유형의 정의에서 특성 그룹을 사용합니다.

    ref 속성과 함께 attributeGroup 요소를 사용하여 복잡한 유형 정의에서 특성 그룹을 사용합니다. ref 특성의 값은 유형 정의의 일부로 사용하려는 특성 그룹이 지정된 이름입니다. 예를 들어 복잡한 유형 dvdType 에서 특성 group catalogIndecies 를 사용하려면 예 35.8. “특성 그룹을 사용하는 복합 유형” 에 표시된 대로 <attributeGroup ref="catalogIndecies" />를 사용합니다.

    예 35.8. 특성 그룹을 사용하는 복합 유형

    <complexType name="dvdType">
      <sequence>
        <element name="title" type="xsd:string" />
        <element name="director" type="xsd:string" />
        <element name="numCopies" type="xsd:int" />
      </sequence>
      <attributeGroup ref="catalogIndices" />
    </complexType>

35.2.4. Java에 속성 매핑

특성은 멤버 요소가 Java에 매핑되는 방식과 동일하게 Java에 매핑됩니다. 필수 속성 및 선택적 특성은 생성된 Java 클래스의 멤버 변수에 매핑됩니다. 멤버 변수는 @XmlAttribute 주석으로 장식됩니다. 속성이 필요한 경우 @XmlAttribute 주석의 required 속성이 true 로 설정됩니다.

예 35.9. “techDoc Description” 에 정의된 복잡한 유형은 예 35.10. “techDoc Java Class” 에 표시된 Java 클래스에 매핑됩니다.

예 35.9. techDoc Description

<complexType name="techDoc">
  <all>
    <element name="product" type="xsd:string" />
    <element name="version" type="xsd:short" />
  </all>
  <attribute name="usefullness" type="xsd:float"
             use="optional" default="0.01" />
</complexType>

예 35.10. techDoc Java Class

@XmlType(name = "techDoc", propOrder = {

})
public class TechDoc {

    @XmlElement(required = true)
    protected String product;
    protected short version;
    @XmlAttribute protected Float usefullness;

    public String getProduct() {
        return product;
    }

    public void setProduct(String value) {
        this.product = value;
    }

    public short getVersion() {
        return version;
    }

    public void setVersion(short value) {
        this.version = value;
    }

    public float getUsefullness() { if (usefullness == null) { return 0.01F; } else { return usefullness; } }

    public void setUsefullness(Float value) {
        this.usefullness = value;
    }
}

예 35.10. “techDoc Java Class” 에 표시된 대로 default 속성 및 fixed 특성은 특성에 대해 생성된 getter 메서드에 코드를 추가하도록 코드 생성기에 지시합니다. 이 추가 코드는 값이 설정되지 않은 경우 지정된 값이 반환되도록 합니다.

중요

고정 속성은 default 특성과 동일하게 처리됩니다. 고정 특성을 Java 상수로 처리하려면 38.5절. “Fixed Value Attribute Mapping” 에 설명된 사용자 지정을 사용할 수 있습니다.

35.2.5. 속성 그룹을 Java로 매핑

특성 그룹은 그룹 멤버가 형식 정의에서 명시적으로 사용되는 것처럼 Java에 매핑됩니다. 특성 그룹에 세 개의 멤버가 있고 복잡한 형식으로 사용되는 경우 해당 형식에 대해 생성된 클래스에는 특성 그룹의 각 멤버에 대해 getter 및 setter 메서드와 함께 멤버 변수가 포함됩니다. 예를 들어 예 35.8. “특성 그룹을 사용하는 복합 유형” 에 정의된 복잡한 유형인 Apache CXF는 예 35.11. “dvdType Java Class” 에 표시된 대로 특성 그룹의 멤버를 지원하기 위해 멤버 변수 카테고리pubDate 를 포함하는 클래스를 생성합니다.

예 35.11. dvdType Java Class

@XmlType(name = "dvdType", propOrder = {
    "title",
    "director",
    "numCopies"
})
public class DvdType {

    @XmlElement(required = true)
    protected String title;
    @XmlElement(required = true)
    protected String director;
    protected int numCopies;
    @XmlAttribute protected CatagoryType category; @XmlAttribute(required = true) @XmlSchemaType(name = "dateTime") protected XMLGregorianCalendar pubDate;

    public String getTitle() {
        return title;
    }

    public void setTitle(String value) {
        this.title = value;
    }

    public String getDirector() {
        return director;
    }

    public void setDirector(String value) {
        this.director = value;
    }

    public int getNumCopies() {
        return numCopies;
    }

    public void setNumCopies(int value) {
        this.numCopies = value;
    }

    public CatagoryType getCatagory() {
        return catagory;
    }

    public void setCatagory(CatagoryType value) {
        this.catagory = value;
    }

    public XMLGregorianCalendar getPubDate() {
        return pubDate;
    }

    public void setPubDate(XMLGregorianCalendar value) {
        this.pubDate = value;
    }

}