35.2. 속성
35.2.1. 개요
Apache CXF는 복잡한 Type 요소 범위 내에서 특성 요소 및 요소의 사용을 지원합니다. XML 문서 특성 선언에 대한 구조를 정의할 때 태그가 포함된 값이 아니라 태그 내에 지정된 정보를 추가할 수 있는 수단을 제공합니다. 예를 들어 XML 스키마의 XML 요소 <값 attribute Groupcurrency ="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 스키마에서 특성을 정의하는 데 사용됨
| 속성 | 설명 |
|---|---|
|
|
특성이 필요한지 여부를 지정합니다. 유효한 값은 |
|
| 특성에서 사용할 수 있는 값의 형식을 지정합니다.Specifies the type of value the attribute can take. 사용되지 않는 경우 특성의 스키마 유형을 인라인으로 정의해야 합니다. |
|
|
특성에 사용할 기본값을 지정합니다. |
|
|
특성에 사용할 고정 값을 지정합니다.Specifies a fixed value to use for the attribute. |
예 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 스키마에서 특성 그룹 사용
복잡한 유형 정의에서 특성 그룹을 사용하는 것은 두 가지 단계 프로세스입니다.
특성 그룹을 정의합니다.
특성 그룹은 여러 특성 하위 요소가 있는
요소를 사용하여 정의합니다.attributeGroupattributeGroup에는 특성 그룹을 참조하는 데 사용되는 문자열을 정의하는name속성이 필요합니다.특성 요소는 특성그룹의 멤버를 정의하고 “XML 스키마에서 속성 정의” 와 같이 지정됩니다. 예 35.7. “특성 그룹 정의” 특성 그룹catalogIndecies에 대한 설명을 보여줍니다. 속성 그룹에는 두 개의 멤버가 있습니다.범주는 선택 사항이며pubDate는 필수 항목입니다.예 35.7. 특성 그룹 정의
<attributeGroup name="catalogIndices"> <attribute name="category" type="catagoryType" /> <attribute name="pubDate" type="dateTime" use="required" /> </attributeGroup>복합 유형의 정의에서 특성 그룹을 사용합니다.
ref속성과 함께attributeGroup요소를 사용하여 복잡한 유형 정의에서 특성 그룹을 사용합니다.ref특성의 값은 유형 정의의 일부로 사용하려는 특성 그룹이 지정된 이름입니다. 예를 들어 복잡한 유형dvdType에서 특성 groupcatalogIndecies를 사용하려면 예 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;
}
}