wsdl2java 간편한 웹서비스 클라이언트 생성
웹서비스 제공자가 발행하는 WSDL만 있으면 손쉽게 웹서비스 클라이언트를 생성할 수 있다.
Apache CXF 라이브러리를 다운로드하고 wsdl2java 명령어를 사용하여 손쉽게 자바 코드를 생성할 수 있다.
웹서비스 클라이언트를 구축하려면 일단 웹서비스 제공자가 필요할 테니 밑의 글을 참고하거나 WSDL를 발행하는 웹서비스를 찾도록 한다.
jax-ws 웹서비스 서버 구축하기
웹서비스는 서비스에 대한 정의서(WSDL)를 발행하여 클라이언트가 그 서비스를 어떻게 이용하면 되는지 보다 쉽게 알 수 있다. 자바 웹서비스는 자바 스펙 요구서(Java Specification Request) 224번에 기�
malchooni.name
wsdl2java를 활용할 주소는 http://localhost:8080/personalInfoService?wsdl 이다. 위의 글을 참고하여 로컬에 구축하였다. URL이나 파일 형태의 WSDL를 확인한다.
wsdl2java 실행에 앞서 필자의 워크스페이스 파일 인코딩은 UTF-8을 사용한다. 그래서 wsdl2java의 스크립트를 다음과 같이 약간 변경하였다.
이후 wsdl2java 명령어를 실행하였다.
D:\apache-cxf-3.4.0\bin>wsdl2java -d D:/workspace/study/studyjaxws/src/main/java -p test.client.webservice -client http://localhost:8080/personalInfoService?wsdl |
-d 옵션은 자바파일이 생성될 루트 디렉터리로 설정한다. |
-p 생성될 자바파일의 패키지를 지정한다. |
-client 옵션을 넣으면 웹서비스 호출하는 샘플 파일이 같이 생성된다. |
WSDL URL or WSDL File 경로 |
밑의 CXF 공식 사이트를 참조하면 옵션에 대한 설명이 나와 있다.
Apache CXF -- WSDL to Java
WSDL to JavaNamewsdl2java - takes a WSDL document and generates fully annotated Java code from which to implement a service.Synopsis Usage : wsdl2java -fe|-frontend -db|-databinding -wv -p <[wsdl-namespace =]package-name>* -sn -b * -reserveClass * -cata
cxf.apache.org
-?, -h,-help |
이 유틸리티에 대한 온라인 도움말을 표시하고 종료합니다. |
-fe frontend-name |
프런트 엔드를 지정합니다. 기본값은 JAXWS입니다. 현재 JAX-WS 2.1 호환 코드를 생성하기 위해 JAXWS 프런트 엔드 및 "jaxws21"프런트 엔드 만 지원합니다. |
-db databinding-name |
데이터 바인딩을 지정합니다. 기본값은 jaxb입니다. 현재 jaxb, xmlbeans, sdo (sdo-static 및 sdo-dynamic) 및 jibx를 지원합니다. |
-wv wsdl-version |
wsdl 버전을 지정합니다. 기본값은 WSDL1.1입니다. 현재 WSDL1.1 버전만 지원합니다. |
-p [ wsdl-namespace= ] PackageName |
생성된 코드에 사용할 0 개 이상의 패키지 이름을 지정합니다. 패키지 이름 매핑에 대한 WSDL 네임 스페이스를 선택적으로 지정합니다. |
-sn service-name |
생성된 코드에 사용할 WSDL 서비스 이름입니다. |
-b binding-name |
JAXWS 또는 JAXB 바인딩 파일 또는 XMLBeans 컨텍스트 파일을 지정합니다. 여러 항목을 지정하려면 여러 -b 플래그를 사용하십시오. |
-catalog catalog-file-name |
가져온 wsdl / schema를 맵핑할 카탈로그 파일 지정 |
-d output-directory |
생성된 코드 파일이 기록되는 디렉토리를 지정합니다. |
-compile |
생성된 Java 파일을 컴파일합니다. |
-classdir compile-class-dir |
컴파일된 클래스 파일이 기록되는 디렉토리를 지정합니다. |
-client |
클라이언트 메인 라인의 시작점 코드를 생성합니다. |
-clientjar jar-file-name |
모든 클라이언트 클래스와 wsdl을 포함하는 jar 파일을 생성합니다. -clientJar가 정의되면 지정된 wsdlLocation이 작동하지 않습니다. |
-server |
서버 메인 라인의 시작점 코드를 생성합니다. |
-impl |
구현 객체의 시작점 코드를 생성합니다. |
-all |
유형, 서비스 프록시, 서비스 인터페이스, 서버 메인 라인, 클라이언트 메인 라인, 구현 오브젝트 및 Ant build.xml파일 과 같은 모든 시작점 코드를 생성 합니다. |
-ant |
Ant build.xml스크립트 를 생성하도록 지정하십시오 . |
-autoNameResolution |
바인딩 사용자 지정을 사용하지 않고도 이름 충돌을 자동으로 해결합니다. |
-defaultValues=[DefaultValueProvider impl] |
impl 및 클라이언트에 대해 기본값이 생성되도록 지정합니다. 사용자 지정 기본값 공급자를 제공할 수도 있습니다. 기본 공급자는RandomValueProvider |
-nexclude schema-namespace [=java-packagename] |
코드를 생성할 때 지정된 WSDL 스키마 네임 스페이스를 무시하십시오. 이 옵션은 여러 번 지정할 수 있습니다. 또한 제외된 네임 스페이스에 설명된 유형에 사용되는 Java 패키지 이름을 선택적으로 지정합니다. |
-exsh (true/false) |
암시 적 SOAP 헤더 (예 : wsdl : binding에는 정의되었지만 wsdl : portType 섹션에는 정의되지 않은 SOAP 헤더)의 처리를 활성화하거나 비활성화합니다. SOAP 헤더를 처리하려면 CXF 2.4.x에서 기본값이 아닌 클래스 경로에서 사용할 수 있는 SOAP 바인딩 jar가 필요합니다. 나이. 이 플래그가 작동하려면 cxf-rt-binding-soap에 종속성을 추가해야 할 수 있습니다. 기본값은 거짓입니다. |
-dns (true/false) |
기본 네임 스페이스 패키지 이름 매핑의 로드를 활성화하거나 비활성화합니다. 기본값은 true이며 http://www.w3.org/2005/08/addressing=org.apache.cxf.ws.addressing 네임 스페이스 패키지 매핑이 활성화됩니다. |
-dex (true/false) |
기본 제외 네임 스페이스 매핑 로드를 활성화하거나 비활성화합니다. 기본값은 true입니다. |
-validate |
코드를 생성하기 전에 WSDL의 유효성을 검사할 수 있습니다. |
-keep |
코드 생성기가 기존 파일을 덮어쓰지 않도록 지정합니다. 결과적으로 발생하는 컴파일 문제를 해결해야 합니다. |
-wsdlLocation wsdlLocation |
@WebServiceClient 주석의 wsdlLocation 속성 값을 지정합니다. |
-xjc<xjc args> |
JAXB 데이터 바인딩을 사용할 때 XJC 프로세서로 직접 전달되는 쉼표로 구분된 인수 목록을 지정합니다. 사용 가능한 XJC 플러그인 목록은 -xjc-X. |
-noAddressBinding |
CXF 2.0과의 호환성을 위해이 플래그는 코드 생성기가 JAX-WS 2.1 호환 WS-Addressing 유형 대신 이전 CXF 독점 WS-Addressing 유형을 생성하도록 지시합니다. |
-v |
도구의 버전 번호를 표시합니다. |
-verbose |
코드 생성 프로세스 중에 주석을 표시합니다. |
-quiet |
코드 생성 프로세스 중에 주석을 억제합니다. |
-exceptionSuper |
wsdl : fault 요소에서 생성된 결함 Bean의 슈퍼 클래스 (기본값은 java.lang.Exception) |
-reserveClass classname |
-autoNameResolution과 함께 사용되며 클래스 생성 시 사용하지 않도록 wsdl-to-java의 클래스 이름을 정의합니다. 여러 클래스에 대해이 옵션을 여러 번 사용하십시오. |
-allowElementReferences<=true> |
(또는 -aer) 참이면, 래퍼 스타일 매핑을 사용할 때 요소 참조를 허용하지 않는 JAX-WS 2.2 사양의 섹션 2.3.1.2 (v)에 제공된 규칙을 무시합니다. |
-asyncMethods=foo,bar,... |
JAX-WS 바인딩 파일의 enableAsyncMapping과 유사하게 클라이언트 측 비동기 호출을 허용하기 위해 이후에 생성되는 Java 클래스 메서드 목록입니다. |
-bareMethods=foo,bar,... |
JAX-WS 바인딩 파일의 enableWrapperStyle과 유사한 래퍼 스타일 (아래 참조)을 갖는 후속 생성된 Java 클래스 메서드 목록입니다. |
-mimeMethods=foo,bar,... |
JAX-WS 바인딩 파일의 enableMIMEContent와 유사하게 mime : content 맵핑을 사용하기 위해 이후에 생성된 Java 클래스 메서드 목록입니다. |
-faultSerialVersionUID <fault-serialVersionUID> |
오류 예외의 suid를 생성하는 방법. NONE, TIMESTAMP, FQCN 또는 특정 숫자를 사용하십시오. 기본값은 NONE입니다. |
-mark-generated |
생성된 클래스에 @Generated 주석을 추가합니다. |
-suppress-generated-date | 생성 된 파일에 현재 타임 스탬프 쓰기를 억제합니다 (CXF 버전 3.2.2 이후). |
-maxExtensionStackDepth <int> | 스키마 확장을 구문 분석 할 때 허용되는 최대 스택 깊이입니다. 기본값은 5입니다 ( CXF 3.3.4 이후 ). |
wsdlurl |
코드 생성에 사용할 WSDL 파일의 경로 및 이름입니다. |
wsdl2java 명령어를 실행하면 다음 그림과 같이 자바 파일이 생성된다.
-client 옵션을 선택하여 PInfoByIjyoon_PInfoPort_Client.java 파일이 같이 생성되었다. 해당 자바 파일을 확인하면 웹서비스를 인보크 하는 샘플이 나와있다. value object가 null로 되어있으니 요청 value object 입력하여 호출하여 본다.
호출 후 응답 value object를 확인하면 웹서비스 제공 측에서 전달한 응답 값을 확인할 수 있다.
HttpURLConnection을 이용한 Http 클라이언트
사용자는 웹브라우저(익스플로러, 크롬, 사파리 등등)를 통해 웹서버에게 필요 URI를 요청하고 응답 값을 받는다. 웹브라우저는 그 응답 값(보통 HTML)을 해석하여 화면을 만들어준다. 이 처럼 웹��
malchooni.name