WSDL2WebService 도구를 사용하여 웹 서비스 작성

명령행에서 WSDL2WebService 도구를 사용하면 IBM® WebSphere® 런타임 환경을 사용하는 WSDL 파일에서 웹 서비스를 생성할 수 있습니다.

시작하기 전에

전제조건:

이 태스크 정보

WSDL2WebService 도구는 다음과 같은 3단계로 사용됩니다.

프로시저

  1. -createService 인수와 함께 도구를 실행하여 특정 WSDL 문서에서 기술된 웹 서비스에 사용할 스켈레톤 Java 구현 템플리트를 작성하십시오.
  2. 템플리트에 구현 코드를 작성하고 1단계에서 생성된 빌드 스크립트를 사용하여 코드를 컴파일하십시오.
  3. -createEar 인수와 함께 도구를 다시 실행하여 이 구현에서 웹 서비스 가능 아카이브를 빌드하십시오.

결과

참고: 1단계를 여러 번 수행하여 관련된 웹 서비스를 동일한 프로젝트 디렉토리에 작성할 수 있습니다. 그런 다음, 3단계에서 각 웹 서비스에 대한 개별 모듈을 작성하여 이러한 모듈을 동일한 EAR 파일에 추가할 수 있습니다.

명령행 설정

About this task

WSDL2WebService 도구를 사용하기 전에 웹 서비스 명령행을 다음과 같이 설정해야 합니다.

Procedure

  1. 명령 프롬프트에서 install_directory/bin으로 변경하십시오.
  2. 아래의 일괄처리 스크립트를 실행하십시오.
    • Windows: setupenv.bat
    • Linux: . setupenv.sh
  3. 웹 서비스를 작성할 디렉토리로 변경하십시오. 이 디렉토리를 명령행 테스트 디렉토리라고 하겠습니다. Linux: 이 디렉토리에 대한 쓰기 액세스 권한이 있어야 합니다.

Results

이제 WSDL2WebService 도구의 1단계를 실행할 수 있습니다.

스켈레톤 웹 서비스 구현 작성

Before you begin

참고: WSDL2WebService 도구는 2가지 버전이 있습니다. WSDL2WebService 명령을 실행하면 J2EE 1.4가 사용됩니다. 또는 J2EE 1.3을 사용하는 WSDL2WebService13 명령을 사용할 수도 있습니다. J2EE 1.3을 사용하는 웹 서비스를 작성하려는 경우, 아래 명령에서 WSDL2WebServiceWSDL2WebService13으로 모두 대체하면 됩니다.

About this task

스켈레톤 웹 서비스 구현을 작성하려면 명령 프롬프트에 다음을 입력하십시오.

  • Windows: WSDL2WebService [<선택 인수>] -project <ProjectDir> -createService <ServiceName> <WSDL URI>
  • Linux: WSDL2WebService.sh [<선택 인수>] -project <ProjectDir> -createService <ServiceName> <WSDL URI>

참고: 마지막 인수는 <WSDL URI>여야 하며 대소문자를 구분합니다. 필수 및 선택 인수의 목록은 WSDL2WebService 도구를 참조하십시오.

힌트:
  • 선택 인수인 -host <hostname:port>를 지정하는 것이 좋습니다. 이 명령의 기본 포트는 6080이지만 WebSphere ApplicationServer의 기본 포트는 9080입니다.
  • 명령행 테스트 디렉토리 경로와 -project에 지정한 이름을 기록해두십시오. 이 정보는 웹 서비스를 배치하고 테스트할 때 필요합니다.

-createService <ServiceName> 인수를 사용하여 도구를 실행하면, 지정된 프로젝트 아래에 <ServiceName> 이름을 갖는 디렉토리가 작성됩니다. 이 디렉토리는 여러 개의 서브디렉토리를 포함합니다. 서브디렉토리에는 웹 서비스 구현을 빌드하는 데 필요한 Java 템플리트가 모두 포함되어 있습니다.

Example

다음 예제는 WSDL2WebService 도구를 사용하는 방법을 보여줍니다.

WSDL2WebService -createService ejb1Service -project dir:\myproj\ejbDir -host localhost:9080 -contextRoot ejb1Service -type EJB -verbose dir:\TempConv.wsdl

구현 코드 컴파일

