অ্যান্ড্রয়েডে কীভাবে একটি এসওএপি ওয়েব পরিষেবা কল করা [বন্ধ]


553

অ্যান্ড্রয়েডের সাথে একটি স্ট্যান্ডার্ড এসওএপি / ডাব্লুএসডিএল ওয়েব পরিষেবা কীভাবে কল করা যায় সে সম্পর্কে ভাল তথ্য খুঁজে পেতে আমার অনেক সমস্যা হচ্ছে। সকল আমি খুঁজে পেতে সক্ষম চলেছি পারেন খুব সংবর্ত নথি এবং "kSoap2" থেকে রেফারেন্স এবং তারপর এটি সব নিজে পার্স সঙ্গে সম্পর্কে কিছু বিট SAX । ঠিক আছে, এটি ঠিক আছে তবে এটি ২০০৮, সুতরাং আমি বুঝতে পেরেছিলাম স্ট্যান্ডার্ড ওয়েব পরিষেবাদিগুলির কল করার জন্য কিছু ভাল গ্রন্থাগার থাকা উচিত।

ওয়েব সার্ভিসটি মূলত নেটবিনে তৈরি একটি । নদীর গভীরতানির্ণয় ক্লাস তৈরির জন্য আমি আইডিই সমর্থন পেতে চাই। অ্যান্ড্রয়েড-ভিত্তিক ফোন থেকে ডাব্লুএসডিএল ভিত্তিক ওয়েব পরিষেবাদির সাথে যোগাযোগ করার জন্য আমার কেবল সবচেয়ে সহজ / সর্বাধিক মার্জিত উপায় দরকার ।


এখানে অ্যান্ড্রয়েডে এসওএপি ব্যবহার করার জন্য খুব ভাল লিঙ্কটি রয়েছে: এসওএপি ব্যবহার করে অ্যান্ড্রয়েডে ওয়েব পরিষেবা কল করতে কীভাবে
জেনেন্দ্র

এমএস ভিএস-এর সাথে আগে পরিচিত কেউ যদি অ্যান্ড্রয়েডের জন্য মনো ব্যবহার করে ডেটা পরিষেবা এবং ওয়েব পরিষেবাদি দিয়ে অনেক সমস্যার সমাধান করে তবে সবকিছু সহজ এবং দ্রুত বিকাশ। এছাড়াও কে সি এর সাথে পরিচিত নন (জাভা এর সাথে কোডের খুব কম কোড), সমস্ত লাইব্রেরিতে একই পদ্ধতি রয়েছে, কিছু বৈশিষ্ট্য বৈশিষ্ট্যগুলিতে প্রতিস্থাপন করা হয়, সুতরাং প্রায় একই রকমের নাম এবং অ্যান্ড্রয়েডের জন্য জাভাতে আগে যারা লিখেছিলেন তারা সি সহজেই লেখার অভিজ্ঞতা ব্যবহার করে খুব সহজ করতে পারেন কোড।
ইউজিন বসিকভ

নীচের লিঙ্কটিতে একবার নজর দিন এটিতে Ksoap2 ব্যবহার করে অ্যান্ড্রয়েডে কোনও ওয়েবসার্ভিস অ্যাক্সেস
ফ্রেড ওন্ডিয়েকি

আমি বিশ্বাস করি জ্যামারিন / সি # দিয়ে। নেট কোর ব্যবহার করে এটি সম্ভব। দেখুন ব্লগস.এমএসডন.মাইক্রোসফট.ওয়েবদেব
ওয়াহিদ আমিরি

বসন্তের এই সরঞ্জামটি আশাব্যঞ্জক দেখাচ্ছে।
লুই

উত্তর:


245

অ্যান্ড্রয়েড কোনও ধরণের এসওএপি লাইব্রেরি সরবরাহ করে না। আপনি হয় নিজের লেখা লিখতে পারেন, বা kSOAP 2 এর মতো কিছু ব্যবহার করতে পারেন । আপনারা যেমন লক্ষ্য করেছেন, অন্যরা তাদের নিজস্ব প্রকল্পগুলিতে কেএসওএপি 2 সংকলন করতে এবং ব্যবহার করতে সক্ষম হয়েছে, তবে আমার দরকার হয়নি।

