php soap example ksoap2 example

ksoap 를 사용하기 위해서는 먼저
soap와 wsdl이 무엇인지 알아야 한다.


php5 에서는 soap를 lib형태로 지원하기 때문에 nusoap를 별도로 설정할 필요가 없으며


아래의 사이트에 자세한 설명이 나와 있다.


server2와 client4, client5 를 정확히 이해할 수 있어야 한다.


php soap example
soap 의 server 와 client 의 작성 및 사용 예제
http://devzone.zend.com/article/689#Heading1

Android ksoap2 project Home
http://code.google.com/p/ksoap2-android/

WSDL
http://www.w3.org/TR/wsdl
 


안드로이드에서 ksoap2를 사용하기 위해서는
1. 프로젝트에서 lib 폴더 생성
2. lib 폴더에 ksoap2의 jar를 추가 하고 preference 에 등록 하면

  

그림과 같이 생성이 된다.

AndroidMainfest.xml 에
<uses-permission android:name="android.permission.INTERNET"/>을 추가하고

Actvity 에 다음과 같이 코드를 삽입하면 된다.

 선언부에 추가
//============================================================
    private static final String SOAP_ACTION = "sayHello";
    private static final String METHOD_NAME = "sayHello";
    private static final String NAMESPACE = "http://192.168.0.210/HelloService.wsdl";
    private static final String URL = "http://192.168.0.210/rpcrouter.php";

onCreate 안에 추가
//============================================================
             SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
     
              request.addProperty("fristName", "ibm");
     
             SoapSerializationEnvelope envelope = new            SoapSerializationEnvelope(SoapEnvelope.VER11);
             envelope.bodyOut = request;
             envelope.setOutputSoapObject(request);
     
              AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport (URL);                   
     
              try {
     
                      androidHttpTransport.call(SOAP_ACTION, envelope);
     
                      // Get the SAOP Envelope back and the extract the body
     
                      SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
                      String XXXX = (String) resultsRequestSOAP.getProperty("greeting");
                    
                      Log.d("===","    "+XXXX.toString());
     
              } catch(Exception E) {
     
              }
//============================================================

실행하면 가장 이해가 안되었던 부분이

선언부에 있는 NAMESPACE 와 URL 이 였는데

NAMESPACE 는 wsdl 에 선언되어 있는 targetnamespace 이고
URL 은 php에서 server쪽soap구현 부분이라고 생각하면 된다.


php의 경우
server 를 구현하고 client를 호출하면 wsdl에 정의 되어 있는 내용대로 동작한다.



ksoap2를 이용할 경우
어떤 방식으로 php에 있는 client를 실행할지 몰라서 삽질을 좀 했는데
검색해 봐도 잘 이해가 안되는 부분이 많고쉽게 설명한 사람도 없는것 같아서 기록만든다.



위의 소스에서
우선
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
를 실행한다.

이는 wsdl 에 정의되어 있는 client 객체와 실행해야 하는 function를 정의한다고 생각하면 되고

request.addProperty("fristName", "ibm");
addProperty는 wsdl 에 message 부분에 선언되어 있는 input쪽 놈의 필드를 의미한다.

그리고, 가져오는 놈은
resultsRequestSOAP.getProperty("greeting");
함수를 이용하는데 이 또한 wsdl의 message 부분에 output 쪽 놈의 필드이다.


실행을 하면 logcat에 good job이라고 출력되도록 만들어 놓긴 했는데
소스정리하여 zip형태로 올려야 겠다.

댓글

이 블로그의 인기 게시물

mount 명령 ( 읽기 권한만 있는놈 쓰기 권한 주기 )

c# mqtt client example

비글본 블랙 고정 아이피 설정