About this task

작성할 웹 서비스를 제대로 구현하기 위해서는 스켈레톤 Java 파일을 수정해야 합니다. Java 스켈레톤에 올바른 코드를 추가한 후에는 코드를 컴파일해야 합니다. 이러한 코드를 모두 컴파일할 수 있도록 compile이라는 빌드 스크립트도 생성됩니다.

구현 클래스를 컴파일하려면 다음을 수행하십시오.

Procedure

  1. <ServiceName> 디렉토리로 변경하십시오.
  2. 구현 코드가 JAR 파일이나 .class 파일 디렉토리 등에 종속되는 경우, 컴파일 스크립트를 편집하여 해당 종속 항목의 전체 경로 이름을 USER_CLASSPATH 변수에 추가하십시오. 예를 들면 다음과 같습니다.
    • Windows: set USER_CLASSPATH = c:\MyJars\webservice.jar;c:\MyClasses
    • Linux: USER_CLASSPATH = /home/MyJars/webservice.jar:/home/MyClasses
  3. 다음 명령을 입력하십시오.
    • Windows:  compile
    • Linux:  compile.sh
    이 명령에는 매개변수가 필요하지 않습니다.

웹 서비스 사용 가능 아카이브 작성

About this task

서비스를 작성하여 구현 코드를 Java 스켈레톤에 추가하고 새 코드를 컴파일했다면, 웹 서비스 가능 아카이브를 작성해야 합니다. 웹 서비스 사용 가능 아카이브를 작성하려면 명령 프롬프트에 다음을 입력하십시오.

  • Windows: WSDL2WebService [<선택 인수>] -createEar <File.ear> -project <ProjectDir>
  • Linux: WSDL2WebService.sh [<선택 인수>] -createEar <File.ear> -project <ProjectDir>

필수 및 선택 인수에 대한 설명은 WSDL2WebService 도구를 참조하십시오.

힌트: 웹 서비스를 배치하고 테스트하려면 명령행 테스트 디렉토리 경로와 -project에 지정한 이름을 기록해두십시오.

구현 코드를 작성하여 컴파일한 후 -createEar <File.ear> 인수와 함께 도구를 다시 실행하면 새 EAR 파일이 작성되거나 EAR 파일이 업데이트됩니다. 이 EAR 파일은 -add 인수에 지정된 각 웹 서비스 이름에 대한 웹 서비스 모듈을 포함합니다. 또한 웹 서비스를 구현하는 서버측 클래스가 정상적 위치인 WEB-INF\classes 디렉토리로 이동된 것을 확인할 수 있습니다. -server-side-only 인수를 지정하지 않을 경우, 사용 중인 복합 유형에 대한 직렬화기 및 역직렬화기 클래스를 포함하여, 추가 Java 파일이 포함된 클라이언트측 디렉토리도 작성됩니다.

EAR 파일을 생성한 후에는 다른 사용자가 사용하도록 서버에 배치할 수 있습니다. 이를 수행하려면 명령행 도구를 사용하여 서버에 웹 서비스 배치를 참조하십시오.

Example

다음 예제는 웹 서비스 가능 아카이브의 작성 방법을 보여줍니다.
WSDL2WebService -createEAR dir:\myear\ejb1ear.ear -project dir:\myproj\ejbDir -add ejb1Service -verbose localhost:9080/ejb1Service/services/TempConv
단일 프로젝트에 웹 서비스를 두 개 이상 작성한 경우, 웹 서비스를 하나의 아카이브로 병합하려면 The WSDL2WebService 도구의 설명과 같이 -rootModule 옵션을 사용하십시오. 예를 들어 MultiService라는 프로젝트에 AddressBook과 Echo라는 두 개의 Java Bean 웹 서비스가 있는 경우, 다음 명령을 실행하여 두 개의 웹 서비스를 하나의 모듈로 병합하고 아카이브할 수 있습니다.
WSDL2WebService -createEar dir:\myear\ejb1ear.ear -rootModule ejb1Service/services/Service -host localhost:9080 -project dir:\myproj\MultiService
이를 실행하면 웹 서비스가 Service_WEB.war이라는 단일 모듈로 병합되며 이를 포함하는 MultiServiceEAR.ear이 작성됩니다. 모듈의 컨텍스트 루트는 Service_WEB입니다. WSDL 파일에 포함된 모든 서비스 엔드포인트의 호스트 이름과 포트 번호는 localhost:9080으로 변경됩니다.
Note: 웹 서비스를 병합할 때는 클래스 이름이 충돌하는지 검사하지 않습니다. 각 웹 서비스의 완전한 클래스 이름이 서로 충돌하지 않도록 주의하십시오.