গুগল আজ অবধি, অ্যান্ড্রয়েডে একটি এসওএপি লাইব্রেরি যুক্ত করতে খুব আগ্রহ দেখিয়েছে। এর জন্য আমার সন্দেহ হ'ল তারা বরং ওয়েব-র পরিষেবাগুলিতে আরএসটি-ভিত্তিক পরিষেবাদিগুলির প্রতি সমর্থন করবে এবং জেএসএনকে ডেটা এনক্যাপসুলেশন ফর্ম্যাট হিসাবে ব্যবহার করবে। অথবা, বার্তাপ্রেরণের জন্য এক্সএমপিপি ব্যবহার করে। তবে তা কেবল অনুমান করা যায়।

এক্সএমএল-ভিত্তিক ওয়েব পরিষেবাদি এই মুহুর্তে অ্যান্ড্রয়েডে কিছুটা তুচ্ছ কাজ। নেটবিয়ানদের জানা নেই, আমি সেখানে উপলব্ধ সরঞ্জামগুলির সাথে কথা বলতে পারি না, তবে আমি একমত যে আরও একটি ভাল গ্রন্থাগার পাওয়া উচিত। এটি সম্ভব যে এক্সএমএলপুলপারসার আপনাকে স্যাক্স ব্যবহার থেকে বাঁচাবে, তবে আমি সে সম্পর্কে খুব বেশি জানি না।


7
হ্যাঁ, আমি মনে করি আমাকে একটি REST প্রক্সি তৈরি করতে হবে। এটি বেশ আশ্চর্যজনক বলে মনে হয় যে এসওএপি সমর্থন সরবরাহ করার ক্ষেত্রে গুগলের কোনও আগ্রহ নেই। আমি কেসোপ পদ্ধতিটি চেষ্টা করেছি, এটি সত্যিই গুরুতর বিকল্পও নয়। এটি সর্বোত্তমরূপে, একটি কুৎসিতের জন্য নিউজগ্রুপগুলির প্রচুর পরিমাণে ঝাঁকুনির প্রয়োজন হয়।
ববিশ্যাফটো

19
সম্ভবত কারণটি হ'ল এসওএপি খুব ভার্জোজ এবং মোবাইল কম্পিউটিংয়ের সীমাবদ্ধতাগুলিকে ভালভাবে সরবরাহ করে না।
নীল

92
এই উত্তরটির উন্নতি হবে যদি কেউ অ্যান্ড্রয়েড অ্যাপের মাধ্যমে ওয়েব পরিষেবাদি কল করার সর্বোত্তম বিকল্পের পরামর্শ দিতে পারে । লোকেরা একবার এই প্রশ্নটি আবিষ্কার করে এবং এটি পড়লে, তাদের মধ্যে বেশিরভাগই সন্ধান করবে।
MGOwen

4
জেএসএনের মতো আরও সংক্ষিপ্ত বিন্যাসের তুলনায় এসওএপি প্রসেসিংটি মেমরি এবং প্রসেসরের নিবিড়ও।
জেরেমি এডওয়ার্ডস

3
@ এমজিওউউইন আমি দেখতে পাই সেরা বিকল্পটি একটি প্রক্সি। একটি REST- ফুল ইন্টারফেস প্রয়োগ করুন যা ডাব্লুএসডিএল 2 জাভা এর মাধ্যমে এসওএপি খামগুলির প্রক্সি করে।

99

org.apache.http.impl.client.DefaultHttpClientঅ্যান্ড্রয়েড এসডিকে ডিফল্টরূপে আসে। এটি আপনাকে ডাব্লুএসডিএলে সংযুক্ত করবে।

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

