source

Android에서 SOAP 웹 서비스를 호출하는 방법

factcode 2022. 8. 13. 12:08
반응형

Android에서 SOAP 웹 서비스를 호출하는 방법

Android에서 표준 SOAP/WSDL 웹 서비스를 호출하는 방법에 대한 좋은 정보를 찾는 데 많은 어려움을 겪고 있습니다.제가 찾은 것은 매우 복잡한 문서와 "kSoap2"에 대한 참조뿐입니다. 그리고 SAX를 사용하여 수동으로 모든 것을 해석하는 것에 대한 것입니다.네, 괜찮아요, 하지만 2008년이니까 표준 웹 서비스에 전화할 수 있는 좋은 도서관이 있을 거예요.

웹 서비스는 기본적으로 NetBeans에서 작성된 것입니다.배관 클래스 생성을 위한 IDE 지원을 받고 싶습니다.Android 기반 전화기에서 WSDL 기반 웹 서비스에 연락할 수 있는 가장 쉽고 우아한 방법이 필요합니다.

Android는 SOAP 라이브러리를 제공하지 않습니다.직접 쓰거나 kSOAP 2와 같은 것을 사용할 수 있습니다.아시다시피 다른 사람들은 kSOAP2를 컴파일하여 자신의 프로젝트에서 사용할 수 있었지만, 저는 그럴 필요가 없었습니다.

구글은 지금까지 안드로이드에 SOAP 라이브러리를 추가하는 것에 거의 관심을 보이지 않았다.REST 기반 서비스에 대한 현재의 웹 서비스 트렌드를 지원하고 JSON을 데이터 캡슐화 형식으로 사용하는 것이 바람직하다고 생각합니다.또는 메시징에 XMPP를 사용합니다.하지만 그것은 추측일 뿐이다.

XML 기반 웹 서비스는 현재 Android에서 약간 중요하지 않은 작업입니다.NetBeans를 모르기 때문에 이용할 수 있는 툴과 대화할 수 없지만 더 나은 라이브러리를 사용할 수 있어야 한다는 데 동의합니다.XmlPullParser를 사용하면 SAX를 사용하지 않아도 될 수도 있습니다만, 저는 잘 모릅니다.

org.apache.http.impl.client.DefaultHttpClientAndroid SDK 는는에 。WSDL에 됩니다.

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://www.example.com/" + URL);
HttpResponse response = httpClient.execute(httpGet, localContext);

SOAP의 오버헤드 때문에 모바일 기기와의 데이터 교환에는 SOAP가 적합하지 않은 것은 사실입니다.다만, 서버 출력의 형식을 제어할 수 없는 상황에 처할 수 있습니다.

따라서 SOAP을 사용해야 하는 경우 Android용 패치가 적용된 kSOAP2 라이브러리가 여기에 있습니다.
http://code.google.com/p/ksoap2-android/httpcode.google.com/p//

모바일 기기(특히 Android 폰)에서 웹 서비스를 호출하려면 매우 간단한 방법을 사용했습니다.웹 서비스를 호출하기 위해 웹 서비스 클라이언트 API를 사용한 적이 없습니다.전화를 거는 방법은 다음과 같습니다.

  1. API Java API를 을 .HttpURLConnection.
  2. SOAP 요청을 형성합니다(SOAPUI를 사용하여 SOAP 요청을 작성할 수 있습니다).
  3. doOutPut 플래그를 true로 설정합니다.
  4. content-length, Content type, User-agent 등의 HTTP 헤더 값을 설정합니다.Content-length 값은 필수이므로 반드시 설정해 주십시오.
  5. SOAP 요청 전체를 출력 스트림에 씁니다.
  6. 를 호출하여 , 저는 이 메서드를 했습니다).getResonseCode를 참조해 주세요.
  7. 음음음음음음음음음음음음음음음
    1. 웹 서비스 호출에 성공했음을 의미합니다.
  8. 이제 동일한 HTTP 연결에서 입력 스트림을 받아 문자열 개체를 수신합니다.이 문자열 객체는 SOAP 응답입니다.
  9. 는, 「200」을 합니다.ErrorInput동일한 HTTP 객체에 스트리밍하고 오류가 있으면 해당 오류를 수신합니다.
  10. SAXParser(이 경우) 또는 DOMParaser 또는 기타 해석 메커니즘을 사용하여 수신한 응답을 해석합니다.

