JAX-WS 애플리케이션에 대한 Java 아티팩트 생성
JAX-WS(Java™ API for XML-Based Web Services) 도구를 사용하여 JavaBeans 또는 엔터프라이즈 Bean 컴포넌트에서 시작할 때 JAX-WS 웹 서비스 애플리케이션에 필요한 JAX-WS 및 JAXB(Java Architecture for XML Binding) Java 아티팩트를 생성할 수 있습니다.
시작하기 전에
이 태스크 정보
- 메시지 컨텐츠를 마샬링(marshalling)하고 역마샬링(unmarshalling)하는 데 필요한 JAXB(Java Architecture for XML Binding) 클래스
- 선택적 -wsdl 인수가 지정되는 경우 WSDL(Web Services Description Language) 파일


JavaBeans에서 시작할 때 상향식 접근법을 사용하여 JAX-WS 웹 서비스를 개발하는 경우에는 WSDL 파일을 개발하지 않아도 됩니다. 어노테이션을 사용하면 서비스 엔드포인트 또는 클라이언트를 구성하는 데 필요한 모든 WSDL 정보가 제공됩니다. 애플리케이션 서버는 WS-I(Web Services-Interoperability) Basic Profile 1.1 스펙을 준수하고 문서/리터럴 스타일 문서 또는 RPC/리터럴 스타일 문서 중 하나인 WSDL 1.1 문서를 지원합니다. 또한 값 ENCODED는 지원되지 않는 반면 값이 LITERAL인 USE 속성을 선언하는 바인딩이 포함된 WSDL 문서는 지원됩니다. 문서/리터럴 줄 바꿈된 패턴을 구현하는 WSDL 문서의 경우 루트 요소가 XML 스키마에서 선언되고 메시지 플로우에 대한 조작 랩퍼로 사용됩니다. 요청 및 응답 둘 다에 대해 별도의 랩퍼 요소 정의가 존재합니다.
wsgen 명령이 서비스 엔드포인트 구현 Bean에서 상속된 메소드를 누락하지 않는지 확인하려면 원하는 수퍼클래스에 @WebService 어노테이션을 추가해야 합니다. 그렇지 않으면 수퍼클래스 메소드에 대한 호출로 구현 클래스에 있는 상속된 메소드를 대체할 수 있습니다.
WSDL 파일은 JAX-WS 서비스 구현 Bean을 개발하는 경우에는 선택적이지만 JAX-WS 엔드포인트가 JMS를 통한 SOAP 전송을 사용하여 노출되고 WSDL 파일을 공개하는 경우에는 필수입니다. JMS를 통한 SOAP 전송을 사용하여 호출되는 엔터프라이즈 JavaBeans 서비스 구현을 개발 중이고 WSDL을 공개하여 공개된 WSDL 파일이 완전히 분석된 JMS 엔드포인트 URL을 포함하도록 하려는 경우 -wsdl 인수를 지정하여 wsgen 도구가 WSDL 파일을 생성하게 하십시오. 이 시나리오에서 WSDL 파일을 웹 서비스 애플리케이션과 패키지화해야 합니다.
명령행에서 도구를 사용하는 방법 외에도 Ant 빌드 환경에서 이 JAX-WS 도구를 호출할 수 있습니다. Ant 빌드 환경 내에서 com.sun.tools.ws.ant.WsGen Ant 태스크를 사용하여 wsgen 도구를 호출하십시오. 적절하게 작동하려면, 이 Ant 태스크는 ws_ant 스크립트를 사용하여 Ant를 호출해야 합니다.
프로시저
결과
JAX-WS 웹 서비스 작성에 필요한 Java 아티팩트가 있습니다.