5
হ্যাঁ, এটি সেই রুট হবে যেখানে আমাকে ম্যানুয়ালি সবকিছু বিশ্লেষণ করতে হবে, আমি কোনও অবজেক্ট অরিয়েন্টেড অ্যাপ্রোচ পাব না।
ববিশ্যাফটো

93
আপনার মানে আপনি নিখরচায় দুপুরের খাবার পাবেন না। ম্যানুয়াল পার্সিংয়ের ওওর সাথে কোনও সম্পর্ক নেই। আমি আমার সর্বাধিক উন্নত সরঞ্জামটি এইচবি 1 পেন্সিল হিসাবে কাগজে সমস্ত কিছু পার্স করতে পারি এবং এটি এখনও ওও হতে পারে।
নীল

8
আমি ওও দ্বারা বিশ্বাস করি লেখক জাভা-এক্সএমএল বাঁধাইয়ের অর্থ। প্রতিক্রিয়া পার্স করার জন্য এই পদ্ধতির আপনার পরবর্তী পদক্ষেপটি কী হবে? এবং এটি যদি গাছের কাঠামোয় সংগঠিত শত শত উপাদান থাকে?
rustyx

12
বিটিডাব্লু, আমি কমপক্ষে একটি এইচটিটিপি পোস্ট আশা করি যদি আপনি এসওএপি দিয়ে ভাগ্য পেতে চান তবে জিইটি নয় not এছাড়াও, গ্রহণ এবং SOAPAction শিরোনাম কোথায়? আপনি যদি সত্যই কমান্ডো যেতে চান এটি একটি SOAP পরিষেবা গ্রহণ করতে এই 4 টি লাইনের চেয়ে অনেক বেশি সময় নেবে।
rustyx

6
@ নীলড: আপনি যদি পরিস্থিতি দ্বারা এসওএপি ব্যবহার করতে বাধ্য হন, যেমন ওয়েবসারভার এসওএপি ব্যবহার করে এবং আপনার এটির নিয়ন্ত্রণ নেই?
বার্জার ফ্রেইন্ড-হানসেন

59

এটি সত্য যে ওভারহেডের কারণে এসওএপি মোবাইল ডিভাইসগুলির সাথে ডেটা এক্সচেঞ্জের জন্য সেরা পছন্দ নয়। তবে, আপনি নিজেকে এমন পরিস্থিতিতে খুঁজে পেতে পারেন যেখানে আপনি সার্ভার আউটপুটের ফর্ম্যাটটি নিয়ন্ত্রণ করেন না।

সুতরাং, যদি আপনাকে এসওএপি দিয়ে থাকতে হয় তবে অ্যান্ড্রয়েডের জন্য এখানে একটি কেএসওএপি 2 লাইব্রেরি রয়েছে:
http://code.google.com/p/ksoap2-android/


31

একটি মোবাইল ডিভাইস (বিশেষত একটি অ্যান্ড্রয়েড ফোনে) থেকে একটি ওয়েব পরিষেবা কল করতে আমি এটি করার জন্য খুব সহজ উপায় ব্যবহার করেছি। ওয়েব পরিষেবাটিতে কল করার প্রয়াসে আমি কোনও ওয়েব পরিষেবা ক্লায়েন্ট এপিআই ব্যবহার করি নি। কল করার জন্য আমার পন্থাটি নিম্নরূপ।

  1. জাভা স্ট্যান্ডার্ড এপিআই ব্যবহার করে একটি সাধারণ HTTP সংযোগ তৈরি করুন HttpURLConnection
  2. একটি SOAP অনুরোধ গঠন করুন। (আপনি এসওএপি অনুরোধ করতে SOAPUI- কে সহায়তা করতে পারেন))
  3. সত্য হিসাবে doOutPut পতাকা সেট করুন।
  4. সামগ্রীর দৈর্ঘ্য, সামগ্রীর ধরণ এবং ব্যবহারকারী-এজেন্টের মতো HTTP শিরোনামের মানগুলি সেট করুন। এটি বাধ্যতামূলক হওয়ায় সামগ্রী-দৈর্ঘ্যের মান সেট করতে ভুলবেন না।
  5. আউটপুট প্রবাহে পুরো SOAP অনুরোধটি লিখুন।
  6. সংযোগ করার জন্য পদ্ধতিটি কল করুন এবং প্রতিক্রিয়াটি গ্রহণ করুন (আমার ক্ষেত্রে আমি ব্যবহার করেছি getResonseCode)।
  7. আপনার প্রাপ্ত প্রতিক্রিয়া কোড হিসাবে
    1. এর অর্থ আপনি ওয়েব পরিষেবা কল করতে সফল হয়েছেন।
  8. এখন একই HTTP সংযোগে একটি ইনপুট স্ট্রিম নিন এবং স্ট্রিং অবজেক্টটি পান। এই স্ট্রিং অবজেক্টটি একটি SOAP প্রতিক্রিয়া।
  9. প্রতিক্রিয়া কোড যদি 200 এর বাইরে হয় তবে ErrorInputএকই HTTPobject এ একটি স্ট্রিম নিন এবং যদি ত্রুটি থাকে তবে তা পান।
  10. SAXParser (আমার ক্ষেত্রে) বা DOMParaser বা অন্য কোনও পার্সিং প্রক্রিয়া ব্যবহার করে প্রাপ্ত প্রতিক্রিয়াটিকে পার্স করুন।

আমি অ্যান্ড্রয়েড ফোনের জন্য এই পদ্ধতিটি প্রয়োগ করেছি এবং এটি সফলভাবে চলছে। 700 কেবি এর বেশি হলেও আমি প্রতিক্রিয়াটি পার্স করতে সক্ষম।


30

প্রসেসিং / প্রয়োজনীয় ওভারহেড পার্সিংয়ের কারণে অ্যান্ড্রয়েডে (বা সাধারণভাবে মোবাইল ডিভাইসগুলি) ব্যবহারের জন্য এসওএপি একটি অসুবিধার উপযুক্ত প্রযুক্তি। একটি রেস্ট সার্ভিস হ'ল একটি হালকা ওজন সমাধান এবং এটিই আমি পরামর্শ দেব। অ্যান্ড্রয়েড একটি স্যাক্স পার্সার নিয়ে আসে এবং এটি ব্যবহার করা মোটামুটি তুচ্ছ। আপনার যদি কোনও মোবাইল ডিভাইসে এসওএপি হ্যান্ডেল / পার্স করার প্রয়োজন হয় তবে আমি আপনার জন্য দুঃখ বোধ করছি, আমি যে সেরা পরামর্শ দিতে পারি তা হ'ল এসওএপি ব্যবহার না করা।


2
যারা ডেভেলপারদের REST এপিআইয়ের পরিবর্তে এসওএপি পরিষেবাগুলি ব্যবহার করতে বাধ্য করেন তাদের জন্য জাহান্নামের একটি বিশেষ জায়গা রয়েছে।
হিতেশ সাহু

24

প্রায় এক বছর আগে আমি এই থ্রেডটি অ্যান্ড্রয়েডে এসওএপি কলগুলি কীভাবে করব তা বোঝার চেষ্টা করে পড়ছিলাম - এইচটিপিপ্লায়েন্ট ব্যবহার করে আমার নিজের তৈরি করার পরামর্শগুলির ফলে অ্যান্ড্রয়েডের জন্য আমার নিজস্ব এসওএপি লাইব্রেরি তৈরি হয়েছিল:

IceSoap

মূলত এটি আপনাকে সাধারণ জাভা এপিআইয়ের মাধ্যমে প্রেরণের জন্য খামগুলি তৈরি করতে দেয়, তারপরে স্বয়ংক্রিয়ভাবে সেগুলিকে এক্সপ্যাথের মাধ্যমে সংজ্ঞায়িত বস্তুগুলিতে ভাগ করে দেয় ... উদাহরণস্বরূপ:

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

হয়ে:

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

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

