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 아티팩트를 생성할 수 있습니다.

시작하기 전에

JAX-WS(Java API for XML-Based Web Services) 웹 서비스 애플리케이션을 개발하려면 먼저 명시적으로 또는 내재적으로 SEI를 설명하는 서비스 엔드포인트 인터페이스(SEI) 구현을 개발해야 합니다.

이 태스크 정보

상향식 접근법을 사용하여 JAX-WS 웹 서비스를 개발하는 경우 기존 서비스 엔드포인트 구현에서 wsgen 명령행 도구를 사용하십시오. wsgen 도구는 컴파일된 서비스 엔드포인트 구현 클래스를 입력으로 처리하고 다음과 같은 이식 가능한 아티팩트를 생성합니다.
  • 메시지 컨텐츠를 마샬링(marshalling)하고 역마샬링(unmarshalling)하는 데 필요한 JAXB(Java Architecture for XML Binding) 클래스
  • 선택적 -wsdl 인수가 지정되는 경우 WSDL(Web Services Description Language) 파일
지원된 구성 지원된 구성: wsimport, wsgen, schemagenxjc 명령행 도구는 z/OS® 플랫폼에서 지원되지 않습니다. 이 기능은 z/OS 플랫폼에서 실행 중인 WebSphere® Application Server에 제공된 어셈블리 도구에 의해 제공됩니다. 이러한 도구에 대해 자세히 학습하려면 JAX-WS 애플리케이션의 명령행 도구를 참조하십시오. sptcfg
우수 사례 우수 사례: WebSphere Application Server는 JAX-WS(Java API for XML-Based Web Services)와 JAXB(Java Architecture for XML Binding) 도구를 제공합니다. wsimport, wsgen, schemagenxjc 명령행 도구는 WebSphere Application Server Traditionalapp_server_root\bin\ 디렉토리에 있습니다. xjcschemagen 명령은 Liberty 프로파일의 app_server_root\jaxb\bin\ 디렉토리에 있습니다. 일부 경우에 WebSphere Application Server 및 JDK에서 제공된 두 가지 도구로 생성된 아티팩트는 동일한 레벨의 스펙을 지원합니다. 일반적으로 JDK 도구가 생성한 아티팩트는 부합하는 다른 런타임 환경에 이식 가능합니다. 그러나 WebSphere Application Server 환경 내에서 완벽한 통합을 하고 WebSphere Application Server에서만 지원되는 기능을 이용하려면 이 제품과 함께 제공되는 도구를 사용하는 것이 가장 좋습니다. JAX-WS 및 JAXB V2.2 도구를 활용하려면 app_server_root\bin\ 디렉토리에 있는 애플리케이션 서버와 함께 제공된 도구를 사용하십시오. bprac

JavaBeans에서 시작할 때 상향식 접근법을 사용하여 JAX-WS 웹 서비스를 개발하는 경우에는 WSDL 파일을 개발하지 않아도 됩니다. 어노테이션을 사용하면 서비스 엔드포인트 또는 클라이언트를 구성하는 데 필요한 모든 WSDL 정보가 제공됩니다. 애플리케이션 서버는 WS-I(Web Services-Interoperability) Basic Profile 1.1 스펙을 준수하고 문서/리터럴 스타일 문서 또는 RPC/리터럴 스타일 문서 중 하나인 WSDL 1.1 문서를 지원합니다. 또한 값 ENCODED는 지원되지 않는 반면 값이 LITERALUSE 속성을 선언하는 바인딩이 포함된 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를 호출해야 합니다.

프로시저

  1. 서비스 엔드포인트 구현 클래스 파일을 찾으십시오.
  2. wsgen 명령을 실행하여 이식 가능한 아티팩트를 생성하십시오. wsgen 도구는 app_server_root/bin/ 디렉토리에 있습니다.
    [Windows]
    app_server_root\bin\wsgen.bat [options] service_implementation_class
    [AIX][HP-UX][Linux][Solaris]
    app_server_root/bin/ wsgen.sh [options] service_implementation_class
    [IBM i]
    app_server_root/bin/ wsgen [options] service_implementation_class
    (선택사항) wsgen 명령과 함께 다음 옵션을 사용하십시오.
    • 생성된 파일 목록과 함께 추가 정보용 메시지를 보려면 -verbose 옵션을 사용하십시오.
    • 생성된 Java 파일을 유지하려면 -keep 옵션을 사용하십시오.
    • WSDL 파일을 생성하려면 -wsdl 옵션을 사용하십시오. HTTP 전송을 사용하여 호출할 서비스 구현 Bean을 개발 중인 경우 이 단계 중에 wsgen 명령행 도구에서 생성되는 WSDL 파일은 선택적입니다. 그러나 JMS를 통한 SOAP 전송을 사용하여 호출할 서비스 구현 Bean을 개발 중인 경우 이 단계 중 wsgen 도구에서 생성되는 WSDL 파일은 JAX-WS 애플리케이션의 후속 개발 단계에서 필수이므로 선택적이 아닙니다.

    이 명령 및 지정할 수 있는 추가 옵션에 대해 자세히 알아보려면 wsgen에 대해 읽어 보십시오.

결과

JAX-WS 웹 서비스 작성에 필요한 Java 아티팩트가 있습니다.

문제점 방지 문제점 방지: wsgen 명령은 다양한 Java 패키지에 정의된 동일한 @XMLType 이름을 가지고 있는 다중 XMLType 어노테이션 사이에 XML 네임스페이스를 구별하지 않습니다. 이 시나리오가 발생할 때, 다음 오류가 생성됩니다.
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 어노테이션에 추가하십시오. gotcha

JAX-WS 애플리케이션에서 wsgen 명령행 도구는 공유 클래스 파일을 찾지 못할 수 있습니다. com.ibm.websphere.webservices.WSDL_Generation_Extra_ClassPath 사용자 정의 특성을 사용하여 이러한 클래스 파일의 위치를 찾을 수 있습니다. 자세한 정보는 JVM(Java virtual machine) 사용자 정의 특성에 대한 문서를 참조하십시오.

다음 예에서는 JAX-WS 아티팩트를 생성하기 위해 wsgen 명령을 사용하여 서비스 엔드포인트 구현 클래스를 처리하는 방법을 보여줍니다. 이 예 EchoService 서비스 구현 클래스는 명시적 JavaBeans 서비스 엔드포인트를 사용합니다.
  1. 샘플 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);
    
    }
  2. app_server_root\bin\ 디렉토리에서 wsgen 명령을 실행하십시오. -cp 옵션은 서비스 구현 클래스 파일의 위치를 지정합니다. -s 옵션은 생성된 소스 파일에 대한 디렉토리를 지정합니다. -d 옵션은 생성된 출력 파일에 대한 디렉토리를 지정합니다. -s 또는 -d 옵션을 사용하는 경우 먼저 생성된 출력 파일에 대한 디렉토리를 작성하십시오.
    [Windows]
    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\
    [Linux][AIX][HP-UX][Solaris]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/
wsgen 명령을 사용하여 Java 아티팩트를 생성한 후에는 다음 파일이 생성됩니다.
/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 웹 서비스 애플리케이션의 구현을 완료하십시오.


주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_devjaxwsartifactsbean
파일 이름:twbs_devjaxwsartifactsbean.html