38장. 유형 생성 방법 사용자 정의

초록

기본 CryostatB 매핑은 XML 스키마를 사용하여 Java 애플리케이션의 개체를 정의할 때 발생하는 대부분의 사례를 해결합니다. 기본 매핑이 충분하지 않은 인스턴스의 경우 CryostatB는 광범위한 사용자 지정 메커니즘을 제공합니다.

38.1. 유형 매핑 사용자 정의의 기본 사항

38.1.1. 개요

CryostatB 사양은 Java 유형이 XML 스키마 구성에 매핑되는 방법을 사용자 지정하는 여러 XML 요소를 정의합니다. 이러한 요소는 XML 스키마 구문을 사용하여 인라인으로 지정할 수 있습니다. XML 스키마 정의를 수정할 수 없거나 수정하지 않으려면 외부 바인딩 문서에서 사용자 지정을 지정할 수 있습니다.

38.1.2. 네임스페이스

CryostatB 데이터 바인딩을 사용자 지정하는 데 사용되는 요소는 http://java.sun.com/xml/ns/jaxb 네임스페이스에 정의됩니다. 예 38.1. “CryostatB 사용자 지정 네임스페이스” 에 표시된 것과 유사한 네임스페이스 선언을 추가해야 합니다. 이는 CryostatB 사용자 지정을 정의하는 모든 XML 문서의 루트 요소에 추가됩니다.

예 38.1. CryostatB 사용자 지정 네임스페이스

xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"

38.1.3. 버전 선언

CryostatB 사용자 지정을 사용하는 경우 사용 중인 CryostatB 버전을 지정해야 합니다. 이 작업은 외부 바인딩 선언의 root 요소에 jaxb:version 속성을 추가하여 수행됩니다. 인라인 사용자 지정을 사용하는 경우 사용자 지정을 포함하는 스키마 요소에 jaxb:version 속성을 포함해야 합니다. 속성 값은 항상 2.0 입니다.

예 38.2. “CryostatB 사용자 지정 버전 지정” 스키마 요소에 사용되는 jaxb:version 속성의 예를 보여줍니다.

예 38.2. CryostatB 사용자 지정 버전 지정

< schema ...
        jaxb:version="2.0">

38.1.4. 인라인 사용자 정의 사용

코드 생성기가 XML 스키마를 구성하는 방법을 사용자 지정하는 가장 직접적인 방법은 사용자 지정 요소를 XML 스키마 정의에 직접 추가하는 것입니다. CryostatB 사용자 지정 요소는 수정되는 XML 스키마 구문의 xsd:appinfo 요소 내에 배치됩니다.

예 38.3. “사용자 지정 XML 스키마” 다음 예에서는 인라인 CryostatB 사용자 지정을 포함하는 스키마의 예를 보여줍니다.

예 38.3. 사용자 지정 XML 스키마

<schema targetNamespace="http://widget.com/types/widgetTypes"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:version="2.0">
  <complexType name="size">
    <annotation> <appinfo> <jaxb:class name="widgetSize" /> </appinfo> </annotation>
    <sequence>
      <element name="longSize" type="xsd:string" />
      <element name="numberSize" type="xsd:int" />
    </sequence>
  </complexType>
<schema>

38.1.5. 외부 바인딩 선언 사용

형식을 정의하는 XML 스키마 문서를 변경할 수 없거나 변경하지 않는 경우 외부 바인딩 선언을 사용하여 사용자 지정을 지정할 수 있습니다. 외부 바인딩 선언은 여러 중첩된 jaxb:bindings 요소로 구성됩니다. 예 38.4. “CryostatB 외부 바인딩 선언 구문” 외부 바인딩 선언의 구문을 표시합니다.

예 38.4. CryostatB 외부 바인딩 선언 구문

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               jaxb:version="2.0">
  <jaxb:bindings [schemaLocation="schemaUri" | wsdlLocation="wsdlUri">
    <jaxb:bindings node="nodeXPath">
      binding declaration
    </jaxb:bindings>
    ...
  </jaxb:bindings>
<jaxb:bindings>

schemaLocation 속성 및 wsdlLocation 속성은 수정이 적용되는 스키마 문서를 식별하는 데 사용됩니다. 스키마 문서에서 코드를 생성하는 경우 schemaLocation 특성을 사용합니다. WSDL 문서에서 코드를 생성하는 경우 wsdlLocation 속성을 사용합니다.

노드 속성은 수정할 특정 XML 스키마 구성을 식별하는 데 사용됩니다. 이는 XML 스키마 요소로 확인되는 Cryostat 문입니다.

예 38.5. “XML 스키마 파일” 에 표시된 스키마 문서 위젯Schema.xsd 를 고려할 때 예 38.6. “외부 바인딩 선언” 에 표시된 외부 바인딩 선언은 복잡한 유형 크기의 생성을 수정합니다.

예 38.5. XML 스키마 파일

<schema targetNamespace="http://widget.com/types/widgetTypes"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        version="1.0">
  <complexType name="size">
    <sequence>
      <element name="longSize" type="xsd:string" />
      <element name="numberSize" type="xsd:int" />
    </sequence>
  </complexType>
<schema>

예 38.6. 외부 바인딩 선언

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               jaxb:version="2.0">
  <jaxb:bindings schemaLocation="wsdlSchema.xsd">
    <jaxb:bindings node="xsd:complexType[@name='size']">
        <jaxb:class name="widgetSize" />
    </jaxb:bindings>
  </jaxb:bindings>
<jaxb:bindings>

코드 생성기가 외부 연결 선언을 사용하도록 지시하려면 다음과 같이 wsdl2java 도구의 -b 바인딩 파일 옵션을 사용합니다.

wsdl2java -b widgetBinding.xml widget.wsdl