Search Results for 'HttpURLConnection'

1 POSTS

  1. 2012.06.26 URL접속을 통해 XML 데이터 수신 기능 구현

간혹 서비스 기능을 구현하기 위해 Java 모듈에서 HTTP URL Connection을 통해 XML 데이터를 수신해야 하는 경우가 발생합니다. 자주 있는 일은 아니지만 1년에 3~4번 정도는 이러한 기능을 구현 할 일이 발생하는군요. 그래서 정리 차원에서 포스팅을 합니다.

 

클라이언트 모듈이 XML 데이터를 수신하는 전반적인 과정은 다음과 같습니다.

 

  1. 접속하고자 하는 URL 조합 (Parameter 포함)
  2. 조합된 URL로 부터 HttpURLConnection 객체 인스턴스 생성
  3. HttpURLConnection 에 헤더정보 설정. (POST 설정도 이때 이루어짐)
  4. HttpURLConnection으로 부터 OutputStream을 얻어 Parameter를 Byte 배열로 할당
  5. HttpURLConnection으로 부터 BufferedReader를 얻음
  6. BufferedReader를 SAXBuilder의 build 인자로써 할당
  7. SAXBuilder로 부터 수신된 XML 데이터의 Document 객체를 얻어옴.

 

실제 위 과정을 구현한 아래 코드를 보면 더 이해가 빠를겁니다.

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;


public class HttpConnection {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		HashMap paramMap = new HashMap();
		paramMap.put("boardId", "BA002");
		paramMap.put("searchKeyword", "스마트폰");
		paramMap.put("searchField", "title,content");
		paramMap.put("articleCountPerPage", "10");

		Document xmlDocument = getXmlServiceResult(paramMap);
		
		Element rootElement = xmlDocument.getRootElement();
		List articleList = rootElement.getChildren("Article");
		
		for (Element article : articleList) {
			String id = article.getChildTextTrim("Id");
			String title = article.getChildTextTrim("Title");
			String contents = article.getChildTextTrim("Contents");
			String pubDate = article.getChildTextTrim("PubDate");
			String writer = article.getChildTextTrim("Writer");
			
			// 출력 로직 혹은 이후에 필요한 로직 추가
		}
	}
	
	/**
	 * 서비스 URL로 접속하여 XML결과를 받아 Document 객체를 반환 
	 * @param paramMap
	 * @return
	 */
	public static Document getXmlServiceResult(HashMap paramMap) {
		String baseUrl = "http://localhost:8080/BoardService.do";
		String parameters = "";

		Set keySet = paramMap.keySet();
		Iterator

keys = keySet.iterator(); while (keys.hasNext()) { String paramKey = (String) keys.next(); String paramValue = (String) paramMap.get(paramKey); if (parameters.equals("")) { parameters += paramKey + "=" + paramValue; } else { parameters += "&" + paramKey + "=" + paramValue; } } OutputStream out = null; BufferedReader reader = null; Document document = null; try { URL targetURL = new URL(baseUrl); URLConnection urlConn = targetURL.openConnection(); HttpURLConnection httpConnection = (HttpURLConnection) urlConn; httpConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); httpConnection.setRequestMethod("POST"); httpConnection.setDoOutput(true); httpConnection.setDoInput(true); httpConnection.setUseCaches(false); httpConnection.setDefaultUseCaches(false); out = httpConnection.getOutputStream(); out.write(parameters.getBytes("utf-8")); out.flush(); out.close(); reader = new BufferedReader(new InputStreamReader(httpConnection.getInputStream())); // Result XML contents parsing by JDOM Parser SAXBuilder builder = new SAXBuilder(); try { document = (Document) builder.build(reader); } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return document; } }

 

XML 결과에 대한 Parsing 및 후처리에 대해서는 비지니스 로직에 맞게 구현을 하면 될것 같네요.

Write your message and submit