코드 재사용 지원

About this task

WSDL2WebService 도구는 내포된 하나 이상의 웹 서비스에서 액세스하는 JAR 또는 EJB 파일을 EAR 파일 루트에 배치하도록 허용하여 코드 재사용을 지원합니다. 모든 클래스를 서비스와 같이 동일한 이름의 JAR 파일로 아카이브하여 웹 서비스 구현을 재사용할 수 있습니다. 클래스를 JAR 파일로 아카이브하려면 다음 단계를 수행하십시오.

Procedure

  1. WSDL2WebService 도구를 실행한 후, 재사용할 JAR 파일을 프로젝트 디렉토리의 루트에 배치하십시오. JAR 또는 EJB 파일을 배치할 수 있습니다.
  2. 프로젝트에 이러한 JAR 파일이 필요한 웹 서비스가 있을 경우, JAR 파일의 완전한 경로를 해당 웹 서비스의 컴파일 스크립트에 포함된 USER_CLASSPATH 변수에 추가하여 업데이트하십시오.
  3. 일반적인 방법으로 각 웹 서비스를 컴파일하십시오.
  4. 일반적인 방법으로 -createEAR 인수와 함께 WSDL2WebService 도구를 실행하십시오. WSDL2WebService 도구가 JAR 파일을 EAR 파일에 자동으로 추가하며 이러한 JAR 파일에 대한 참조를 모두 업데이트합니다.

What to do next

중요:
  • WSDL2WebService 명령을 사용하여 작성하는 EJB 웹 서비스가 EAR 파일을 로컬로 가져오는 WSDL 파일 세트를 사용할 경우, EJB 웹 서비스는 생성되지만 EAR 파일을 작업공간으로 가져와서 단위 테스트 환경 또는 원격 서버에 배치한 후에 서버를 시작하면 예외가 발생합니다. 이 예외는 라우터 웹 프로젝트에 WSDL이 없어서 발생하는 것입니다. 이 오류를 방지하려면 다음 중 하나를 수행하십시오.
    • 관리 콘솔을 사용하여 독립형 WebSphere Application Server에 배치하십시오.
    • 모놀리식(monolithic) WSDL을 사용하십시오. 즉 -splitWsdl 인수를 사용하지 마십시오.
    • EJB 프로젝트의 META-INF/wsdl 디렉토리에 있는 모든 WSDL 파일을 라우터 웹 프로젝트의 WEB-INF/wsdl로 직접 복사하십시오.
  • -genResolver 인수를 선택하면 EAR이 시작되지 않습니다. 이 문제의 원인은 -genResolver 옵션이 WSDL 문서가 <wsdl:import>를 사용하여 XSD를 가져오는 경우를 처리할 수 없기 때문입니다. 이 오류를 방지하려면 다음 중 하나를 수행하십시오.
    • WSDL이 <유형><스키마><가져오기>를 사용하여 XSD를 가져오도록 편집하십시오.
    • 명령행 도구에서 -genResolver 옵션을 사용하지 마십시오.

클라이언트 구현 코드 컴파일

About this task

클라이언트 코드를 컴파일하려면 다음을 수행하십시오.

Procedure

  1. <ProjectDir> 디렉토리로 변경한 다음, 클라이언트측 디렉토리로 변경하십시오.
  2. 구현 코드가 .jar 파일이나 .class 파일 디렉토리 등에 종속되는 경우, 컴파일 스크립트를 편집하여 해당 종속 항목의 전체 경로 이름을 USER_CLASSPATH 변수에 추가하십시오. 예를 들면 다음과 같습니다.
    • Windows: set USER_CLASSPATH = c:\MyJars\webservice.jar;c:\MyClasses
    • Linux: USER_CLASSPATH = /home/MyJars/webservice.jar:/home/MyClasses
  3. buildclient_new 명령을 입력하십시오.

피드백