Android 폰에 대해서 이 순서를 실시해, 정상적으로 동작하고 있습니다.700KB가 넘는 응답이라도 해석할 수 있습니다.

SOAP은 처리/파싱 오버헤드가 필요하기 때문에 Android(또는 일반적으로 모바일 장치)에서 사용하기에 적합하지 않은 기술입니다.REST 서비스는 경량 솔루션입니다.그것이 제가 제안하는 것입니다.Android에는 SAX 파서가 포함되어 있어 사용하기가 매우 간단합니다.모바일 디바이스에서 SOAP를 취급/파싱해야 한다면 유감스럽게 생각합니다.제가 드릴 수 있는 최선의 조언은 SOAP를 사용하지 않는 것입니다.

약 1년 전, 저는 이 스레드를 읽고 안드로이드에서 SOAP 콜을 실행하는 방법을 알아내려고 했습니다.HttpClient를 사용하여 자신의 SOAP 라이브러리를 구축하자는 제안으로 Android용 SOAP 라이브러리를 구축하게 되었습니다.

아이스 비누

기본적으로 간단한 Java API를 통해 보낼 엔벨로프를 구축하고 XPath를 통해 정의한 오브젝트로 자동으로 해석할 수 있습니다.예를 들어 다음과 같습니다.

<Dictionary>
    <Id></Id>
    <Name></Name>
</Dictionary>

이하가 됩니다.

@XMLObject("//Dictionary")
public class Dictionary {
    @XMLField("Id")
    private String id;

    @XMLField("Name")
    private String name;
}

제 프로젝트에 사용하고 있었지만, 다른 사람에게 도움이 될 것 같아서, 그것을 분리해 문서화하는 데 시간을 소비했습니다."SOAP Android"를 검색하다가 우연히 이 실마리를 찾은 불쌍한 영혼들이 한번 시도해보고 혜택을 받을 수 있다면 정말 좋을 것 같습니다.

프로젝트에 ksoap2.jar를 추가하고 AndroidManifest 파일에 인터넷 권한을 추가하는 것을 잊지 마십시오.

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class WebserviceActivity extends Activity {

    private static final String NAMESPACE = "https://api.authorize.net/soap/v1/";
    private static final String URL ="https://apitest.authorize.net/soap/v1/Service.asmx?wsdl"; 
    private static final String SOAP_ACTION = "https://api.authorize.net/soap/v1/AuthenticateTest";
    private static final String METHOD_NAME = "AuthenticateTest";
    private TextView lblResult;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        lblResult = (TextView) findViewById(R.id.tv);

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
        request.addProperty("name","44vmMAYrhjfhj66fhJN");
        request.addProperty("transactionKey","9MDQ7fghjghjh53H48k7e7n");
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        try {
            androidHttpTransport.call(SOAP_ACTION, envelope);

            //SoapPrimitive  resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
            // SoapPrimitive  resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
            SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;


            lblResult.setText(resultsRequestSOAP.toString());
            System.out.println("Response::"+resultsRequestSOAP.toString());


        } catch (Exception e) {
            System.out.println("Error"+e);
        }

    }
}

나는 KSOAP와 내 만남을 가졌다; 나는 다소 단순한 접근법을 선택했다.

WSDL 파일을 지정하면 각 요청(SOAP UI 사용 등)에 대해 SOAP 요청 템플릿을 작성한 후 코드로 전달되는 값을 대체합니다.DefaultHttpClient 인스턴스를 사용하여 이 데이터를 서비스 엔드 포인트에 게시하고 응답 스트림을 가져옵니다.XML 풀 파서를 사용하여 응답 스트림을 해석합니다.

WSclient++를 보실 수 있습니다.

안드로이드 플랫폼용 새로운 SOAP 클라이언트를 만들었습니다.JAX-WS에서 생성된 인터페이스를 사용하고 있지만, 아직까지는 개념 증명에 불과합니다.

