본문 바로가기
Game Programming

[JSOAP] KSOAP2에서 닷넷웹서비스로 인수 전달이 안된다면?

by 게임혼 2010. 11. 26.

안드로이드에서 SOAP은 KSOAP2이 유일한 방법이 될 수 있을 것이다.
그러나 일부 닷넷웹서비스의 경우 prefix를 사용하지 않고 몇가지 기준에 맞지 않는 부분이 있어 접근은 가능해도 인수 전달이 안되는 경우가 있다. 이를 해결하기 위해서는 몇가지 수정이 필요한데 소스 레벨에서의 수정이 그나마 편해서 KSOAP2를 조금 바꾸어 봤다. 굳이 소스를 고치지 않아도 해결이 가능하기 때문에 소스는 공개하지 않고 jar만 공개할까한다.

닷넷에서의 주요 변경점은 담과 같다.
1. Header 구분제거
2. prefix 제거
3. xs i~d까지 정확한 명칭으로 변경

굳이 소스를 고칠 필요는 없었는데....

사용시 주의사항은 두가지만 체크해주자.

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.setAddAdornments(false); //요거
        envelope.dotNet = true;                   //요거

www.gamehon.com www.gamemotor.com

안드로이드 웹서비스 싫어!!@@@

간단한 예제는 담과 같다.

    String SOAP_ACTION_PUT  = "http://tempuri.org/Test";
    String METHOD_NAME_PUT  = "TestFunc";
    String NAMESPACE     = "http://tempuri.org/";
    String END_POINT_URL = "http://localhost:8080/wspacket/test.asmx";

public JSoap()
{
        SoapObject request=null;
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.setOutputSoapObject(request);
        envelope.setAddAdornments(false);
        envelope.dotNet = true;

        HttpTransportSE androidHttpTransport = new HttpTransportSE(END_POINT_URL);
        androidHttpTransport.debug = true;
        androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        try {
            androidHttpTransport.call(SOAP_ACTION_PUT, envelope);
            String result = envelope.getResponse().toString();
            Log.d("SOAP", result);
            request=null;
            request = (SoapObject) envelope.getResponse();
        } catch (IOException ex) {
            request = null;
            Logger.getLogger(JSoap.class.getName()).log(Level.SEVERE, null, ex);
        } catch (XmlPullParserException ex) {
            request = null;
            Logger.getLogger(JSoap.class.getName()).log(Level.SEVERE, null, ex);
        }
}