해외 기업의 웹서비스를 이용하는 기능을 개발하고 있다. 이 과정에서 낯설은 wsdl 생성과정 및 SOAP 사용방법을 정리해보고자 한다.

wsimport 는 JAX-WS 에 적합한 산출물을 생성하는 도구다. wsdl(Web Services Description Language) 을 불러와 그 파일을 기준으로 자바 코드를 생성한다.

사용방법

사용방법은 간단하다(물론 옵션은 여러가지가 있다. 상황에 따라 적절한 옵션을 추가하자).

$ wsimport {wsdl-url}

선택사항

$ wsimport
wsimport
Missing WSDL_URI
Usage: wsimport [options] <WSDL_URI>
where [options] include:
-b <path> specify jaxws/jaxb binding files or additional schemas
(Each <path> must have its own -b)
-B<jaxbOption> Pass this option to JAXB schema compiler
-catalog <file> specify catalog file to resolve external entity references
supports TR9401, XCatalog, and OASIS XML Catalog format.
-classpath <path> specify where to find user class files and wsimport extensions
-cp <path> specify where to find user class files and wsimport extensions
-d <directory> specify where to place generated output files
-encoding <encoding> specify character encoding used by source files
-extension allow vendor extensions - functionality not specified
by the specification. Use of extensions may
result in applications that are not portable or
may not interoperate with other implementations
-help display help
-httpproxy:<proxy> set a HTTP proxy. Format is [user[:password]@]proxyHost:proxyPort
(port defaults to 8080)
-J<javacOption> pass this option to javac
-keep keep generated files
-p <pkg> specifies the target package
-quiet suppress wsimport output
-s <directory> specify where to place generated source files
-target <version> generate code as per the given JAXWS spec version
Defaults to 2.2, Accepted values are 2.0, 2.1 and 2.2
e.g. 2.0 will generate compliant code for JAXWS 2.0 spec
-verbose output messages about what the compiler is doing
-version print version information
-fullversion print full version information
-wsdllocation <location> @WebServiceClient.wsdlLocation value
-clientjar <jarfile> creates the jar file of the generated artifacts along with the
WSDL metadata required for invoking the web service.
-generateJWS generate stubbed JWS implementation file
-implDestDir <directory> specify where to generate JWS implementation file
-implServiceName <name> local portion of service name for generated JWS implementation
-implPortName <name> local portion of port name for generated JWS implementation
Extensions:
-XadditionalHeaders map headers not bound to request or response message to
Java method parameters
-Xauthfile file to carry authorization information in the format
http://username:password@example.org/stock?wsdl
-Xdebug print debug information
-Xno-addressing-databinding enable binding of W3C EndpointReferenceType to Java
-Xnocompile do not compile generated Java files
-XdisableAuthenticator disable Authenticator used by JAX-WS RI,
-Xauthfile option will be ignored if set
-XdisableSSLHostnameVerification disable the SSL Hostname verification while fetching
wsdls
Examples:
wsimport stock.wsdl -b stock.xml -b stock.xjb
wsimport -d generated http://example.org/stock?wsdl

실습

http://www.webservicex.com/globalweather.asmx?WSDL 을 기준으로 테스트를 해보자.

$ wsimport -verbose -keep -extension http://www.webservicex.com/globalweather.asmx\?WSDL

라고 실행하면