관심 있는 경우 Android SOAP에서 이 예를 사용하거나 소스를 확인하십시오.

할 수 있으면 JSON으로 해주세요.Android에는 완전한 org.json 패키지가 포함되어 있습니다.

ksoap2 메서드를 호출합니다.그것은 아주 잘 작동한다.

다음과 같이 세부 정보를 설정합니다.

private static String mNAMESPACE=null;
private static String mURL=null;
public static Context context=null;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(Request);

envelope.addMapping(mNAMESPACE, "UserCredentials",new UserCredendtials().getClass());
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(mURL);

그리고 결과를 얻기 위해서

androidHttpTransport.call(SOAP_ACTION, envelope);
result = (SoapPrimitive)envelope.getResponse();

Android에서 웹 서비스를 호출하는 이 도움이 되었으면 합니다.

몇 달 전 j2ee 어플리케이션에서 jax-ws 웹 서비스를 사용하고 있었습니다.여기서 CXF wsdl2java를 사용하여 WSDL 파일에서 WS 클라이언트 stub을 생성하고 그 클라이언트 stub을 사용하여 웹 서비스를 소비했습니다.몇 주 전 안드로이드 플랫폼에서도 같은 방법으로 웹 서비스를 사용하려고 했을 때 할 수 없었습니다.안드로이드 jar에는 모든 "jax-ws" 지원 클래스가 포함되어 있지 않았기 때문입니다.그때 저는 제 요건을 충족시킬 만한 툴을 찾지 못했습니다(만약 구글을 효율적으로 검색하지 못했다면).

  • WSDL에서 클라이언트스탭을 가져옵니다.
  • 인수(java business request object)를 붙여 서비스를 호출합니다.
  • Response Business Object를 가져옵니다.

그래서 저는 Android SOAP Client Generation Tool을 개발했습니다.다음 절차를 따라야 하는 경우:

  • WSDL Get WS Client Stub에서 프로젝트에 넣습니다.
  • 일부 서비스의 경우 "ComplexOperationService", 서비스 인스턴스화, 엔드포인트 포트 가져오기 및 서비스 메서드 호출 및 웹 서비스 응답:

예:

ComplexOperationService service = new ComplexOperationService( );
ComplexOperation port= service.getComplexOperationPort();    
SomeComplexRequest request = --Get some complex request----;    
SomeComplexResp resp = port.operate( request  );
  • 서비스 클래스/req/response 클래스 또는 기타 클래스 및 메서드는 모두 WSDL에서 생성되므로 신경 쓸 필요가 없습니다.
  • 물론 비누 액션/봉투/네임스페이스 등에 대해서는 알 필요가 없습니다.개발자는 항상 그렇듯이 메서드라고 부르세요.

Axis로 작은 SOAP 클라이언트를 만들 수 있을 거라고 확신해요. 설치 지침.

Android 어플리케이션에서 SOAP Web Service를 호출하면 많은 도움이 될 것 같습니다.

SOAP 방식으로 다음 단계를 수행합니다.

WSDL 파일에서

  • SOAP 요청 템플릿을 만듭니다.

  • 그런 다음 코드로 전달되는 값을 대체합니다.

  • DefaultHttpClient 인스턴스를 사용하여 이 데이터를 서비스 엔드 포인트에 게시합니다.

  • 응답 스트림을 취득하고 마지막으로

  • XML 풀 파서를 사용하여 응답 스트림을 해석합니다.

JSON을 사용할 수 있는 경우 PHP 서버 Android Phone Client를 사용한 애플리케이션 서비스 개발에는 백서, 비디오 및 sample.code가 있습니다.

저에게 가장 쉬운 방법은 모든 필수 클래스를 생성하기 위해 좋은 도구를 사용하는 것입니다.개인적으로 사용하는 사이트는 다음과 같습니다.

http://easywsdl.com/

매우 복잡한 웹 서비스를 지원하며 ksoap2를 사용합니다.

많은 도움이 된 매우 유용한 도구를 확인해 볼 것을 제안합니다.그 프로젝트를 담당해 주신 분들도 많은 도움이 되었습니다.www.wsdl2code.com/

