36장. 와일드카드 유형 사용
초록
스키마 작성자가 정의된 형식에 바인딩 요소 또는 특성을 지연하려고 하는 인스턴스가 있습니다. 이러한 경우 XML 스키마는 와일드카드 위치 소유자를 지정하기 위한 세 가지 메커니즘을 제공합니다. 모두 XML 스키마 기능을 유지하는 방식으로 Java에 매핑됩니다.
36.1. 모든 사람 사용 링크 복사링크가 클립보드에 복사되었습니다!
36.1.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
XML 스키마는 모든 요소가 복잡한 유형 정의에서 와일드카드 위치 소유자를 만드는 데 사용됩니다. XML 요소가 XML 스키마에 대해 인스턴스화되는 경우 유효한 XML 요소일 수 있습니다. 모든 요소는 인스턴스화된 XML 요소의 콘텐츠 또는 이름에 제한이 없습니다.
예를 들어 예 36.1. “모든 요소를 사용하여 정의된 XML 스키마 유형” 에 정의된 복잡한 유형이 있는 경우 예 36.2. “모든 요소가 포함된 XML 문서” 에 표시된 XML 요소 중 하나를 인스턴스화할 수 있습니다.
예 36.1. 모든 요소를 사용하여 정의된 XML 스키마 유형
예 36.2. 모든 요소가 포함된 XML 문서
XML 스키마는 Java Object 개체 또는 Java org.w3c.dom. Cryostat 개체에 매핑 됩니다.
36.1.2. XML 스키마로 지정 링크 복사링크가 클립보드에 복사되었습니다!
시퀀스 복잡한 유형 및 선택 복잡한 유형을 정의할 때 any element를 사용할 수 있습니다. 대부분의 경우 모든 요소는 빈 요소입니다. 그러나 주석 요소를 자식으로 사용할 수 있습니다.
표 36.1. “XML 스키마의 모든 요소” 모든 요소의 특성에 대해 설명합니다.
| 속성 | 설명 |
|---|---|
|
| XML 문서에서 요소를 인스턴스화하는 데 사용할 수 있는 요소의 네임스페이스를 지정합니다. 유효한 값은 다음과 같습니다.
|
|
|
요소의 인스턴스가 부모 요소에 나타날 수 있는 최대 횟수를 지정합니다. 기본값은 |
|
|
요소 인스턴스가 부모 요소에 나타날 수 있는 최소 횟수를 지정합니다. 기본값은 |
|
| 유효성을 검사해야 하는 모든 요소를 인스턴스화하는 데 사용되는 요소를 지정합니다. 유효한 값은 다음과 같습니다.
|
예 36.3. “Any Element로 정의된 complex type” 모든 요소로 정의된 복잡한 유형을 표시합니다.
예 36.3. Any Element로 정의된 complex type
36.1.3. Java에 매핑 링크 복사링크가 클립보드에 복사되었습니다!
XML 스키마 를 사용하면 모든 요소가 이름이 지정된 Java 속성이 생성됩니다. 속성에 getter 및 setter 메서드가 연결되어 있습니다. 결과 속성의 유형은 요소의 processContents 속성 값에 따라 달라집니다. 임의의 요소의 processContents 속성이 skip 으로 설정된 경우 요소가 org.w3c.dom.dom. Cryostat 오브젝트에 매핑 됩니다. processContents 속성의 다른 모든 값에 대해 모든 요소가 Java Object 개체에 매핑됩니다.
생성된 속성은 @ CryostatAny Cryostat 주석으로 데코레이팅됩니다. 이 주석에는 데이터를 마샬링할 때 런타임에 수행할 작업을 지시하는 선택적 lax 속성이 있습니다. 기본값은 false 로, 런타임에서 데이터를 org.w3c.dom. Cryostat 개체로 자동으로 마샬링하도록 지시합니다. lax 를 true 로 설정하면 런타임에서 데이터를 CryostatB 유형으로 마샬링하도록 지시합니다. 임의의 요소의 processContents 속성이 skip 으로 설정되면 lax 속성이 기본값으로 설정됩니다. processContents 속성의 다른 모든 값에 대해 lax 는 true 로 설정됩니다.
예 36.4. “모든 요소가 포함된 Java 클래스” 예 36.3. “Any Element로 정의된 complex type” 에 정의된 복잡한 유형이 Java 클래스에 매핑되는 방법을 보여줍니다.
예 36.4. 모든 요소가 포함된 Java 클래스
36.1.4. 마샬링 링크 복사링크가 클립보드에 복사되었습니다!
모든 요소의 Java 속성에 lax 가 false 로 설정되어 있거나 속성이 지정되지 않은 경우 런타임에서 XML 데이터를 CryostatB 개체로 구문 분석하려고 하지 않습니다. 데이터는 항상 Cryostat Element 오브젝트에 저장됩니다.
모든 요소의 Java 속성에 lax 가 true 로 설정된 경우 런타임은 XML 데이터를 적절한 CryostatB 객체로 마샬링하려고 시도합니다. 런타임은 다음 절차를 사용하여 적절한 Cryostat 클래스를 식별하려고 합니다.
- 런타임에 알려진 요소 목록에 대해 XML 요소의 요소 태그를 확인합니다. 일치하는 항목을 찾으면 런타임에서 XML 데이터를 요소의 적절한 CryostatB 클래스로 마샬링합니다.
-
XML 요소의
xsi:type특성을 확인합니다. 일치하는 항목을 찾으면 런타임에서 XML 요소를 해당 유형의 적절한 CryostatB 클래스로 마샬링합니다. -
일치하는 항목을 찾을 수 없는 경우 XML 데이터를 Cryostat
Element개체로 마샬링합니다.
일반적으로 애플리케이션의 런타임은 계약에 포함된 스키마에서 생성된 모든 유형에 대해 알고 있습니다. 여기에는 계약의 wsdl:types 요소에 정의된 유형, 포함을 통해 계약에 추가된 모든 데이터 유형, 다른 스키마 가져오기를 통해 계약에 추가된 모든 유형이 포함됩니다. 32.4절. “런타임 Marshaller에 클래스 추가” 에 설명된 @ CryostatSeeAlso 주석을 사용하여 런타임에서 추가 유형을 인식할 수도 있습니다.
36.1.5. unmarshalling 링크 복사링크가 클립보드에 복사되었습니다!
모든 요소의 Java 속성에 lax 가 false 로 설정되어 있거나 속성이 지정되지 않은 경우 런타임은 Cryostat Element 개체만 허용합니다. 다른 유형의 오브젝트를 사용하려고 하면 마샬링 오류가 발생합니다.
모든 요소의 Java 속성에 lax 가 true 로 설정된 경우 런타임은 Java 데이터 유형과 해당 형식의 XML 스키마 구조 간의 내부 맵을 사용하여 이 요소에 쓸 XML 구조를 결정합니다. 런타임에서 클래스를 알고 XML 스키마 구조에 매핑할 수 있는 경우 데이터를 작성하고 xsi:type 속성을 삽입하여 요소가 포함하는 데이터 유형을 식별합니다.
런타임에서 Java 개체를 알려진 XML 스키마 구조에 매핑할 수 없는 경우 마샬링 예외가 발생합니다. 32.4절. “런타임 Marshaller에 클래스 추가” 에 설명된 @ CryostatSeeAlso 주석을 사용하여 런타임 맵에 형식을 추가할 수 있습니다.