2012-09-24 19 views
6

पढ़ने में त्रुटि मेरे पास निम्न एंड्रॉइड ऐप कोड है। मैं HTTP के माध्यम से एक वेब सेवा से कनेक्ट करने की कोशिश कर रहा हूँ। वेब सेवा अपाचे अक्ष का उपयोग करती है। हालांकि मैं प्रतिक्रिया में "XMLStreamReader पढ़ने में त्रुटि" त्रुटि में चल रहा हूं। मैं वास्तव में अटक गया हूं और यकीन नहीं कर रहा हूं कि मैं क्या कर सकता हूं। क्या यह हो सकता है कि HTTP क्लाइंट के विभिन्न संस्करण और SOAP सर्वर और क्लाइंट साइड पर उपयोग किए जा रहे हैं ?? इस पर किसी भी प्रकार की सहायताबहुत प्रशंसनीय होगी। वेब सेवा बहुत सरल है: sayHello विधि तर्क arg0 में दी गई = some_stringSOAP लिफाफा प्रतिक्रिया त्रुटि: XMLStreamReader

public class MainActivity extends Activity { 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 

    BufferedReader in = null; 
    try { 
     HttpClient client = new DefaultHttpClient(); 
     HttpPost request = new HttpPost(
       "http://10.0.0.63:8080/archibus/cxf/HelloWorld/sayHello"); 
     request.addHeader("Content-Type", "text/xml"); 
     List<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
     postParameters.add(new BasicNameValuePair("arg0", "testing")); 
     UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters); 
     request.setEntity(formEntity); 

     HttpResponse response = client.execute(request); 

     in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     StringBuffer sb = new StringBuffer(""); 
     String line = ""; 
     String NL = System.getProperty("line.separator"); 
     while ((line = in.readLine()) != null) { 
      sb.append(line + NL); 
     } 
     in.close(); 

     String page = sb.toString(); 
     // Log.i(tag, page); 
     System.out.println(page); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     if (in != null) { 
      try { 
       in.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
} 
+0

http://www.lalit3686.blogspot.in/2012/06/calling-soap-webservice-using- httppost.html –

उत्तर

7

आपका WebService अनुरोध ठीक से निर्माण नहीं कर रहा है प्रदर्शित करता है। आप वास्तव में एक फॉर्म अनुरोध बना रहे हैं, न कि एक वास्तविक एसओएपी अनुरोध।

एक एसओएपी अनुरोध एक एक्सएमएल दस्तावेज़ है जिसमें एक लिफाफा है और एक शरीर उदाहरण उदाहरण SOAP Message Example on Wikipedia है।

आप वास्तव में यहां क्या कर रहे हैं एक मानक HTTP कॉल है जो सबमिट फ़ॉर्म को अनुकरण करता है और एसओएपी कॉल नहीं।

1- आप मैन्युअल रूप से XML दस्तावेज़ को बनाने और उसे जमा करके एक सोप ग्राहक के व्यवहार का अनुकरण कर सकते हैं या तो:

आप यहाँ दो समाधान है। अनुरोध शरीर के रूप में उचित XML दस्तावेज़ की स्थापना के अलावा मत भूलना उचित हेडर स्थापित करने के लिए:

 RequestEntity requestEntity = new StringRequestEntity("<?xml version=\"1.0\"?><soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\"><soap:Header></soap:Header><soap:Body><m:GetStockPrice xmlns:m=\"http://www.example.org/stock\"><m:StockName>IBM</m:StockName></m:GetStockPrice></soap:Body></soap:Envelope>"); 
    post.setRequestEntity(requestEntity); 

भी मत भूलना नाम स्थान (एम) बदलने के लिए उपरोक्त SOAPAction, सामग्री-प्रकार और सामग्री-लंबाई आपके webservice का उपयोग कर रहे उचित नामस्थान के साथ। और आपरेशन नाम (GetStockPrice) ऑपरेशन के साथ आप आमंत्रित करने का प्रयास कर रहे हैं। पैरामीटर नाम और प्रकार भी न भूलें।

2- आप अपाचे एक्सिस का उपयोग एक ग्राहक उत्पन्न करने के लिए कर सकते हैं और अपने आवेदन

साथ कि ग्राहक का उपयोग अधिक जानकारी और एक सिफारिश की ग्राहक How to call a SOAP web service on Android

2

Shoukry कश्मीर के लिए इस सूत्र देखें सही है। आपने HTTP पोस्ट अनुरोध किया है। यह एक साबुन webservice नहीं है। यदि आप जानना चाहते हैं कि एक webservice को कॉल करने के लिए लिंक का पालन करें। http://www.youtube.com/watch?v=v9EowBVgwSo। सुनिश्चित करें कि आप नवीनतम ksoap jar फ़ाइल डाउनलोड करें।

1

एंड्रॉइड के लिए के-एसओएपी का उपयोग नमूना कोड।

private void sendSOAPmsg(DamageAssessmentFormPojo pojo) throws IOException, XmlPullParserException, SoapFault { 
     SoapObject request = new SoapObject(WEBSERVICE.NAMESPACE, WEBSERVICE.METHOD_NAME_SUBMIT_REPORT); 
     request.addProperty("xmlBytes", Util.getSoapBase64String(pojo)); 
     request.addProperty("fileName", IO.DefaultReportName); 
     request.addProperty("deviceId", AppConstants.IMEI != null ? AppConstants.IMEI : Util.getIMEI(this)); 

     SoapPrimitive response = sendSOAPEnvelope(request, WEBSERVICE.SOAP_ACTION_SUBMIT_REPORT); 

     if (response.toString().equalsIgnoreCase("true")) { 
      Logger.logInfo("REPORT SENT SUCCESSFULLY", "WEB-SERVICE"); 
      pojo.setReportSent(true); 
      IO.writeObject(pojo.getReportsFolderPath() + IO.DefaultReportName, pojo); 
     } else { 
      Logger.logInfo("REPORT SENT FAILED", "WEB-SERVICE - RESONSE " + response.toString()); 
     } 
    } 

    private SoapPrimitive sendSOAPEnvelope(SoapObject request, String soapAction) throws IOException, XmlPullParserException, SoapFault { 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     envelope.setOutputSoapObject(request); 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(WEBSERVICE.URL); 

     androidHttpTransport.call(soapAction, envelope); 
     SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 

     return response; 

    } 

    private boolean sendSOAPimage(String strImg, File pFile) throws IOException, XmlPullParserException { 
     boolean result = false; 

     if (strImg != null) { 
      SoapObject request = new SoapObject(WEBSERVICE.NAMESPACE, WEBSERVICE.METHOD_NAME_SUBMIT_IMAGE); 
      request.addProperty("imageBytes", strImg); 
      request.addProperty("fileName", pFile.getName()); 
      request.addProperty("deviceId", AppConstants.IMEI != null ? AppConstants.IMEI : Util.getIMEI(this)); 

      SoapPrimitive response = sendSOAPEnvelope(request, WEBSERVICE.SOAP_ACTION_SUBMIT_MAGE); 

      if (response.toString().equalsIgnoreCase("true")) { 

       result = true; 

       Logger.logInfo("IMAGE SENT SUCCESSFULLY", "WEB-SERVICE"); 

      } else { 
       Logger.logInfo("IMAGE SENT FAILED", "WEB-SERVICE - RESONSE " + response.toString()); 
      } 

     } 

     return result; 
    } 

// -------- util सहायक विधि

public static String getSoapBase64String(DamageAssessmentFormPojo pojo) { 


     XmlSerializer xmlSerializer = Xml.newSerializer(); 
     StringWriter writer = new StringWriter(); 

     try { 
      xmlSerializer.setOutput(writer); 
      xmlSerializer.startDocument("UTF-8", true); 

      xmlSerializer.startTag("", XMLTags.TAG_ROD); 
      xmlSerializer.startTag("", XMLTags.TAG_ORDER); 

      xmlSerializer.startTag("", XMLTags.TAG_SEVERITY); 
      xmlSerializer.text(pojo.getCheckedSeverity_Complexity()); 
      xmlSerializer.endTag("", XMLTags.TAG_SEVERITY); 

      xmlSerializer.startTag("", XMLTags.TAG_DAMAGE_TYPE); 
      StringBuilder builder = new StringBuilder(); 
      for (String str : pojo.getCheckedDamageTypes()) { 

       builder.append(str + " , "); 

      } 
      xmlSerializer.text(builder.toString()); 
      xmlSerializer.endTag("", XMLTags.TAG_DAMAGE_TYPE); 

      xmlSerializer.startTag("", XMLTags.TAG_ENV_IMPACT); 
      xmlSerializer.text(pojo.getCheckedEnvImpact()); 
      xmlSerializer.endTag("", XMLTags.TAG_ENV_IMPACT); 

      xmlSerializer.startTag("", XMLTags.TAG_ENV_COMMENT); 
      xmlSerializer.text(pojo.getEnvImpactComments()); 
      xmlSerializer.endTag("", XMLTags.TAG_ENV_COMMENT); 

      xmlSerializer.startTag("", XMLTags.TAG_TRAVEL_CONDITION); 
      xmlSerializer.text(pojo.getCheckedTravelCond()); 
      xmlSerializer.endTag("", XMLTags.TAG_TRAVEL_CONDITION); 

      xmlSerializer.startTag("", XMLTags.TAG_TRAVEL_COMMENT); 
      xmlSerializer.text(pojo.getTravCondComments()); 
      xmlSerializer.endTag("", XMLTags.TAG_TRAVEL_COMMENT); 

      xmlSerializer.startTag("", XMLTags.TAG_ORDER_DATE); 
      xmlSerializer.text(pojo.getDateTime()); 
      xmlSerializer.endTag("", XMLTags.TAG_ORDER_DATE); 

      xmlSerializer.endTag("", "Order"); 
      xmlSerializer.endTag("", "ROD"); 

      xmlSerializer.endDocument(); 

     } catch (IllegalArgumentException e) { 
      Logger.logException(e); 
     } catch (IllegalStateException e) { 
      Logger.logException(e); 
     } catch (IOException e) { 
      Logger.logException(e); 
     } 

     return Base64.encode(writer.toString().getBytes()); 
    } 
संबंधित मुद्दे