Android에서 Web Service를 호출하는 데 문제가 있는 경우 아래 코드를 사용하여 웹 서비스를 호출하고 응답을 받을 수 있습니다.웹 서비스가 데이터 테이블 형식으로 응답을 반환하는지 확인하십시오. 코드는 SQL Server 데이터베이스의 데이터를 사용하는 경우에 도움이 됩니다.MYSQL을 사용하는 경우 한 가지를 변경해야 합니다.문장에서 NewDataSet이라는 단어를 바꾸면 됩니다.obj2=(SoapObject) obj1.getProperty("NewDataSet");DocumentElement별

void callWebService(){ 

private static final String NAMESPACE = "http://tempuri.org/"; // for wsdl it may be package name i.e http://package_name
private static final String URL = "http://localhost/sample/services/MyService?wsdl";
// you can use IP address instead of localhost
private static final String METHOD_NAME = "Function_Name";
private static final String SOAP_ACTION = "urn:" + METHOD_NAME;

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty("parm_name", prm_value);// Parameter for Method
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;// **If your Webservice in .net otherwise remove it**
    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);// call the eb service
                                                                                                         // Method
    } catch (Exception e) {
        e.printStackTrace();
    }

    // Next task is to get Response and format that response
    SoapObject obj, obj1, obj2, obj3;
    obj = (SoapObject) envelope.getResponse();
    obj1 = (SoapObject) obj.getProperty("diffgram");
    obj2 = (SoapObject) obj1.getProperty("NewDataSet");

    for (int i = 0; i < obj2.getPropertyCount(); i++) { 
// the method getPropertyCount() and  return the number of rows
            obj3 = (SoapObject) obj2.getProperty(i);
            obj3.getProperty(0).toString();// value of column 1
            obj3.getProperty(1).toString();// value of column 2
            // like that you will get value from each column
        }
    }

만약 이것에 대해 문제가 있다면, 나에게 편지를 쓸 수 있습니다.

이것은 Android에서 SOAP 웹 서비스를 소비하는 실제 예입니다.

**주의:** 프로젝트에 ksoap2.jar를 추가하고 Android Manifest 파일에 인터넷 권한을 추가하는 것을 잊지 마십시오*

public final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";
public final String METHOD_NAME = "FahrenheitToCelsius";
public final String PROPERTY_NAME = "Fahrenheit";
public final String SOAP_ACTION = "http://tempuri.org/FahrenheitToCelsius";
public final String SOAP_ADDRESS = "http://www.w3schools.com/webservices/tempconvert.asmx";


private class TestAsynk extends AsyncTask<String, Void, String> {

    @Override
    protected void onPostExecute(String result) {

        super.onPostExecute(result);
        Toast.makeText(getApplicationContext(),
                String.format("%.2f", Float.parseFloat(result)),
                Toast.LENGTH_SHORT).show();
    }

    @Override
    protected String doInBackground(String... params) {
        SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
                METHOD_NAME);
        request.addProperty(PROPERTY_NAME, params[0]);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        envelope.dotNet = true;

        envelope.setOutputSoapObject(request);

        HttpTransportSE androidHttpTransport = new HttpTransportSE(
                SOAP_ADDRESS);
        Object response = null;
        try {

            androidHttpTransport.call(SOAP_ACTION, envelope);
            response = envelope.getResponse();
            Log.e("Object response", response.toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
        return response.toString();
    }
}

프로젝트 파일명: ksoap2-android-assembly-3.4.0-jar-with-dependencies와 함께 SOAP 라이브러리 파일을 다운로드하여 추가하십시오.

응용 프로그램을 지운 다음 프로그램을 시작하십시오.

SOAP 서비스 호출용 코드입니다.

    String SOAP_ACTION = "YOUR_ACTION_NAME";
    String METHOD_NAME = "YOUR_METHOD_NAME";
    String NAMESPACE = "YOUR_NAME_SPACE";
    String URL = "YOUR_URL";
    SoapPrimitive resultString = null;