parsing WSDL...
[WARNING] SOAP port "GlobalWeatherSoap12": uses a non-standard SOAP 1.2 binding.
line 199 of http://www.webservicex.com/globalweather.asmx?WSDL
[WARNING] Port "GlobalWeatherHttpGet" is not a SOAP port, it has no soap:address
line 202 of http://www.webservicex.com/globalweather.asmx?WSDL
[WARNING] port "GlobalWeatherHttpGet": not a standard SOAP port. The generated artifacts may not work with JAX-WS runtime.
line 202 of http://www.webservicex.com/globalweather.asmx?WSDL
[WARNING] Port "GlobalWeatherHttpPost" is not a SOAP port, it has no soap:address
line 205 of http://www.webservicex.com/globalweather.asmx?WSDL
[WARNING] port "GlobalWeatherHttpPost": not a standard SOAP port. The generated artifacts may not work with JAX-WS runtime.
line 205 of http://www.webservicex.com/globalweather.asmx?WSDL
Generating code...
net/webservicex/GetCitiesByCountry.java
net/webservicex/GetCitiesByCountryResponse.java
net/webservicex/GetWeather.java
net/webservicex/GetWeatherResponse.java
net/webservicex/GlobalWeather.java
net/webservicex/GlobalWeatherHttpGet.java
net/webservicex/GlobalWeatherHttpPost.java
net/webservicex/GlobalWeatherSoap.java
net/webservicex/ObjectFactory.java
net/webservicex/package-info.java
Compiling code...
javac -d /private/tmp/test-ws/. -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/lib/tools.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/classes -Xbootclasspath/p:/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/jre/lib/rt.jar /private/tmp/test-ws/./net/webservicex/GetCitiesByCountry.java /private/tmp/test-ws/./net/webservicex/GetCitiesByCountryResponse.java /private/tmp/test-ws/./net/webservicex/GetWeather.java /private/tmp/test-ws/./net/webservicex/GetWeatherResponse.java /private/tmp/test-ws/./net/webservicex/GlobalWeather.java /private/tmp/test-ws/./net/webservicex/GlobalWeatherHttpGet.java /private/tmp/test-ws/./net/webservicex/GlobalWeatherHttpPost.java /private/tmp/test-ws/./net/webservicex/GlobalWeatherSoap.java /private/tmp/test-ws/./net/webservicex/ObjectFactory.java /private/tmp/test-ws/./net/webservicex/package-info.java

처럼 실행되어 있는 것을 볼 수 있을 것이다. 대상으로 하는 wsdl 파일을 내려받은 후에 이파일을 기준으로 자바코드를 생성하는 과정을 확인할 수 있다. 그리고 내려받은 자바코드를 컴파일하는 것까지 처리해준다.

생성된 디렉토리의 구조는 다음과 같다.

.
├── globalweather.asmx?WSDL
└── net
    └── webservicex
        ├── GetCitiesByCountry.class
        ├── GetCitiesByCountry.java
        ├── GetCitiesByCountryResponse.class
        ├── GetCitiesByCountryResponse.java
        ├── GetWeather.class
        ├── GetWeather.java
        ├── GetWeatherResponse.class
        ├── GetWeatherResponse.java
        ├── GlobalWeather.class
        ├── GlobalWeather.java
        ├── GlobalWeatherHttpGet.class
        ├── GlobalWeatherHttpGet.java
        ├── GlobalWeatherHttpPost.class
        ├── GlobalWeatherHttpPost.java
        ├── GlobalWeatherSoap.class
        ├── GlobalWeatherSoap.java
        ├── ObjectFactory.class
        ├── ObjectFactory.java
        ├── package-info.class
        └── package-info.java


