weblogic 기반으로 https url 호출

블로그에 포스팅하는게 귀찮아서 한동안 뜸하다가 간만에 포스팅.
업무상 java코드로 https url을 호출하여 response body부분의 데이터를 읽어와야 하는 이슈가 있어서,  그냥 쉽게 생각하고 java.net.URLConnection을 이용해서 로컬에서 개발을 진행하고, 테스트를 해보니 작동이 잘되네…

로컬에서는 서블릿 컨테이너로 톰캣(tomcat)을 사용.
테스트서버 개발환경은 레진(resin)을 사용.
테스트서버에서도 잘 작동.

운영서버는 웹로직(weblogic)을 사용하는데 운영서버에 반영하니 아래와 같은 Exception 발생.
javax.net.ssl.SSLKeyException: Hostname verification failed: HostnameVerifier=weblogic.security.utils.SSLWLSHostnameVerifier

http://myfusionlearnings.blogspot.kr/2015/04/javaxnetsslsslkeyexception-failed.html
신나게 구글링을 해보니 위와 같은 링크가 나온다.  사실 내가 찾은건 아니고 고객사 시스템팀에서 참고하라고 찾아줌.
고객사의 경우 와일드카드인증서를 설치하여 사용중인데, weblogic에서 이게 문제이니, WAS 설정을 수정하거나, 자바 코드로 그냥 무조건 hostname 검증시 성공으로 반환하도록 우회하는 코드를 추가하면 된다고 하는데…..
일단 운영중인 서비스의 WAS설정을 변경하는건 무슨 사이드이펙트가 발생할지 예측이 힘들기 때문에 후자인 코드상에서 hostname 검증을 무조건 성공으로 반환하도록 수정했다.

힘들게 수정하고 tomcat, resin에서 정상작동을 확인하고 weblogic에 반영을 하니 이번에는 왠 ClassCastException이 발생한다.
java.lang.ClassCastException: weblogic.net.http.SOAPHttpsURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection

http://idmoim.blogspot.kr/2014/03/javalangclasscastexception.html
음…. 또 구글링을 신나게 해보니 기껏 예외처리 하려고 수정한 HttpsURLConnection을 weblogic에서는 사용하지 않는단다.

그러면서 해결책은 또 WAS 설정에 옵션추가.
WAS설정을 변경하는건 이미 불가능한 입장이라 또 구글링을 한다.

https://community.oracle.com/thread/1066325
http://www.experts-exchange.com/Programming/Languages/Java/Q_27673676.html

웹로직에서는 HttpsURLConnection을 사용할 수 없으니 그냥 java.net.HttpURLConnection을 사용하되, java.net.URL 인스턴스 생성시 sun.net.www.protocol.https.Handler()로 생성해서 사용하라는 소리를 하기에 다시 소스를 원복하고 URL 인스턴스 생성 부분을 수정하고 HttpURLConnection으로 다시 수정.

tomcat 정상, resin 정상, weblogic 정상……………으로 추정됨;;;

weblogic까지 반영은 완료했으나, 로그 모니터링 권한이 없는 관계로.. 별 얘기가 없으면 잘 되는거겠지…라고 생각하며…. 이 늦은 시간에 집에 안가고 오늘의 삽질내역을 간만에 블로그에 포스팅 함.

덕분에 간만에 안되는 영어공부 신나게 함  ㅡ.ㅡ;