35.2. 속성
35.2.1. 개요
Apache CXF는 complexType 요소의 범위 내에서 속성 요소 및 요소의 사용을 지원합니다. XML 문서 특성 선언에 대한 구조를 정의할 때 태그 내에서 지정된 정보를 태그에 포함하는 값이 아닌 추가 수단을 제공합니다. 예를 들어 XML 스키마에서 XML 요소 <valuecurrency="euro">410<\value>를 설명하는 경우 attribute Group통화 속성은 예 35.5. “XML 스키마 정의 및 속성” 에 표시된 대로 특성 요소를 사용하여 설명합니다.
attributeGroup 요소를 사용하면 스키마에서 정의한 모든 복잡한 유형에서 참조할 수 있는 재사용 가능한 속성 그룹을 정의할 수 있습니다. 예를 들어 모두 특성 category 및 pubDate 를 사용하는 일련의 요소를 정의하는 경우 이러한 특성을 사용하여 특성 그룹을 정의하고 이를 사용하는 모든 요소에서 참조할 수 있습니다. 이는 예 35.7. “특성 그룹 정의” 에 표시됩니다.
애플리케이션 논리 개발에 사용할 데이터 유형을 설명하는 경우 use 특성이 선택 사항으로 설정되거나 필수 로 설정된 속성은 구조의 요소로 처리됩니다. 복잡한 형식 설명에 포함된 각 특성 선언에 대해 적절한 getter 및 setter 메서드와 함께 속성에 대한 클래스에서 요소가 생성됩니다.
35.2.2. XML 스키마에서 속성 정의
XML Schema 특성 요소에는 특성을 식별하는 데 사용되는 하나의 필수 특성인 name 이 있습니다. 또한 표 35.2. “XML 스키마에서 특성을 정의하는 데 사용되는 선택적 속성” 에 설명된 4개의 선택적 속성이 있습니다.
표 35.2. XML 스키마에서 특성을 정의하는 데 사용되는 선택적 속성
| 속성 | 설명 |
|---|---|
|
|
속성이 필요한지 여부를 지정합니다. 유효한 값은 |
|
| 특성에서 사용할 수 있는 값의 유형을 지정합니다. 사용하지 않는 경우 속성의 스키마 유형을 행으로 정의해야 합니다. |
|
|
속성에 사용할 기본값을 지정합니다. |
|
|
속성에 사용할 고정 값을 지정합니다. |
예 35.5. “XML 스키마 정의 및 속성” 값이 문자열인 속성, 통화, 특성을 정의하는 요소를 표시합니다.
예 35.5. XML 스키마 정의 및 속성
<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. “인라인 데이터 설명이 있는 속성” autobiography,non-fiction 또는 fiction 값을 사용할 수 있는 속성, 카테고리 의 특성 요소를 표시합니다.
예 35.6. 인라인 데이터 설명이 있는 속성
<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에 대한 설명을 표시합니다. 특성 그룹에는 두 개의 멤버가 있습니다.category, which is optional, andpubDate, which is required.예 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 클래스에서 멤버 변수에 매핑됩니다. 멤버 변수는 @ CryostatAttribute 주석으로 데코레이팅됩니다. 속성이 필요한 경우 @ CryostatAttribute 주석의 required 속성이 true 로 설정됩니다.
예 35.9. “techdoc 설명” 에 정의된 복잡한 유형은 예 35.10. “techDoc Java Class” 에 표시된 Java 클래스에 매핑됩니다.
예 35.9. techdoc 설명
<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” 에 표시된 대로 기본 속성 및 고정 속성은 코드 생성기가 속성에 대해 생성된 getter 메서드에 코드를 추가하도록 지시합니다. 이 추가 코드를 사용하면 값이 설정되지 않은 경우 지정된 값이 반환됩니다.
고정 속성은 default 속성과 동일하게 취급됩니다. 고정 속성을 Java 상수로 처리하려면 38.5절. “고정 값 속성 매핑 사용자 정의” 에 설명된 사용자 지정을 사용할 수 있습니다.
35.2.5. 특성 그룹을 Java에 매핑
특성 그룹은 그룹 멤버가 유형 정의에 명시적으로 사용된 것처럼 Java에 매핑됩니다. 특성 그룹에 세 개의 멤버가 있고 복잡한 형식에 사용되는 경우 해당 유형에 대해 생성된 클래스에는 특성 그룹의 각 멤버에 대해 getter 및 setter 메서드와 함께 멤버 변수가 포함됩니다. 예를 들어 예 35.8. “특성 그룹을 사용하는 복잡한 유형” 에 정의된 복잡한 유형은 Apache CXF에서 멤버 변수 category 및 pubDate 를 포함하는 클래스를 생성하여 예 35.11. “dvdType Java Class” 에 표시된 대로 특성 그룹의 멤버를 지원합니다.
예 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;
}
}