Web Service Client 만들기 ( 이클립스 )
부제 : SOAP Client over HTTPS
SOAP : Simple Object Access Protocol
HTTPS : secure Hyper Text Transport Protocol
WSDL : Web Service Definition Language
임으로 Dynamic Web Project ( 또는 Java Project )프로젝트를 생성 후에 추가하는 방법
방법 1. 프로젝트에 Web Service Client를 WSDL URL을 통해서 추가
: New -> Web Service Client -> Service definition
위와 같은 방식은 https://blog.outsider.ne.kr/187 에서도 살펴 볼 수 있지만,
WSDL을 URL 형태로 접근해서 받아 오는 경우지만, 에러가 발생하는 경우가 있다.
이때 발생하는 에러메시지: (X) The service definition selected is invalid.
에러가 해결 되지를 않을때는 아래 2번 방법을 시도
방법 2. 프로젝트에 WSDL File 생성하고 내용을 추가
일단 WSDL파일과 필요한 XSD파일도 같이 생성하고 수정한다.
WSDL 파일을 생성후에 브라우저(해당URL)에서 보이는 내용을 복사해서 해당 파일의 내용을 교체 한다.
그 다음으로는 WSDL파일을 통해서, Web Services -> Generate Client를 수행한다.
URL 주소 형식 예제 :
https://api.google.com/GoogleSearch.wsdl ,
http://www.webservicex.com/globalweather.asmx?WSDL
방법 3. wsimport를 사용해서 wsdl url을 호출하여 생성하는 방법 (아래쪽 참조)
Web Service Client 실행 하기
1. 테스트 실행
생성시에 테스트단계까지 선택을 하면 TestClient.jsp가 생성이 된다.
아래와 같은 테스트 화면을 볼 수 있다.
Configure the SSLContext with a TrustManager that accepts any cert (see below)
Configure the SSLContext with an appropriate trust store that includes your cert
Add the cert for that site to the default java trust store.
2. 아래와 같은 에러 발생시
이때도 HTTPS 연결시에 아래와 같은 에러가 발생하는 경우가 있다.
- javax.net.ssl.SSLHandshakeException
- sun.security.validator.ValidatorException
- PKIX path building failed
-sun.security.provider.certpath.SunCertPathBuilderException
- unable to find valid certification path to requested target Message
원인. Java client trying to access a server with a self-signed certificate.
http://stackoverflow.com/questions/9210514/unable-to-find-valid-certification-path-to-requested-target-error-even-after-c
해결.
1) Configure the SSLContext with a TrustManager that accepts any cert (see below)
해당 답변내의 예제 처럼 접근을 모두 허용하는 방법
2) Configure the SSLContext with an appropriate trust store that includes your cert
실행시에 적절한 trust store를 포함하는 방법이 있고,
3) Add the cert for that site to the default java trust store.
keytool을 통해서 자바의 기본 truststore에 추가 하는 방법 (아래쪽에 참조글)
(윈도우 위치 : C:\Program Files\Java\jre1.8.0_73\lib\security\cacerts)
(윈도우는 수정시에 관리자 권한으로 )
http://stackoverflow.com/questions/1828775/how-to-handle-invalid-ssl-certificates-with-apache-httpclient
참조 할만한 내용의 사이트들
웹서비스 클라이언트 만들기
웹서비스란게 있다. 쉽게 말하면 이기종간의 통신을 위한 것이다. SOAP, WSDL, UDDI등을 이용해서 자바사에서 C#으로 만들어진 서비스에 요청을 보내도 응답을 받을 수 있다. 그 이념과 목표는 대단했지만 너무 복잡한 스펙덕분에 빛을 발휘 못하고 요즘은 그나마 지원하는 툴들이 많아져서 괜찮아진것 같지만 REST의 등장으로 인하여 아주 큰 주목을 받지 못하고 있는 듯 하다. 검색해 보면 웹서비스에 대한 많은 글들을 볼수가 있고 크게 뜨진 못했지만 웹서비스는 끝났다라고 말할수는 없는듯 하다. REST가 뜨면서 같이 다시 주목받고 있는 듯한 느낌도....
https://blog.outsider.ne.kr/187
How to Create Sample WSDL in Eclipse and Generate Client ( 그림 설명 )
Have you ever tried creating Simple Java Web Service Definition Language in Eclipse? Well, here are few simple steps to create WSDL in Eclipse environment and Generate/Test Client.
http://crunchify.com/create-sample-wsdl-in-eclipse-and-generate-client/
Create a Java web service client via wsimport tool.
Alternative, you can use “wsimport” tool to parse the published wsdl file,
and generate necessary client files (stub) to access the published web service.
Where is wsimport?
This wsimport tool is bundle with the JDK, you can find it at “JDK_PATH/bin” folder.
Issue “wsimport” command.
> wsimport -keep http://localhost:9999/ws/hello?wsdl
WSImport over SSL with take (dev) certificate
Finally I got a solution, using wrapper class.
I think it makes sense to share the solution. Hope it will save some someone's time for better purposes.
http://stackoverflow.com/questions/29922479/wsimport-over-ssl-with-fake-dev-certificate
자바 기본 trust store에 서버 사설 인증서(공인 CA로부터 발급받지 않은)를 등록
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
Are you getting this error? This simply means that the web server or the URL you are
connecting to does not have a valid certificate from an authorized CA. But however,
being a programmer you would want to find out the alternative
way to solve this issue.
Default trusts의 암호는 "changeit"
> 보기(등록된 리스트)
c:\...\jre1.8.0_73>keytool -list -keystore .\lib\security\cacerts
> 등록
c:\...\jre1.8.0_73>keytool -keystore .\lib\security\cacerts -import -alias [등록을 원하는 이름, 주로 서비스 도메인] -file d:\server.cer
* server.cer은 브라우저를 통해서 접속후에 다운로드 가능
http://www.java-samples.com/showtutorial.php?tutorialid=210