반응형

현재 프로젝트에서 외부 연결을 SOAP을 이용하여 가져와야 해서 프로젝트에 적용한 ksoap2 적용 모듈을 작성해볼게요.

 

	Map<String,String> map = new HashMap<String,String>();
		
	String SOAP_ACTION_WS_USP_MB_GET_TERM_MISU_SAB  = ""; //SOAP 액션
	String METHOD_NAME_WS_USP_MB_GET_TERM_MISU_SAB  = "";  //메소드 네임
	        
	String NAMESPACE = "http://www.unierp.com/";    
	        
	try {
		SoapObject soapReq = new SoapObject(NAMESPACE, METHOD_NAME_WS_USP_MB_GET_TERM_MISU_SAB);
			 
		soapReq.addProperty("INDEX","1");	//필요한 파라미터
		soapReq.addProperty("HP_TEL", hpTel);
			
		//Soap 버전및 .donet 지원여부 
		SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);        
		soapEnvelope.dotNet = true;
		soapEnvelope.setOutputSoapObject(soapReq);
		        
		HttpTransportSE aht = new HttpTransportSE(erpURL);	//soap URL
		        
		aht.call(SOAP_ACTION_WS_USP_MB_GET_TERM_MISU_SAB, soapEnvelope); 

		SoapObject result  = (SoapObject) soapEnvelope.bodyIn;		//각 넘어온 xml구조에 맞게 property를 가져오시면 되요
		SoapObject nameResult = (SoapObject) result.getProperty(0);  
		SoapObject nameResult2 = (SoapObject) nameResult.getProperty(1);  
		SoapObject nameResult3 = (SoapObject) nameResult2.getProperty(0);          
		int count = nameResult3.getPropertyCount();
	        	
		for (int i = 0; i <= count - 1; i++) { 

			SoapObject simpleSuggestion = (SoapObject) nameResult3.getProperty(i);		    	
			map.put("C_YN", simpleSuggestion.getProperty("C_YN").toString().trim());
			map.put("C_MSG", simpleSuggestion.getProperty("C_MSG").toString().trim());
		}
		        
	} catch (Exception e) {
		e.printStackTrace();
	}

적용을 하면서 한 가지 의문이 생겼어요. obj.getProperty("C_MSG") 보통 없는 값이면 NULL 또는 ""빈 값을 리턴을 하는데 RuntimeException에러가 발생하여 SoapObject.java 소스를 봤어요.

public String getPropertyAsString(String name) {
	Integer index = propertyIndex(name);
	if (index != null) {
		return getProperty(index.intValue()).toString();
	} else {
		throw new RuntimeException("illegal property: " + name);
	}
}

이렇게 throw를 발생을 하고 있네요. 이 부분을 수정하여 프로젝트에 적용을 하면 되는데 그냥

//이렇게 get하기전에 count를 체크하여 가져오도록 했어요
if ( changeReason.getPropertyCount() > 0) {

}

원본 소스 링크

 

simpligility/ksoap2-android

ksoap2-android - SOAP support for Android. Contribute to simpligility/ksoap2-android development by creating an account on GitHub.

github.com

416라인을 보시면 돼요.

반응형

+ Recent posts