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

초록

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

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

38.1.1. 개요

JAXB 사양은 Java 유형이 XML 스키마 구성에 매핑되는 방법을 사용자 지정하는 여러 XML 요소를 정의합니다. 이러한 요소는 XML 스키마 구문으로 인라인으로 지정할 수 있습니다.These elements can be specified in-line with XML Schema constructs. XML 스키마 정의를 수정할 수 없거나 사용하지 않으려는 경우 외부 바인딩 문서에서 사용자 정의를 지정할 수 있습니다.If you cannot, or do not want to, modify the XML Schema definitions, you can specify the customizations in external binding document.

38.1.2. 네임스페이스

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

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

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

38.1.3. 버전 선언

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

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

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

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

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

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

예 38.3. “사용자 지정 XML 스키마” 는 in-line JAXB 사용자 지정을 포함하는 스키마의 예를 보여줍니다.

예 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 스키마 문서를 변경할 수 없거나 외부 바인딩 선언을 사용하여 사용자 지정을 지정할 수 있습니다.When you cannot, or do not want to, make changes to the XML Schema document that defines your type, you can specify the customizations using an external binding declaration. 외부 바인딩 선언은 여러 중첩된 jaxb:bindings 요소로 구성됩니다. 예 38.4. “JAXB External Binding Declaration Syntax” 외부 바인딩 선언의 구문을 보여줍니다.

예 38.4. JAXB External Binding Declaration Syntax

<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 속성을 사용합니다.

node 속성은 수정할 특정 XML 스키마 구성을 식별하는 데 사용됩니다. XML 스키마 요소로 확인되는 XPath 문입니다.It is an XPath statement that resolves to an XML Schema element.

스키마 문서 widgetSchema.xsd예 38.5. “XML 스키마 파일” 에 표시된 경우 예 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>

코드 생성기가 외부 bing 선언을 사용하도록 지시하려면 다음과 같이 wsdl2java 도구의 -b binding-file 옵션을 사용합니다.

wsdl2java -b widgetBinding.xml widget.wsdl