32장. 기본 데이터 바인딩 개념

초록

Apache CXF에서 유형 매핑을 처리하는 방법에 적용되는 여러 일반 항목이 있습니다.

32.1. 스키마 정의 포함 및 가져오기

32.1.1. 개요

Apache CXF는 includeimport schema 태그를 사용하여 스키마 정의 포함 및 가져오기를 지원합니다. 이러한 태그를 사용하면 외부 파일 또는 리소스의 정의를 스키마 요소의 범위에 삽입할 수 있습니다. 포함 및 가져오기의 필수 차이점은 다음과 같습니다.

  • 포함에는 포함된 스키마 요소와 동일한 대상 네임스페이스에 속하는 정의가 포함됩니다.
  • 가져오기는 포함된 스키마 요소의 다른 대상 네임스페이스에 속하는 정의를 가져옵니다.

32.1.2. xsd:include syntax

include 지시문에는 다음 구문이 있습니다.

<include schemaLocation="anyURI" />

URI 에서 지정하는 참조 스키마는 포함된 스키마와 동일한 대상 네임스페이스에 속하거나 대상 네임스페이스에 전혀 속하지 않아야 합니다. 참조된 스키마가 대상 네임스페이스에 속하지 않는 경우 포함된 스키마의 네임스페이스로 자동으로 사용됩니다.If the referenced schema does not belong to any target namespace, it is automatically adopted into the enclosing schema's namespace when it is included.

예 32.1. “다른 스키마를 포함하는 스키마의 예” 다른 XML 스키마 문서를 포함하는 XML 스키마 문서의 예를 보여줍니다.

예 32.1. 다른 스키마를 포함하는 스키마의 예

<definitions targetNamespace="http://schemas.redhat.com/tests/schema_parser"
             xmlns:tns="http://schemas.redhat.com/tests/schema_parser"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
    <schema targetNamespace="http://schemas.redhat.com/tests/schema_parser"
            xmlns="http://www.w3.org/2001/XMLSchema">
      <include schemaLocation="included.xsd"/>
      <complexType name="IncludingSequence">
        <sequence>
          <element name="includedSeq" type="tns:IncludedSequence"/>
        </sequence>
      </complexType>
    </schema>
  </types>
  ...
</definitions>

예 32.2. “포함된 스키마의 예” 포함된 스키마 파일의 내용을 표시합니다.

예 32.2. 포함된 스키마의 예

<schema targetNamespace="http://schemas.redhat.com/tests/schema_parser"
        xmlns="http://www.w3.org/2001/XMLSchema">
  <!-- Included type definitions -->
  <complexType name="IncludedSequence">
    <sequence>
      <element name="varInt" type="int"/>
      <element name="varString" type="string"/>
    </sequence>
  </complexType>
</schema>

32.1.3. XSD:import 구문

import 지시문의 구문은 다음과 같습니다.

<import namespace="namespaceAnyURI"
        schemaLocation="schemaAnyURI" />

가져온 정의는 네임스페이스AnyURI 대상 네임스페이스에 속해야 합니다. namespaceAnyURI 가 비어 있거나 지정되지 않은 경우 가져온 스키마 정의가 정규화되지 않습니다.

예 32.3. “다른 스키마를 가져오는 스키마의 예” 다른 XML 스키마를 가져오는 XML 스키마의 예를 보여줍니다.

예 32.3. 다른 스키마를 가져오는 스키마의 예

<definitions targetNamespace="http://schemas.redhat.com/tests/schema_parser"
             xmlns:tns="http://schemas.redhat.com/tests/schema_parser"
             xmlns:imp="http://schemas.redhat.com/tests/imported_types"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
    <schema targetNamespace="http://schemas.redhat.com/tests/schema_parser"
            xmlns="http://www.w3.org/2001/XMLSchema">
      <import namespace="http://schemas.redhat.com/tests/imported_types"
              schemaLocation="included.xsd"/>
      <complexType name="IncludingSequence">
        <sequence>
          <element name="includedSeq" type="imp:IncludedSequence"/>
        </sequence>
      </complexType>
    </schema>
  </types>
  ...
</definitions>

예 32.4. “가져온 스키마의 예” 가져온 스키마 파일의 내용을 표시합니다.

예 32.4. 가져온 스키마의 예

<schema targetNamespace="http://schemas.redhat.com/tests/imported_types"
        xmlns="http://www.w3.org/2001/XMLSchema">
  <!-- Included type definitions -->
  <complexType name="IncludedSequence">
    <sequence>
      <element name="varInt" type="int"/>
      <element name="varString" type="string"/>
    </sequence>
  </complexType>
</schema>

32.1.4. 비참조 스키마 문서 사용

서비스의 WSDL 문서에서 참조되지 않는 스키마 문서에 정의된 유형을 사용하는 것은 세 가지 단계 프로세스입니다.

  1. xsd2wsdl 도구를 사용하여 스키마 문서를 WSDL 문서로 변환합니다.
  2. 생성된 WSDL 문서에서 wsdl2java 도구를 사용하여 유형에 대한 Java를 생성합니다.

    중요

    wsdl2java 툴에서 WSDL 문서가 서비스를 정의하지 않음을 알리는 경고를 받게 됩니다. 이 경고를 무시할 수 있습니다.

  3. 생성된 클래스를 classpath에 추가합니다.