    try {
        SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
        addPropertyForSOAP(Request);

        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        soapEnvelope.dotNet = true;
        soapEnvelope.setOutputSoapObject(Request);

        HttpTransportSE transport = new HttpTransportSE(URL);

        transport.call(SOAP_ACTION, soapEnvelope);
        resultString = (SoapPrimitive) soapEnvelope.getResponse();

        Log.i("SOAP Result", "Result Celsius: " + resultString);
    } catch (Exception ex) {
        Log.e("SOAP Result", "Error: " + ex.getMessage());
    }
    if(resultString != null) {
        return resultString.toString();
    }
    else{
        return "error";
    }

결과는 JSONObject 또는 JSONArray 또는 String일 수 있습니다.

자세한 것은, https://trinitytuts.com/load-data-from-soap-web-service-in-android-application/ 를 참조해 주세요.

고마워요.

특정 헤더를 사용하여 soap 콜을 post over http로 실행할 수 있습니다.ksoap2와 같은 추가 라이브러리 없이 이 문제를 해결했습니다. 여기 비누 서비스에서 주문을 받는 라이브 코드가 있습니다.

private static HashMap<String,String> mHeaders = new HashMap<>();

static {
    mHeaders.put("Accept-Encoding","gzip,deflate");
    mHeaders.put("Content-Type", "application/soap+xml");
    mHeaders.put("Host", "35.15.85.55:8080");
    mHeaders.put("Connection", "Keep-Alive");
    mHeaders.put("User-Agent","AndroidApp");
    mHeaders.put("Authorization","Basic Q2xpZW50NTkzMzppMjR3s2U="); // optional
}public final static InputStream receiveCurrentShipments(String stringUrlShipments)
{
    int status=0;
    String xmlstring= "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:ser=\"http://35.15.85.55:8080/ServiceTransfer\">\n" +
            "   <soap:Header/>\n" +
            "   <soap:Body>\n" +
            "      <ser:GetAllOrdersOfShipment>\n" +
            "         <ser:CodeOfBranch></ser:CodeOfBranch>\n" +
            "      </ser:GetAllOrdersOfShipment>\n" +
            "   </soap:Body>\n" +
            "</soap:Envelope>";
    StringBuffer chaine = new StringBuffer("");

    HttpURLConnection connection = null;
    try {
        URL url = new URL(stringUrlShipments);
        connection = (HttpURLConnection) url.openConnection();
        connection.setRequestProperty("Content-Length", xmlstring.getBytes().length + "");
        connection.setRequestProperty("SOAPAction", "http://35.15.85.55:8080/ServiceTransfer/GetAllOrdersOfShipment");

        for(Map.Entry<String, String> entry : mHeaders.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            connection.setRequestProperty(key,value);

        }

        connection.setRequestMethod("POST");
        connection.setDoInput(true);

        OutputStream outputStream = connection.getOutputStream();
        outputStream.write(xmlstring.getBytes("UTF-8"));
        outputStream.close();

        connection.connect();
        status = connection.getResponseCode();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {

        Log.i("HTTP Client", "HTTP status code : " + status);
    }

    InputStream inputStream = null;
    try {
        inputStream = connection.getInputStream();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return inputStream;
}

안드로이드에서 SOAP 웹 서비스를 호출하려면 이 클라이언트를 사용해 보십시오.

Java 빌드 경로에 ksoap2-android.jar를 추가하는 것을 잊지 마십시오.

public class WsClient {
    private static final String SOAP_ACTION = "somme";
    private static final String OPERATION_NAME = "somme";
    private static final String WSDL_TARGET_NAMESPACE = "http://example.ws";
    private static final String SOAP_ADDRESS = "http://192.168.1.2:8080/axis2/services/Calculatrice?wsdl";

    public String caclculerSomme() {

        String res = null;
        SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
                OPERATION_NAME);
        request.addProperty("a", "5");
        request.addProperty("b", "2");

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);

        try {
            httpTransport.call(SOAP_ACTION, envelope);
            String result = envelope.getResponse().toString();
            res = result;
            System.out.println("############# resull is :" + result);
        } catch (Exception exception) {
            System.out.println("########### ERRER" + exception.getMessage());
        }

        return res;
    }
}

비누 Libaray 추가()ksoap2-android-assembly-3.2.0-jar-with-dependencies.jar):

