36.2. XML Schema anyType 유형 사용
36.2.1. 개요
XML Schema 유형 xsd:anyType 은 모든 XML 스키마 유형의 루트 유형입니다. 모든 프리미티브는 모든 사용자가 정의한 복잡한 유형과 마찬가지로 이 유형의 파생체입니다. 결과적으로 xsd:anyType 으로 정의된 요소는 스키마 문서에 정의된 모든 복잡한 유형뿐만 아니라 XML 스키마 프리미티브의 형태로 데이터를 포함할 수 있습니다.
Java에서 가장 일치하는 유형은 Object 클래스입니다. 다른 모든 Java 클래스가 하위 형식의 클래스입니다.
36.2.2. XML 스키마에서 사용
다른 XML 스키마 복잡한 유형과 마찬가지로 xsd:anyType 유형을 사용합니다. 요소의 type 요소의 값으로 사용할 수 있습니다. 다른 유형이 정의된 기본 유형으로도 사용할 수 있습니다.
예 36.5. “와일드카드 요소가 포함된 복잡한 유형” Xsd :anyType 유형의 요소를 포함하는 복잡한 유형의 예를 보여줍니다.
예 36.5. 와일드카드 요소가 포함된 복잡한 유형
<complexType name="wildStar">
<sequence>
<element name="name" type="xsd:string" />
<element name="ship" type="xsd:anyType" />
</sequence>
</complexType>36.2.3. Java에 매핑
xsd:anyType 유형의 요소는 Object 오브젝트에 매핑됩니다. 예 36.6. “Java 카드 요소 표시” 예 36.5. “와일드카드 요소가 포함된 복잡한 유형” 에서 Java 클래스에 대한 매핑을 표시합니다.
예 36.6. Java 카드 요소 표시
public class WildStar {
@XmlElement(required = true)
protected String name;
@XmlElement(required = true) protected Object ship;
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
public Object getShip() { return ship; }
public void setShip(Object value) { this.ship = value; }
}이 매핑을 사용하면 와일드카드 요소를 나타내는 속성에 모든 데이터를 배치할 수 있습니다. Apache CXF 런타임은 데이터를 사용 가능한 Java 표현으로 마샬링 및 비마태링합니다.
36.2.4. 마샬링
Apache CXF가 XML 데이터를 Java 유형으로 마샬링하면 모든Type 요소를 알려진 CryostatB 객체로 마샬링합니다. anyType 요소가 생성된 오브젝트로 마샬링될 수 있는지 확인하기 위해 런타임은 요소의 xsi:type 특성을 검사하여 요소에서 데이터를 구성하는 데 사용되는 실제 유형을 결정합니다. xsi:type 속성이 없으면 런타임은 인트로스펙션을 통해 요소의 실제 데이터 유형을 식별하려고 합니다. 요소의 실제 데이터 유형이 애플리케이션's CryostatB 컨텍스트에서 알려진 유형 중 하나로 결정되면 해당 요소는 적절한 유형의 개체로 마샬링됩니다.
런타임에서 요소의 실제 데이터 유형을 확인할 수 없거나 요소의 실제 데이터 형식이 알려진 유형이 아닌 경우 런타임은 콘텐츠를 org.w3c.dom. Cryostat 개체로 마샬링합니다. 그런 다음 192.0.2. APis를 사용하여 요소의 콘텐츠를 작업해야합니다.
애플리케이션 런타임은 일반적으로 계약에 포함된 스키마에서 생성된 모든 유형을 알고 있습니다. 여기에는 계약의 wsdl:types 요소에 정의된 유형, 포함을 통해 계약에 추가된 모든 데이터 유형, 다른 스키마 문서 가져오기를 통해 계약에 추가된 모든 유형이 포함됩니다. 32.4절. “런타임 Marshaller에 클래스 추가” 에 설명된 @ CryostatSeeAlso 주석을 사용하여 런타임에서 추가 유형을 인식할 수도 있습니다.
36.2.5. unmarshalling
Apache CXF에서 XML 데이터로 Java 유형을 unmarshalshal하면 Java 데이터 유형과 XML 스키마 구조 간의 내부 맵을 사용하여 이니어에 쓸 XML 구조를 결정합니다. 런타임에서 클래스를 알고 XML 스키마 구조에 클래스를 매핑할 수 있는 경우 데이터를 작성하고 xsi:type 속성을 삽입하여 요소가 포함하는 데이터 유형을 식별합니다. 데이터가 org.w3c.dom. Cryostat 개체에 저장된 경우 런타임은 개체에 의해 표시되는 XML 구조를 작성하지만 xsi:type 특성은 포함하지 않습니다.
런타임에서 Java 개체를 알려진 XML 스키마 구조에 매핑할 수 없는 경우 마샬링 예외가 발생합니다. 32.4절. “런타임 Marshaller에 클래스 추가” 에 설명된 @ CryostatSeeAlso 주석을 사용하여 런타임 맵에 형식을 추가할 수 있습니다.