34.4. 목록

34.4.1. 개요

XML 스키마는 공백으로 구분된 간단한 형식 목록인 데이터 유형을 정의하는 메커니즘을 지원합니다. 목록 유형을 사용하는 요소 primeList 의 예는 예 34.7. “목록 유형 예” 에 표시됩니다.

예 34.7. 목록 유형 예

<primeList>1 3 5 7 9 11 13<\primeList>

XML 스키마 목록 유형은 일반적으로 Java List<T> 개체에 매핑 됩니다. 이 패턴에 대한 유일한 변형은 메시지 부분이 XML 스키마 목록 유형의 인스턴스에 직접 매핑되는 경우입니다.

34.4.2. XML 스키마에서 목록 유형 정의

XML 스키마 목록 유형은 간단한 유형이므로 simpleType 요소를 사용하여 정의됩니다. 목록 유형을 정의하는 데 사용되는 가장 일반적인 구문은 예 34.8. “XML 스키마 목록 유형의 구문” 에 표시됩니다.

예 34.8. XML 스키마 목록 유형의 구문

<simpleType name="listType">
  <list itemType="atomicType">
    <facet value="value" />
    <facet value="value" />
    ...
  </list>
</simpleType>

atomicType 에 지정된 값은 목록에 있는 요소의 유형을 정의합니다. xsd:int 또는 xsd:string 과 같은 기본 XML 스키마 원자 유형 중 하나이거나 목록이 아닌 사용자 정의 간단한 유형 중 하나일 수 있습니다.

목록 형식에 나열된 요소 유형을 정의하는 것 외에도 facet를 사용하여 목록 유형의 속성을 추가로 제한할 수도 있습니다. 표 34.3. “자주 묻는 질문 (FAQ)” 목록 유형에서 사용하는 facet를 표시합니다.

표 34.3. 자주 묻는 질문 (FAQ)

facet효과

length

목록 유형 인스턴스의 요소 수를 정의합니다.

minLength

목록 유형의 인스턴스에 허용되는 최소 요소 수를 정의합니다.

maxLength

목록 유형의 인스턴스에 허용되는 최대 요소 수를 정의합니다.

열거

목록 유형의 인스턴스에서 요소에 허용되는 값을 정의합니다.

패턴

목록 유형의 인스턴스에 있는 요소의 사전 형식을 정의합니다. 패턴은 정규식을 사용하여 정의됩니다.

예를 들어 예 34.7. “목록 유형 예” 에 표시된 simpleList 요소에 대한 정의는 예 34.9. “목록 유형 정의” 에 표시됩니다.

예 34.9. 목록 유형 정의

<simpleType name="primeListType">
  <list itemType="int"/>
</simpleType>
<element name="primeList" type="primeListType"/>

예 34.8. “XML 스키마 목록 유형의 구문” 에 표시된 구문 외에도 예 34.10. “목록 유형에 대한 대체 구문” 에 표시된 덜 일반적인 구문을 사용하여 목록 유형을 정의할 수도 있습니다.

예 34.10. 목록 유형에 대한 대체 구문

<simpleType name="listType">
  <list>
    <simpleType>
      <restriction base="atomicType">
        <facet value="value"/>
        <facet value="value"/>
        ...
      </restriction>
    </simpleType>
  </list>
  </simpleType>

34.4.3. 목록 유형 요소를 Java에 매핑

요소가 목록 유형을 정의하면 목록 유형이 컬렉션 속성에 매핑됩니다. 컬렉션 속성은 Java List<T> 개체 입니다. List<T>에서 사용하는 템플릿 클래스는 목록의 기본 유형에서 매핑된 래퍼 클래스입니다. 예를 들어 예 34.9. “목록 유형 정의” 에 정의된 목록 유형은 List<Integer>에 매핑됩니다.

래퍼 유형 매핑에 대한 자세한 내용은 “래퍼 클래스” 을 참조하십시오.

34.4.4. 목록 유형 매개변수를 Java에 매핑

메시지 부분이 목록 유형으로 정의되거나 목록 유형의 요소에 매핑되면 결과 메서드 매개변수가 List<T > 오브젝트 대신 배열에 매핑됩니다. 배열의 기본 유형은 목록 유형의 기본 클래스의 래퍼 클래스입니다.

예를 들어 예 34.11. “목록 유형 메시지 파트가 있는 WSDL” 의 WSDL 조각은 예 34.12. “목록 유형 매개 변수가 있는 Java 메서드” 에 표시된 메서드 서명을 생성합니다.

예 34.11. 목록 유형 메시지 파트가 있는 WSDL

<definitions ...>
  ...
  <types ...>
    <schema ... >
      <simpleType name="primeListType">
        <list itemType="int"/>
      </simpleType>
      <element name="primeList" type="primeListType"/>
    </schemas>
  </types>
  <message name="numRequest"> <part name="inputData" element="xsd1:primeList" /> </message>
  <message name="numResponse">;
    <part name="outputData" type="xsd:int">
  ...
  <portType name="numberService">
    <operation name="primeProcessor">
      <input name="numRequest" message="tns:numRequest" />
      <output name="numResponse" message="tns:numResponse" />
    </operation>
    ...
  </portType>
  ...
</definitions>

예 34.12. 목록 유형 매개 변수가 있는 Java 메서드

public interface NumberService {

    @XmlList
    @WebResult(name = "outputData", targetNamespace = "", partName = "outputData")
    @WebMethod
    public int primeProcessor(
        @WebParam(partName = "inputData", name = "primeList", targetNamespace = "...") java.lang.Integer[] inputData
    );
}