퍼블릭 스태틱 문자열 Fn_Confirm_CollectMoney_Approval()

        HashMap < String, String > str1,
        HashMap < String, String > str2,
        HashMap < String, String > str3) {

    Object response = null;
    String METHOD_NAME = "CollectMoney";
    String NAMESPACE = "http://xxx/yyy/xxx";
    String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";
    String SOAP_ACTION = "";

    try {

        SoapObject RequestParent = new SoapObject(NAMESPACE, METHOD_NAME);

        SoapObject Request1 = new SoapObject(NAMESPACE, "req");

        PropertyInfo pi = new PropertyInfo();

        Set mapSet1 = (Set) str1.entrySet();

        Iterator mapIterator1 = mapSet1.iterator();

        while (mapIterator1.hasNext()) {

            Map.Entry mapEntry = (Map.Entry) mapIterator1.next();

            String keyValue = (String) mapEntry.getKey();

            String value = (String) mapEntry.getValue();

            pi = new PropertyInfo();

            pi.setNamespace("java:com.xxx");

            pi.setName(keyValue);

            pi.setValue(value);

            Request1.addProperty(pi);
        }

        mapSet1 = (Set) str3.entrySet();

        mapIterator1 = mapSet1.iterator();

        while (mapIterator1.hasNext()) {

            Map.Entry mapEntry = (Map.Entry) mapIterator1.next();

            // getKey Method of HashMap access a key of map
            String keyValue = (String) mapEntry.getKey();

            // getValue method returns corresponding key's value
            String value = (String) mapEntry.getValue();

            pi = new PropertyInfo();

            pi.setNamespace("java:com.xxx");

            pi.setName(keyValue);

            pi.setValue(value);

            Request1.addProperty(pi);
        }

        SoapObject HeaderRequest = new SoapObject(NAMESPACE, "XXX");

        Set mapSet = (Set) str2.entrySet();

        Iterator mapIterator = mapSet.iterator();

        while (mapIterator.hasNext()) {

            Map.Entry mapEntry = (Map.Entry) mapIterator.next();

            // getKey Method of HashMap access a key of map
            String keyValue = (String) mapEntry.getKey();

            // getValue method returns corresponding key's value
            String value = (String) mapEntry.getValue();

            pi = new PropertyInfo();

            pi.setNamespace("java:com.xxx");

            pi.setName(keyValue);

            pi.setValue(value);

            HeaderRequest.addProperty(pi);
        }

        Request1.addSoapObject(HeaderRequest);

        RequestParent.addSoapObject(Request1);

        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER10);

        soapEnvelope.dotNet = false;

        soapEnvelope.setOutputSoapObject(RequestParent);

        HttpTransportSE transport = new HttpTransportSE(URL, 120000);

        transport.debug = true;

        transport.call(SOAP_ACTION, soapEnvelope);

        response = (Object) soapEnvelope.getResponse();

        int cols = ((SoapObject) response).getPropertyCount();

        Object objectResponse = (Object) ((SoapObject) response)
                .getProperty("Resp");

        SoapObject subObject_Resp = (SoapObject) objectResponse;


        modelObject = new ResposeXmlModel();

        String MsgId = subObject_Resp.getProperty("MsgId").toString();


        modelObject.setMsgId(MsgId);

        String OrgId = subObject_Resp.getProperty("OrgId").toString();


        modelObject.setOrgId(OrgId);

        String ResCode = subObject_Resp.getProperty("ResCode").toString();


        modelObject.setResCode(ResCode);

        String ResDesc = subObject_Resp.getProperty("ResDesc").toString();


        modelObject.setResDesc(ResDesc);

        String TimeStamp = subObject_Resp.getProperty("TimeStamp")
                .toString();


        modelObject.setTimestamp(ResDesc);

        return response.toString();

    } catch (Exception ex) {

        ex.printStackTrace();

        return null;
    }

}

언급URL : https://stackoverflow.com/questions/297586/how-to-call-a-soap-web-service-on-android

반응형