আমি এটি আমার নিজের প্রকল্পের জন্য ব্যবহার করছিলাম তবে আমি বুঝতে পেরেছিলাম এটি সম্ভবত কিছু অন্যান্য লোককে সহায়তা করতে পারে তাই আমি এটিকে আলাদা করতে এবং ডকুমেন্ট করার জন্য কিছুটা সময় ব্যয় করেছি। "এসওএপি অ্যান্ড্রয়েড" গুগল করার সময় আপনার দরিদ্র আত্মারা যারা এই থ্রেডে হোঁচট খেয়েছে তারা যদি সত্যিই এটি পছন্দ করে তবে কিছুটা সুবিধা পেতে পারত I'd


আপনি আইসসোপে সেশন প্রমাণীকরণের সাথে কাজ করেছেন?
আদনেন চৌবিবি

24

আপনার প্রকল্পে ksoap2.jar যোগ করতে ভুলবেন না এবং অ্যান্ড্রয়েডমেনিস্ট ফাইলটিতে ইন্টারনেটের অনুমতিও যুক্ত করবেন না

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);
        }

    }
}

এই ক্লাসটি আমি কোথায় পাব?
নোমান

হ্যালো, আমি আপনার কোডটি ব্যবহার করছি তবে আমি নিম্নলিখিত ত্রুটি পেয়েছি, প্রতিক্রিয়া :: প্রমাণীকরণের টেস্টারেস্পোনস {প্রমাণীকরণ টেস্টের ফলাফল = যে কোনও টাইপ {ফলাফলকোড = ত্রুটি; বার্তা = anyType {MessagesTypeMessage = anyType {কোড = E00014; পাঠ্য = মার্চেন্ট প্রমাণীকরণ প্রয়োজন; }; }; }; } অনুগ্রহ করে আপনি কি আমাকে সাহায্য করতে পারেন?
হাসমুখ

হাই অমিত আমিও amit ..... আপনি কি আমাকে বলতে পারবেন যে প্রতিক্রিয়াটি যখন আমরা পেয়েছিলাম তখন আমরা কীভাবে প্রতিক্রিয়া তুলনা করি সফল হয় বা না হয় তবে কীভাবে এবং কী পরিস্থিতিতে প্রতিক্রিয়া যাচাই করা উচিত ......
অমিতসর্মা

কিভাবে অনুরোধ সম্পত্তি XML এ অ্যারে যুক্ত করবেন?
droidster.me

21

আমি কেএসওএপি দিয়ে আমার প্রথম চেষ্টা করেছি; আমি বরং একটি সহজ পদ্ধতির বেছে নিয়েছি।

একটি ডাব্লুএসডিএল ফাইল দেওয়া হয়েছে, প্রতিটি অনুরোধের জন্য এসওএপি অনুরোধ টেম্পলেট তৈরি করুন (উদাহরণস্বরূপ: এসওএপি ইউআই ব্যবহার করে) এবং তারপরে মানগুলিকে কোডে পাস করার পরিবর্তে। DefaultHttpClient উদাহরণ ব্যবহার করে পরিষেবাটি শেষ পয়েন্টে এই ডেটা পোস্ট করুন এবং প্রতিক্রিয়া স্ট্রিম পান। এক্সএমএল পুল পার্সার ব্যবহার করে প্রতিক্রিয়া স্ট্রিমটি পার্স করুন।


18

আপনি ডাব্লুএসক্লিয়েন্ট ++একবার দেখতে পারেন


4
কেসোপ বা স্যাক্স পুনরাবৃত্তি করার পরে অবশেষে প্রথম দরকারী উত্তর
রাস্টিক্স

আমি ডেমো সংস্করণ চেষ্টা করেছিলাম। একটি সাধারণ পরিষেবার জন্য আমার পক্ষে কাজ করেন নি। এত বেশি খরচ করার মতো নয় $$$$$
তুষার

16

