티스토리 뷰

IT/Java

Java - SOAP 통신 예제

Normal_One 2017. 6. 17. 12:32

 SOAP(Simple Object Access Protocol)은 일반적으로 널리 알려진 http, https 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜입니다. SOAP에는 여러가지 방식이 있는데, 여기서는 간단하게 구성하여 XML메시지를 날리는 형태를 소개하겠습니다. 그리고 이 소스 코드를 구성할 때 URL이 HTTPS라서 SSL 인증에서 에러가 발생했는데, 이에 대한 해결법과 Weblogic 서버에서 사용될 수 있도록 구성 된 예제를 제공하도록 하겠습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
     public String soapDataTransfer() {
 
            try {
                URL url;
                /*
                 * Weblogic에서 https url 사용하기 위한 방법 (new sun.net.www.protocol.https.Handler())
                 */
                url = new URL(null"https://url.com"new sun.net.www.protocol.https.Handler());
                
                /*
                 * SOAP XML문 구성
                 */
                String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                            "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"                " + 
                            "                        soap:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"    " + 
                            "                           xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\"        " +
                            "                           xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\">                " +
                            "    <soap:Body>                                                                            " +
                            "        <DATA>" + "DATA" + "</DATA>                                                       " +
                            "    </soap:Body>                                                                        " +
                            "</soap:Envelope>                                                                         ";
                
                /*
                 * SSL 인증을 무조건 true로 만드는 소스 코드
                 */
                TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
                        return null; } 
 
                    public void checkClientTrusted(X509Certificate[] certs, String authType) { 
                    } 
 
                    public void checkServerTrusted(X509Certificate[] certs, String authType) { 
 
                    } 
                } };
 
                SSLContext sc = SSLContext.getInstance("SSL"); 
                sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
                HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
 
                HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier(){
                     public boolean verify(String string,SSLSession ssls) {
                            return true;
                     }
                 }); 
 
                HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                
                /*
                 * 연결 시간과 header 설정
                 */
                conn.setConnectTimeout(3000);
                conn.setDoOutput(true);
                conn.setRequestMethod("POST");
                conn.addRequestProperty("Content-Type""text/xml");
                OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
                wr.write(xml);
                wr.flush();
 
                InputStreamReader in = new InputStreamReader(conn.getInputStream(),"utf-8");
                BufferedReader br = new BufferedReader(in);
                String strLine;
                String returnString = "";
                
                /*
                 * 보낸 XML에 대한 응답을 받아옴
                 */
                while ((strLine = br.readLine()) != null){
                    returnString = returnString.concat(strLine);
                }
 
                in.close();
                wr.close();
                
                /*
                 * 보낸 XML에 대한 응답을 출력.
                 */
                System.out.println(returnString);
 
            } catch (Exception e) {
                e.printStackTrace();
            }        
 
            return "soapDataTransfer";
        }
cs


 중간 중간에 주석을 적어 두었으니, 보시는데 어려움은 없을 듯합니다. 해당 방법은 Weblogic 서버 기반에 SSL 인증서 설치없이 SSL을 무조건 믿는다는 형식으로 연결을 취하는 방식입니다. tomcat 서버이거나 SSL(HTTPS)가 아닐 시에는 주석에 적혀있는 대로 각각의 코드를 지워주시면 됩니다. 참고로 import가 필요하실텐데, 전부 java.net 이나 javax.*이니 참고하시기 바랍니다. JDE만 있으면 별도의 라이브러리는 필요하지 않습니다. 유용하게 사용하시길 바랍니다.


'IT > Java' 카테고리의 다른 글

Java - Multi-Thread Programming  (0) 2019.11.17
Java - Client IP 가져오기  (1) 2017.09.02
Java - Collections Framework(컬렉션 프레임워크)  (0) 2017.03.05
Java - Generic(제네릭)  (0) 2017.03.05
Java - enum  (0) 2017.03.05
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday