दिलचस्प पोस्ट
एंड्रॉइड: एंड्रॉइड कैमरा पूर्वावलोकन पर ओवरले एक शर्त के साथ अद्वितीय मूल्यों को गणना करें MATLAB में हिस्टोग्राम समरूपता फ़ंक्शन का स्पष्टीकरण MySQL 'ऑर्डर बाय' – अल्फ़ान्यूमेरिक को सही ढंग से सॉर्ट करना एक से अधिक एसवीएन रिपॉजिटरी के संयोजन किसी वास्तविक डिवाइस पर डिबग कैसे करें (ईक्लिप्स / एडीटी का प्रयोग करके) डीकोड पॉशेशल आउटपुट में संभावित रूप से गैर अजैनी यूनिकोड वर्णों को अजगर स्ट्रिंग में शामिल किया गया था फ़ायरफ़ॉक्स और क्रोम 48 में फ्लेक्सबॉक्स का इस्तेमाल करने वाली समस्याओं को प्रस्तुत करना कैसे सीएसवी को ऑरेकल में तालिका में बदलने के लिए गतिशील प्रोग्रामिंग – सबसे बड़ा वर्ग ब्लॉक एक्स स्ट्रॉन्ग एक्सट्रैक्ट की तलाश में है कैसे दो दिनांक समय स्ट्रिंग और घंटों में अंतर की तुलना करें? (बाश शेल) ExifInterface से रोटेशन प्राप्त करना हमेशा 0 देता है पृष्ठभूमि स्विफ्ट में ऑडियो कैसे खेलें? एचटीटीपी समर्थन के साथ एचटीटीप्लेस्टनर

WebServiceTemplate का उपयोग कर एक SOAP अनुरोध कैसे भेजें?

मैं एक SOAP webservice के लिए अनुरोध भेजने की कोशिश कर रहा हूं मैं अपने ट्यूटोरियल के लिए तैयार हूं और निम्नलिखित कोड तैयार किया है, लेकिन मैं एक से कई एसओएपी webservices और एक अनुरोध पर ट्यूटोरियल पर विभिन्न अनुरोध भेजने जा रहा हूं। मैं WebserviceTemplate का उपयोग कर SOAP अनुरोध कैसे भेज सकता हूं?

WebServiceTemplate

SoapMessage soapMsg = new SoapMessage(); soapMsg.setUsername("Requester"); soapMsg.setPassword("Pass"); soapMsg.setLanguageCode("EN"); Request request = new Request(); request.setDeparture("FDH"); request.setDestination("HAM"); Date date = new Date(); SimpleDateFormat frm2 = new SimpleDateFormat("yyyy-MM-dd"); request.setDepartureDate(frm2.parse(frm2.format(date))); request.setNumADT(1); request.setNumCHD(0); request.setNumInf(0); request.setCurrencyCode("EUR"); request.setWaitForResult(true); request.setNearByDepartures(true); request.setNearByDestinations(true); request.setRronly(false); request.setMetaSearch(false); soapMsg.setRequest(request); WebServiceTemplate webServiceTemplate = new WebServiceTemplate(). //how to create object and send request! Object response = webServiceTemplate.marshalSendAndReceive( "https://aaa5.elsyarres.net", soapMsg); Response msg = (Response) response; System.err.println("size of results of wogolo:" + msg.getFlights().getFlight().size()); 

Solutions Collecting From Web of "WebServiceTemplate का उपयोग कर एक SOAP अनुरोध कैसे भेजें?"

आप निम्न कोड का उपयोग कर सकते हैं, आपको एक्सएमएल फ़ाइल में कुछ भी परिभाषित करने की आवश्यकता नहीं है।

  try { SaajSoapMessageFactory messageFactory = new SaajSoapMessageFactory( MessageFactory.newInstance()); messageFactory.afterPropertiesSet(); WebServiceTemplate webServiceTemplate = new WebServiceTemplate( messageFactory); Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); marshaller.setContextPath("PACKAGE"); marshaller.afterPropertiesSet(); webServiceTemplate.setMarshaller(marshaller); webServiceTemplate.afterPropertiesSet(); Response response = (Response) webServiceTemplate .marshalSendAndReceive( "address", searchFlights); Response msg = (Response) response; } catch (Exception s) { s.printStackTrace(); } 

विभिन्न SOAP अनुरोधों को अलग-अलग SOAP सेवाओं के लिए भेजने के लिए, आपको बस अपने वेबसर्सेटेलटेप्लेट को सभी अनुरोधों और प्रतिक्रियाओं के बारे में अवगत कराया जाना चाहिए, जिस पर उसे प्रक्रिया करना होगा।

प्रत्येक अनुरोध और प्रतिक्रिया की तरह एक जावा वर्ग बनाएँ:

 package models; import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; @XmlRootElement public class FlyRequest implements Serializable { private boolean nearByDeparture; public FlyRequest() {} public boolean isNearByDeparture() { return nearByDeparture; } public void setNearByDeparture(boolean nearByDeparture) { this.nearByDeparture = nearByDeparture; } } 

(@ XmlRootElement है क्योंकि हम नीचे JAXB marshaller का उपयोग करते हैं; अधिक जानकारी के लिए जैक्सब संदर्भ देखें)।