আমি অ্যান্ড্রয়েড প্ল্যাটফর্মের জন্য একটি নতুন এসওএপি ক্লায়েন্ট তৈরি করেছি। এটি একটি জ্যাকস-ডাব্লুএস উত্পাদিত ইন্টারফেস ব্যবহার করছে, তবে এটি এখন পর্যন্ত কেবলমাত্র একটি প্রমাণ-ধারণা is

আপনি যদি আগ্রহী হন তবে দয়া করে উদাহরণটি ব্যবহার করে দেখুন এবং / অথবা অ্যান্ড্রয়েডএসওএপিতে উত্সটি দেখুন


1
আমি জুম XVII এ আপনার উপস্থাপনায় অংশ নিতে পেরে আনন্দিত হয়েছি। এই অ্যান্ড্রয়েড স্টাফ সম্পর্কে বুদাপেস্ট। ভাল কাজগুলো করতে থাকো!
pcjuzer

15

আপনি যদি পারেন তবে JSON এ যান। অ্যান্ড্রয়েড সম্পূর্ণ org.json প্যাকেজ সহ আসে


14

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();


11

কয়েক মাস আগে আমি j2ee অ্যাপ্লিকেশনটিতে জ্যাক্স-ডাব্লুএস ওয়েব পরিষেবা নিয়ে কাজ করছিলাম, সেখানে আমরা ডাব্লুএসডিএল ফাইল থেকে ডাব্লুএস ক্লায়েন্ট স্টাব তৈরি করতে সিএক্সএফ ডাব্লুএসডিএল 2 জাভা ব্যবহার করছিলাম এবং সেই ক্লায়েন্ট স্টাবের সাহায্যে আমরা ওয়েব পরিষেবাদি গ্রাস করলাম। কয়েক সপ্তাহ আগে, যখন আমি অ্যান্ড্রয়েড প্ল্যাটফর্মে একইভাবে ওয়েব পরিষেবাটি গ্রাস করার চেষ্টা করছিলাম তখন আমি পারিনি, কারণ অ্যান্ড্রয়েড জারে এতে সমস্ত "জ্যাক্স-ডাব্লু" সমর্থনকারী শ্রেণি নেই। আমার প্রয়োজনীয়তা মেটাতে সেই সময় আমি এই জাতীয় কোনও সরঞ্জাম (যদি আমি দক্ষতার সাথে গুগল ব্যর্থ না হত) খুঁজে পাই না -

  • ডাব্লুএসডিএল থেকে ক্লায়েন্ট স্টাব পান।
  • এবং পরিষেবাটিকে কিছু যুক্তি (জাভা ব্যবসায়িক অনুরোধের বস্তু) সহ কল ​​করুন।
  • প্রতিক্রিয়া বিজনেস অবজেক্ট পান।

সুতরাং, আমি আমার নিজস্ব অ্যান্ড্রয়েড এসওএপি ক্লায়েন্ট জেনারেশন সরঞ্জাম তৈরি করেছি । যেখানে আপনাকে এই পদক্ষেপগুলি অনুসরণ করতে হবে:

  • ডাব্লুএসডিএল থেকে ডাব্লুএস ক্লায়েন্ট স্টাব পান, এটি আপনার প্রকল্পে রাখুন।
  • কিছু পরিষেবা "কমপ্লেক্সঅ্যাপারেশন সার্ভিসেস" বলুন, পরিষেবাটি ইনস্ট্যান্ট করুন, এন্ডপয়েন্ট পোর্টটি পান এবং পরিষেবা পদ্ধতির কল করুন এবং ওয়েব পরিষেবা থেকে প্রতিক্রিয়া পান:

উদাহরণ:

ComplexOperationService service = new ComplexOperationService( );
ComplexOperation port= service.getComplexOperationPort();    
SomeComplexRequest request = --Get some complex request----;    
SomeComplexResp resp = port.operate( request  );
  • সার্ভিস ক্লাস / রেকউ / রেসপন্স ক্লাস বা অন্য কোনও ক্লাস এবং পদ্ধতি সম্পর্কে আপনার যত্ন নেওয়ার দরকার নেই, কারণ আপনি জানেন যে এগুলি সমস্তই ডাব্লুএসডিএল থেকে উত্পন্ন হয়েছিল।
  • এবং অবশ্যই আপনার সাবান ক্রিয়া / খাম / নেমস্পেস ইত্যাদি সম্পর্কে সচেতন হওয়া দরকার না কেবল পদ্ধতিটিকে আমরা যেমন কল করি ততক্ষণ, বিকাশকারীরা সর্বদা করে।

আপনি কি জানেন যে কীভাবে ডেটের সাথে ডিল করতে হয়? অ্যাপাচি সিএক্সএফ এটি এক্সএমএল গ্রেগরিয়ানক্যালেন্ডারে অনুবাদ করে যা আমি অ্যান্ড্রয়েডে তৈরি করতে সক্ষম নই।
মার্টিন নিউ

9

আমি নিশ্চিত আপনার সাথে একটু সাবান ক্লায়েন্ট বানাতে পারে am অক্ষঅক্ষ ইনস্টলেশন সংক্রান্ত নির্দেশাবলী


2
অক্ষ তখনই অ্যান্ড্রয়েডের সাথে সামঞ্জস্যপূর্ণ হলে কাজ করবে। এটি (জাভ্যাক্স সম্পর্কে কিছু নয় the অক্ষের নির্ভরতার মধ্যে প্যাকেজগুলি)।
পলপ্রগ্রামার


6

পদ্ধতিটি এসওএপি দ্বারা এই পদক্ষেপগুলি অনুসরণ করুন

ডাব্লুএসডিএল ফাইল থেকে,

  • প্রতিটি অনুরোধের জন্য এসওএপি অনুরোধ টেম্পলেট তৈরি করুন।

  • তারপরে কোডগুলিতে পাস করা মানগুলি বিকল্প করুন।

  • DefaultHttpClient উদাহরণ ব্যবহার করে পরিষেবাটি শেষ পয়েন্টে এই ডেটা পোস্ট করুন।

  • প্রতিক্রিয়া স্ট্রিম এবং অবশেষে পান

  • এক্সএমএল পুল পার্সার ব্যবহার করে প্রতিক্রিয়া স্ট্রিমটি পার্স করুন।


6

আপনি যদি জেএসএন ব্যবহার করতে পারেন তবে পিএইচপি সার্ভার এবং অ্যান্ড্রয়েড ফোন ক্লায়েন্টের সাথে অ্যাপ্লিকেশন পরিষেবাদি বিকাশ করতে একটি হুইটপেপার, একটি ভিডিও এবং স্যাম্পল কোড রয়েছে ।


6

আমার কাছে সবচেয়ে সহজ উপায় হ'ল সমস্ত প্রয়োজনীয় ক্লাস উত্পন্ন করার জন্য ভাল সরঞ্জামটি ব্যবহার করা। ব্যক্তিগতভাবে আমি এই সাইটটি ব্যবহার করি:

http://easywsdl.com/

এটি বেশ জটিল ওয়েব পরিষেবাদি সমর্থন করে এবং ksoap2 ব্যবহার করে।


5

আমি একটি দরকারী সরঞ্জাম যা আমাকে অনেক সাহায্য করেছে তা পরীক্ষা করে নেওয়ার পরামর্শ দেব। এই প্রকল্পটির যত্ন নেওয়া ছেলেরাও খুব সহায়ক ছিল। www.wsdl2code.com/


5

যদি অ্যান্ড্রয়েডে ওয়েব পরিষেবা কল করার বিষয়ে আপনার যদি সমস্যা হয় তবে আপনি ওয়েব পরিষেবাটিতে কল করতে এবং প্রতিক্রিয়া পেতে নীচের কোডটি ব্যবহার করতে পারেন। আপনার ওয়েব পরিষেবা ডেটা টেবিল ফর্ম্যাটে প্রতিক্রিয়া ফিরিয়েছে তা নিশ্চিত করুন .. আপনি যদি এসকিউএল সার্ভার ডাটাবেস থেকে ডেটা ব্যবহার করেন তবে এই কোডটি আপনাকে সহায়তা করবে । আপনি ব্যবহার যদি জুমলা আপনাকে একটা পরিবর্তন করতে মাত্র শব্দ প্রতিস্থাপন প্রয়োজন 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
        }
    }