Error: Two classes have the same XML type name ....
Use @XmlType.name and @XmlType.namespace to assign different names to them...
이 오류는 이름은 같지만 다른 Java 패키지 안에 있는 클래스 또는 @XMLType.name 값이 있음을 표시합니다. 이 오류를 방지하려면, XML 유형을 분간하기 위해 @XML.Type.namespace 클래스를 기존 @XMLType 어노테이션에
추가하십시오. gotchaJAX-WS 애플리케이션에서 wsgen 명령행 도구는 공유 클래스 파일을 찾지 못할 수 있습니다. com.ibm.websphere.webservices.WSDL_Generation_Extra_ClassPath 사용자 정의 특성을 사용하여 이러한 클래스 파일의 위치를 찾을 수 있습니다. 자세한 정보는 JVM(Java virtual machine) 사용자 정의 특성에 대한 문서를 참조하십시오.
예
- 샘플 EchoServicePortTypeImpl 서비스 구현 클래스 파일 및
연관된 EchoServicePortType 서비스 인터페이스 클래스 파일을 디렉토리에 복사하십시오. 이 디렉토리에는
클래스 파일의 com.ibm.was.wssample.echo 패키지 이름에 해당하는 디렉토리 트리 구조가 있어야 합니다.
/* This is a sample EchoServicePortTypeImpl.java file. */ package com.ibm.was.wssample.echo; @javax.jws.WebService(serviceName = "EchoService", endpointInterface = "com.ibm.was.wssample.echo.EchoServicePortType", targetNamespace="http://com/ibm/was/wssample/echo/", portName="EchoServicePort") public class EchoServicePortTypeImpl implements EchoServicePortType { public EchoServicePortTypeImpl() { } public String invoke(String obj) { System.out.println(">> JAXB Provider Service: Request received.\n"); String str = "Failed"; if (obj != null) { try { str = obj; } catch (Exception e) { e.printStackTrace(); } } return str; } }
/* This is a sample EchoServicePortType.java file. */ package com.ibm.was.wssample.echo; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.ws.RequestWrapper; import javax.xml.ws.ResponseWrapper; @WebService(name = "EchoServicePortType", targetNamespace = "http://com/ibm/was/wssample/echo/", wsdlLocation="WEB-INF/wsdl/Echo.wsdl") public interface EchoServicePortType { /** * * @param arg0 * @return * returns java.lang.String */ @WebMethod @WebResult(name = "response", targetNamespace = "http://com/ibm/was/wssample/echo/") @RequestWrapper(localName = "invoke", targetNamespace = "http://com/ibm/was/wssample/echo/", className = "com.ibm.was.wssample.echo.Invoke") @ResponseWrapper(localName = "echoStringResponse", targetNamespace = "http://com/ibm/was/wssample/echo/", className = "com.ibm.was.wssample.echo.EchoStringResponse") public String invoke( @WebParam(name = "arg0", targetNamespace = "http://com/ibm/was/wssample/echo/") String arg0); }
- app_server_root\bin\ 디렉토리에서 wsgen 명령을
실행하십시오. -cp 옵션은 서비스 구현 클래스 파일의 위치를 지정합니다. -s 옵션은
생성된 소스 파일에 대한 디렉토리를 지정합니다. -d 옵션은
생성된 출력 파일에 대한 디렉토리를 지정합니다. -s 또는 -d 옵션을 사용하는 경우 먼저
생성된 출력 파일에 대한 디렉토리를 작성하십시오.
app_server_root\bin\wsgen.bat -wsdl -s c:\generated_source\ -cp c:\my_application\classes\ com.ibm.was.wssample.echo.EchoServicePortTypeImpl -verbose -d c:\generated_artifacts\
wsgen 명령을 실행하십시오. 예를 들면 다음과 같습니다.
app_server_root/bin/wsgen.sh -wsdl -s c:/generated_source/ -cp c:/my_application/classes/ com.ibm.was.wssample.echo.EchoServicePortTypeImpl -verbose -d c:/generated_artifacts/
/generated_source/com/ibm/was/wssample/echo/EchoStringResponse.java
/generated_source/com/ibm/was/wssample/echo/Invoke.java
/generated_artifacts/EchoService.wsdl
/generated_artifacts/EchoService_schema1.xsd
/generated_artifacts/com/ibm/was/wssample/echo/EchoStringResponse.class
/generated_artifacts/com/ibm/was/wssample/echo/Invoke.class
EchoStringResponse.java 및 Invoke.java 파일은 생성된 Java 클래스 파일입니다. 생성된 Java 파일의 컴파일된 버전은 EchoStringResponse.class 및 Invoke.class 파일입니다. -wsdl 옵션이 지정되었으므로 EchoService.wsdl 및 EchoService_schema1.xsd 파일이 생성됩니다.
다음에 수행할 작업
JAX-WS 웹 서비스 애플리케이션의 구현을 완료하십시오.