Clean Code that Works.

네이버 지도 OPEN API 사용하는데...
위치 검색 해서 좌표 구하는 부분에서.. 네이버에서는 XML을 리턴한다.

그러므로.. 크로스 도메인 문제로 jQuery로는 사용이 불가 하다.(JSON으로 리턴해주면 되는데!!!!)
하여 서버사이드에서 처리를 해 줘야 한다.

서버에서 URL 로 콜 해서 데이터들을 가져온 다음..
(이걸 XML로 변환한 다음에 JSON으로 변환해야 될줄 알았는데 그냥 데이터(XML 형식의 TEXT)를 JSON으로 변환 시켜도 된다)

그럼 이런 결과가 찍힌다.
<?xml version="1.0" encoding="euc-kr" ?><geocode xmlns="naver:openapi"><userquery><![CDATA[경기도성남시정자1동25-1]]></userquery><total>1</total><item><point><x>321063</x><y>529727</y></point><address>경기도 성남시 분당구 정자1동 25-1</address><addrdetail><sido><![CDATA[경기도]]><sigugun><![CDATA[성남시 분당구]]><dongmyun><![CDATA[정자1동]]><rest><![CDATA[25-1]]></rest></dongmyun></sigugun></sido></addrdetail></item></geocode>

이것을 JSON으로 변경 해야 하는데
이미 공개된 API들이 있으므로 그것을 사용하자. ㅋ

org.json(maven) 과 net.sf.json

org.json의 경우 XML이라는 클래스에 toJSONObject() 메서드를 제공 한다. 하여 결과를 찍어 보면,
깔끔한 JSON 코드가 나온다.
{"geocode":{"total":1,"userquery":"경기도성남시정자1동25-1","item":{"point":{"y":529727,"x":321063},"address":"경기도 성남시 분당구 정자1동 25-1","addrdetail":{"sido":{"sigugun":{"content":"성남시 분당구","dongmyun":{"content":"정자1동","rest":"25-1"}},"content":"경기도"}}},"xmlns":"naver:openapi"}}


net.sf.json 에서는 XOM이라는 jar 파일이 필요하다.
XMLSerializer에서 의존하고 있는것이 있다.
하여 실행을 해 보면 아래와 같이 표시된다.
{"geocode":{"total":1,"userquery":"경기도성남시정자1동25-1","item":{"point":{"y":529727,"x":321063},"address":"경기도 성남시 분당구 정자1동 25-1","addrdetail":{"sido":{"sigugun":{"content":"성남시 분당구","dongmyun":{"content":"정자1동","rest":"25-1"}},"content":"경기도"}}},"xmlns":"naver:openapi"}}
{"@xmlns":"naver:openapi","userquery":"경기도성남시정자1동25-1","total":"1","item":{"point":{"x":"321063","y":"529727"},"address":"경기도 성남시 분당구 정자1동 25-1","addrdetail":{"sido":{"#text":"경기도","sigugun":{"#text":"성남시 분당구","dongmyun":{"#text":"정자1동","rest":"25-1"}}}}}}

약간 틀리다.
org.json에서는 text 값들을 content로
net.sf.json은 #text로 표시해준다.

왼지 org.json이 깨끗해 보이긴 하나.. 이미 net.sf.json을 사용중이므로..
아래것으로 해야겠다.

테스트 코드는 아래 것.

@Test
    public void getXmlData() {
        URL naverUrl;
        StringBuffer sb = new StringBuffer();
        try {
            naverUrl = new URL(
                    "http://map.naver.com/api/geocode.php?key=키입력&query=경기도성남시정자1동25-1");
           
            BufferedReader in = new BufferedReader(new InputStreamReader( naverUrl.openStream()));
            String inputLine;

            while ((inputLine = in.readLine()) != null)
                sb.append( inputLine.trim());
           
            in.close();
           
            System.out.println( sb.toString());
           
            org.json.JSONObject jsonObj = XML.toJSONObject( sb.toString());
            System.out.println(jsonObj);
            JSONObject obj = (JSONObject) new XMLSerializer().read( sb.toString());
            System.out.println( obj);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }