SOAP
여러분 안녕하십니까?
오늘은 .NET 환경으로 구성된 WebService와 통신하는 방법을 알아보고자 합니다.
SOAP 정의
Simple Object Access Protocol의 약자로서, SOAP에 대한 개념을 일단 검색을 통해 확인하시기 바랍니다.
간단히 말하자면, Http 프로토콜로 통신하면서 표준규약인 XML을 주고 받자는게 골자입니다.
그러나 일각에서는 Simple이라는 말이 무색할만큼, SOAP의 응용은 너무나 깊고 복잡하다는 뜻에서
SOAP를 Service Oriented Acchitecture Protocol이라고 부르기도 합니다.
결론은 RSS처럼 특정 규악을 따른 XML에 불과하다고, 일단 그렇게 생각하시기 바랍니다.
SOAP 사용
결과부터 먼저 얘기하자면 소스는 이렇습니다.
주석 처리한 것은 없어도 무방합니다. 최소한의 소스를 위해 이렇게 했습니다.
한 가지 주의하실 점은 NAMESPACE 뒤에 반드시 '/'를 잊지 말라는 겁니다.
만약 그렇게 되면, WebService에 연결은 되나 Parameter가 전혀 연결되지 않는 현상이 일어나게 됩니다.
주의하시기 바랍니다.

SOAP 방법
먼저 Library를 다운 받으셔야 할 겁니다.
'ksoap2'라는 것이 오늘 우리가 사용할 라이브러리입니다. Lite Version과 Full Version이 있습니다.
개인적인 실험 결과, Full Version만 필요한 것이 아니라 Lite Version인 Core도 필요합니다.
그래서 2개를 다 다운받자는 얘깁니다.
Lite Version Link (Name : ksoap2-j2me-core-2.1.2.jar)
Full Version Link (Name : ksoap2-j2me-full.jar)
javascript: (function(){location.href = " http://ko.sourceforge.jp/frs/g_redir.php?m=jaist&f=%2Fksoap2%2Fksoap2%2F2.1.2%2Fksoap2-j2se-full-2.1.2.jar";})();
어떤 사이트에보니 mail.jar니 activation.jar가 필요하더라
뭐 이런 얘기가 있던데, 다 필요없습니다. 이 2개만 받아주세요.
자, 이제 받은 것은 연결해야겠죠?
지금 만든 Project는 Java Project입니다.
일단 안드로이드에 적용하기 전에 단위 테스트를 하는 것이 좋겠죠?
이제 프로젝트를 우클릭 한 후, Properties를 선택합니다. 혹은 바로 Alt + Enter를 누르셔도 무방합니다.

이렇게 Add External JARs를 통해, 라이브러리를 추가합니다.

이제 소스 코드를 공개하도록 하겠습니다.
package com.wapple.soap;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
public class SOAP {
private final String SOAP_ACTION = "http://tempuri.org/UserLogin";
private final String METHOD_NAME = "UserLogin";
private final String NAMESPACE = "http://tempuri.org/"; // '/' Don't take out this !
private final String URL = "http://121.253.15.19/account.asmx";
public void ksoap2(){
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
private final String METHOD_NAME = "UserLogin";
private final String NAMESPACE = "http://tempuri.org/"; // '/' Don't take out this !
private final String URL = "http://121.253.15.19/account.asmx";
public void ksoap2(){
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("userid", "asdf");
request.addProperty("userpwd", "asdf");
request.addProperty("udid", "1");
request.addProperty("userpwd", "asdf");
request.addProperty("udid", "1");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.setOutputSoapObject(request);
envelope.dotNet=true;
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
System.out.println(request); // Confirm Parameters
try {
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
System.out.println(request); // Confirm Parameters
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
String result = envelope.getResponse().toString();
System.out.println(result); // Confirm Result
} catch (Exception e) {
e.printStackTrace();
}
}
String result = envelope.getResponse().toString();
System.out.println(result); // Confirm Result
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SOAP soap = new SOAP();
soap.ksoap2();
}
}
이 코드는 이미 검증했기 때문에, 혹시 에러가 나게 된다면 다시 한 번 신중하게 코드를 분석하시기 바랍니다.
envelope.dotNet=true;
이 부분도 은근히 빠뜨리기 쉽습니다. 주의하시고 꼭 삽입하시기 바랍니다.
SOAP 정리
물론 라이브러리를 사용하지 않고 .append 등을 통해 일일이 코딩할 수도 있습니다.
그러나 굳이 있는 라이브러리를 버려둔 채, 하드 코딩을 할 필요는 없다고 생각합니다.
하지만 개념은 알아야겠죠? SOAP의 개념에 대해 다시 한 번 확인하시기 바랍니다.
그러니까 하드코딩을 하면 어떻게 될까요? 한마디로 XML을 만들어서 요청하면, XML이 오게되고 그것을 파싱하는거죠.
마지막으로 안드로이드 코드는 이것을 바탕으로 응용하시기 바랍니다. 핵심 코드와 라이브러리만 복사하면 됩니다.
이상으로 오늘은 마치도록 하겠습니다. 이상입니다.
* 혹시나 해서 Code를 포함한 Project와 jar파일을 첨부합니다.
댓글 없음:
댓글 쓰기