주변 개발자들이 ZSH(http://www.zsh.org/) 으로 많이 넘어갔다.

이직하는 팀에서도 ZSH 를 사용하자는 이야기에 오늘 설치를 진행한다.

1. ZSH 설치

1.1. 우분투

$ sudo apt install zsh

1.2. 맥Mac

$ brew install zsh

2. oh-my-zsh 설치

2.1. curl

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

2.2. wget

sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

3. zsh 사용하도록 정의

chsh -s /bin/zsh

4. 재시작


그후 터미널에서 사용하는 명령어의 선택항목을 탐색시 탭<tab> 키를 누르면 선택항목들을 볼 수 있다.

명령어 입력 후 '-' 를 입력하면 해당 명령어로 실행한 이력도 확인가능하다.


'Tools' 카테고리의 다른 글

ZSH - The Z Shell  (0) 2016.05.14
[atom] asciidoc-preview 한글처리  (0) 2015.10.29

최근에 나는 프론트쪽을 거의 다루지 않았다. 백엔드쪽에서 프론트에 필요한 API만 만들어서 추가하는 쪽으로 활용했었다. 그래서 툴에 별로 관심을 두지 않아서 Aptna를 이용했었다. 그런데, 운영체제를 자주 밀어버리는 편(우분투를 사용하다보니 이게 일상이다)이라 설치가 가벼운 녀석을 찾았다. 그러다가 우연히 Brackets를 발견했다. 데비안 계열의 운영체제까지 지원한다. 오우.

- 공식사이트: http://brackets.io/

- Github: https://github.com/adobe/brackets

Adobe에서 내놓은 웹플랫폼 개발툴IDE Brackets([])를 소개한다.

모양은 이렇다.

모습도 깔끔하다. node를 기반으로 해서 동작하는 녀석으로 보인다.

현재 36번째 릴리즈버전이 출시되었고, 지속적으로 출시가 될 것으로 보인다. 쓸만한 플러그인들도 많이 제공한다. 


한글화도 잘 되어 있다.

JCO에서 발표했던 REST API에 대한 백엔드를 직접 활용하는 예제를 작성하고 있는 중이다.

실시간 미리보기 기능(현재는 크롬chrome 브라우저에 대해서만 지원)도 지원(Ctrl + Alt + P(review))한다. 코드를 수정 후에 저장하면 바로 브라우저에 갱신신호가 가면서 다시 읽는 것으로 보인다. 아마... 크롬 내부의 API겠지?

태그에서 지정한 class에 대한 CSS 파일도 바로호출이 가능하며,

선택된 class에 적용대상을 미리보기로 호출된 브라우저에 표시도 해준다.

사용자 폴더에 설정파일인 brackets.json 을 수정하여 환경을 설정할 수 있다(지만 귀찮다). 나름 중요한 탭형식과 사이즈 조정은 편집기 오른쪽 하단에 입력하여 설정할 수 있다. 기본은 '스페이스, 크기 4'로 설정되어 있는데, 프론트 쪽에서는 '스페이스 크기 2'를 선호하기에 바꿔봤다. 그러면 brackets.json에 설정내용이 추가된다.


ㅡ_-); 이때 이야기했던 28일되면 VM 인스턴스 내릴거에요.

라고 한 이야기가 거짓말이 되었다. 두둥. AngularJS 공부도 할겸해서 예제를 만들고 있다. 코드만 보여줘서는 의미가 많이 약해질 것이라는 개인적인 욕심이 어울어져 이런 일을 벌이게 되었다. 흠… 지금 예제가 돌고 있는 서버에 CI를 설치해둘까 하는 생각이 들었는데… 문득, OpenShift에서 Jenkins 기어만들고 거기서 빌드하도록 만들면 되겠구나…!! 하는 생각이 든다. ㅎㅎ 돈이 굳었다. ㅡ_-);;

OpenShift에 대해서는 아래내용을 참고하세요.

2014/02/28 - [Java/Tools] - 무료로 쓸만한 통합된 개발환경 시스템 OpenShift(By redhat)를 소개합니다.

프로젝트는… ihoneymon@github.com/rocking-the-rest-api-view를 참고하기 바란다. Yeoman을 활용해서 웹애플리케이션을 초기생성했다.

Yeoman으로 AngularJS 프로젝트 구성하기(http://www.hans.or.kr/2014/02/yeoman-angularjs.html)

위의 내용을 이용해서 초기화를 하고 작업 진행중이다.


깃헙github에서 내놓을 Atom editor(https://atom.io/)이 정식 출시되기 전까지는 쓸만한 녀석으로 보인다.

Atom editor 소개(http://blog.outsider.ne.kr/1035)

Atom editor가 정식 출시가 되면(리눅스도 지원한다면) 바로 옮겨가지 않을까? ㅡ_-)?

ihoneymon@ihoneymon-desktop:/workspace/git-repositories/never-ending-study$ git push origin develop

ssh_exchange_identification: Connection closed by remote host

fatal: Could not read from remote repository.


참고 페이지 : https://github.com/nodester/nodester/issues/346


git pull --rebase

후 git pull origin develop 정상동작

+ Recent posts