27.2. 시작 지점 코드 생성

27.2.1. 개요

JAX-WS는 WSDL에 정의된 서비스에서 해당 서비스를 서비스 공급자로 구현할 Java 클래스에 대한 자세한 매핑을 지정합니다. wsdl:portType 요소에서 정의하는 논리 인터페이스는 서비스 끝점 인터페이스(SEI)에 매핑됩니다. WSDL에 정의된 모든 복잡한 유형은 JAXB(Java Architecture for XML Binding) 사양에 정의된 매핑에 따라 Java 클래스에 매핑됩니다. wsdl:service 요소에서 정의한 끝점도 소비자가 서비스를 구현하는 서비스 프로바이더에 액세스하는 데 사용하는 Java 클래스에 생성됩니다.

cxf-codegen-plugin Maven 플러그인이 이 코드를 생성합니다. 또한 구현을 위한 시작점 코드를 생성하는 옵션을 제공합니다. 코드 생성기는 생성된 코드를 제어하기 위한 다양한 옵션을 제공합니다.

27.2.2. 코드 생성기 실행

예 27.1. “서비스 코드 생성” 코드 생성기를 사용하여 서비스에 대한 시작점 코드를 생성하는 방법을 보여줍니다.

예 27.1. 서비스 코드 생성

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>outputDir</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>wsdl</wsdl>
                        <extraargs>
                            <extraarg>-server</extraarg>
                            <extraarg>-impl</extraarg>
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
       </execution>
    </executions>
</plugin>

이 작업은 다음을 수행합니다.

  • -impl 옵션은 WSDL 계약의 각 wsdl:portType 요소에 대해 쉘 구현 클래스를 생성합니다.
  • 서버 옵션은 서비스 공급자를 독립 실행형 애플리케이션으로 실행하는 간단한 main() 을 생성합니다.
  • sourceRoot 는 생성된 코드가 outputDir 이라는 디렉터리에 작성되도록 지정합니다.
  • WSDL 요소는 코드가 생성되는 WSDL 계약을 지정합니다.

코드 생성기에 대한 전체 옵션 목록은 44.2절. “cxf-codegen-plugin” 에서 참조하십시오.

27.2.3. 생성된 코드

표 27.1. “서비스 공급자를 위한 생성된 클래스” 서비스 공급자를 생성하기 위해 생성된 파일을 설명합니다.

표 27.1. 서비스 공급자를 위한 생성된 클래스

파일설명

portTypeName.java

SEI입니다. 이 파일에는 서비스 공급자가 구현하는 인터페이스가 포함되어 있습니다. 이 파일을 편집해서는 안 됩니다.

serviceName.java

엔드포인트입니다. 이 파일에는 소비자가 서비스에 요청하는 데 사용하는 Java 클래스가 포함되어 있습니다.

portTypeNameImpl.java

skeleton 구현 클래스입니다. 이 파일을 수정하여 서비스 공급자를 빌드합니다.

portTypeNameServer.java

서비스 공급자를 독립형 프로세스로 배포할 수 있는 기본 서버 메인 라인입니다. 자세한 내용은 31장. 서비스 게시 에서 참조하십시오.

또한 코드 생성기는 WSDL 계약에 정의된 모든 형식에 대해 Java 클래스를 생성합니다.

27.2.4. 생성된 패키지

생성된 코드는 WSDL 계약에 사용되는 네임스페이스를 기반으로 패키지에 배치됩니다. 서비스를 지원하도록 생성된 클래스( wsdl:portType 요소, wsdl:service 요소 및 wsdl:port 요소)는 WSDL 계약의 대상 네임스페이스를 기반으로 하는 패키지에 배치됩니다. 계약의 형식 요소에 정의된 형식을 구현하기 위해 생성된 클래스는 types 요소의 targetNamespace 특성을 기반으로 패키지에 배치됩니다.

매핑 알고리즘은 다음과 같습니다.

  1. 주요 http:// 또는 urn:// 는 네임스페이스를 제거합니다.
  2. 네임스페이스의 첫 번째 문자열이 유효한 인터넷 도메인인 경우 예를 들어 .com 또는 .gov .gov 로 끝나는 경우 선행 www. 는 문자열에서 제거되며 나머지 두 구성 요소는 리플링됩니다.
  3. 네임스페이스의 마지막 문자열이 .xxx 또는 .xx 패턴의 파일 확장자로 끝나는 경우 확장은 제거됩니다.
  4. 네임스페이스의 나머지 문자열이 결과 문자열에 추가되고 점으로 구분됩니다.
  5. 모든 편지는 소문자로 되어 있습니다.