এ বিষয়ে আপনার যদি কোন সমস্যা থাকে তবে আপনি আমাকে লিখতে পারেন ..


4

আপনার প্রকল্পের নাম সহ এসওএপি লাইব্রেরি ফাইলটি ডাউনলোড করুন এবং যুক্ত করুন: ksoap2-android-সমাবেশ-3.4.0-নির্ভরতা সহ জার

অ্যাপ্লিকেশনটি পরিষ্কার করুন এবং তারপরে প্রোগ্রাম শুরু করুন

এসওএপি পরিষেবা কলের কোড এখানে

    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 বা স্ট্রিং হতে পারে

আপনার আরও ভাল রেফারেন্সের জন্য, https://trinitytuts.com/load-data-from-soap-web-service-in-android-application/

ধন্যবাদ।


3

এটি অ্যান্ড্রয়েডে এসওএপি ওয়েব পরিষেবা গ্রহণের একটি কার্যকারী উদাহরণ।

** দ্রষ্টব্য :: *** আপনার প্রকল্পে ksoap2.jar যোগ করতে ভুলবেন না এবং অ্যান্ড্রয়েডমেনিস্ট ফাইলটিতে ইন্টারনেট অনুমতি যুক্ত করুন *

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();
    }
}

দয়া করে এই বিষয়ে আমাকে সাহায্য stackoverflow.com/questions/41573829/...
Edijae Crusar

3

আপনি কিছু শিরোনাম সহ পোস্টের মাধ্যমে পোস্ট হিসাবে সাবান কল করতে পারেন। আমি এই প্রশ্নটি 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;
}

এখানে সাহায্য দয়া করে stackoverflow.com/questions/41573829/...
Edijae Crusar

এ সম্পর্কে দুটি প্রশ্ন: ১. মূল কার্যকলাপ থেকে এটি কীভাবে বলা হয়? ২. প্যারামিটার হিসাবে পাস করা স্ট্রিংআরলশীপমেন্টের মান কত হওয়া উচিত?
তোরি

উপরের মন্তব্যে, প্রশ্ন # 1 উপেক্ষা করুন।
তোরি

প্রধান ক্রিয়াকলাপ থেকে আপনার এই কোডটি কল করতে অ্যাসিঙ্কটাস্ক ব্যবহার করা উচিত। এই কোডটি চালু করতে এই অ্যাসিঙ্কটাস্ক ক্লাসের অভ্যন্তরে ডোইনব্যাকগ্রাউন্ডটি প্রয়োগ করুন
লাপেনকভ ভ্লাদিমির

2

অ্যান্ড্রয়েড থেকে একটি এসওএপি ওয়েব পরিষেবা কল করতে, এই ক্লায়েন্টটি ব্যবহার করার চেষ্টা করুন

আপনার জাভা তৈরির পথে 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;
    }
}

@ ওয়াজদি এইচ কীভাবে প্রতিক্রিয়াটির সাথে তুলনা করবেন ফলাফল সরবরাহকারীর ফলাফল থেকে: - সাফল্য ..... "প্রতিক্রিয়া = 1 ~ সাফল্যময়" .... সুতরাং আমরা কীভাবে সেই ফলাফলটিকে সার্ভারের দিক থেকে অবস্থার সাথে তুলনা করব ...... ..
অমিতসর্মা

1

সাবান লিবারায় যোগ করুন (ksoap2-android-assembly-3.2.0-jar-with-dependencies.jar ) যুক্ত করুন:

পাবলিক স্ট্যাটিক স্ট্রিং এফএন_ কনফার্ম_কলেক্ট মনি_প্রোভাল (

        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;
    }

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.