टेम्पलेट की स्थापना उदाहरण के लिए किया जाता है जैसे:

  SaajSoapMessageFactory messageFactory = new SaajSoapMessageFactory(MessageFactory.newInstance()); messageFactory.afterPropertiesSet(); WebServiceTemplate webServiceTemplate = new WebServiceTemplate(messageFactory); Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); marshaller.setContextPath("models"); marshaller.afterPropertiesSet(); webServiceTemplate.setMarshaller(marshaller); webServiceTemplate.afterPropertiesSet(); 

"मॉडल" पैकेज का नाम है जहां अनुरोध / प्रतिक्रिया वर्ग हैं, ताकि जेक्सब उन्हें ढूंढ सकें।

फिर आप बस उस कॉल के अनुरोध को इन्स्तांत करते हैं जिसे आप कॉल करना चाहते हैं, जैसे:

  // call fly service: FlyRequest flyRequest = new FlyRequest(); flyRequest.setNearByDeparture(false); Object flyResponse = webServiceTemplate.marshalSendAndReceive("https://example.net/fly", flyRequest); // call purchase service: PurchaseRequest purchaseRequest = new PurchaseRequest(); purchaseRequest.setPrice(100); Object purchaseResponse = webServiceTemplate.marshalSendAndReceive("https://example.net/purchase", purchaseRequest); 

इसी तरह, आप उपरोक्त परिभाषित अपने जेएसीएबी कक्षाओं में प्रतिक्रिया ऑब्जेक्ट डालें।

यह मानते हुए कि आपका साबुन संदेश कैंसर है

एक ही संदेश को कई बिंदुओं पर भेजने के लिए आपको केवल भेजने वाले कोड और अनुरोध हैंडलर पर लूप की आवश्यकता होती है।

कुछ इस तरह:

 { String endpoint = "https://aaa5.elsyarres.net" WebServiceTemplate webServiceTemplate = new WebServiceTemplate(). webServiceTemplate.setDefaultUri(endpoint); Object response = webServiceTemplate.marshalSendAndReceive(soapMsg); // handle you are response as you are currently doing. // Loop changing the endpoint as you need. } 

यह कोड स्प्रिंग वेबसाइसेमेप्लेट का उपयोग करता है

यहाँ एक उदाहरण है जिसे आपको तलाश करना चाहिए

साबुन को REST विपरीत कई प्रतिबंध हैं, यह कुछ मानकों का पालन करता है जिन्हें नेटवर्क कॉल करने से पहले मिलना होता है,

लेकिन Rest विपरीत, सोप में यदि आपके पास WSDL यूआरएल है तो आप सोप कॉल को कॉल करने के लिए आवश्यक सारी जानकारी प्राप्त कर सकते हैं

 private final String NAMESPACE = "http://www.w3schools.com/webservices/"; private final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL"; private final String SOAP_ACTION = "http://www.w3schools.com/webservices/CelsiusToFahrenheit"; private final String METHOD_NAME = "CelsiusToFahrenheit"; 

यह कोड Android में लिखा गया था ताकि आप इसे के कुछ भाग को अनदेखा कर सकें लेकिन मैं इसे अभी भी उत्तर में रख दिया है ताकि एंड्रॉइड पृष्ठभूमि से कोई व्यक्ति इसका अच्छा उपयोग कर सके

ब्राउज़र में खोलें [WSDL][1] और उन चीजों की जांच करें जो सर्वर पर रिमोट विधि को कॉल करने के लिए महत्वपूर्ण हैं।

1 आपको एक विशेषता targetNamespace Namespace दिखाई targetNamespace जिसका मान Namespace होगा जिसे आप इस मामले में उपयोग करेंगे। Namespace http://www.w3schools.com/webservices/

2 अब आपको विधि के नाम की आवश्यकता होती है, जिसमें WSDL के चार विधि होते हैं जिनमें से प्रत्येक में int विशेषता है s:element मूल्य के साथ s:element इस विधि में विधि का नाम है, इस विधि में चार विधियां FahrenheitToCelsius , FahrenheitToCelsiusResponse , CelsiusToFahrenheit , CelsiusToFahrenheitResponse

3 अब आपको SOAP Action जो कि NAMESPACE+METHOD लेकिन डब्ल्यूएसडीएल के बारे में भी जानकारी देता है, को soap:operation कि टैग soap:operation और इसका साबुन का एक्शन soapAction सोप एक्शन के रूप में काम करता है क्योंकि यह इस मामले में मूल्य है जिसे हम चाहते हैं कॉल http://www.w3schools.com/webservices/CelsiusToFahrenheit

 private class MyTask extends AsyncTask<Void, Void, String> { @Override protected void onPreExecute() { super.onPreExecute(); progressDialog.show(); } @Override protected String doInBackground(Void... params) { try { SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME); soapObject.addProperty("Celsius","12"); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(soapObject); HttpTransportSE httpTransportSE = new HttpTransportSE(URL); httpTransportSE.call(SOAP_ACTION, envelope); SoapPrimitive soapPrimitive = (SoapPrimitive)envelope.getResponse(); Log.d("TAG", "doInBackground: "+soapPrimitive.toString()); return soapObject.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String aVoid) { super.onPostExecute(aVoid); progressDialog.dismiss(); textView.setText(""+aVoid); } }