2013-12-06 7 views
0

Я получаю FileNotFoundException при вызове soap-сервиса, код ответа 500, служба работает нормально в IOS, вот мой код, я использую ksoap2-android-assembly-3.1.1 -jar-с-dependencies.jar, я новичок с Ksoap, пожалуйста, помогитеНевозможно вызвать soap webservice с помощью Ksoap2

try { 

          URL mUrl = new URL(
            "http://www.bmtqs.com.au/DepreciationCalculatorService.svc/basic"); 
          HttpURLConnection conn = (HttpURLConnection)mUrl.openConnection();   
          conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8"); 

          conn.addRequestProperty("SOAPAction","http://tempuri.org/IDepreciationCalculatorService/Calculate"); 
          conn.setDoOutput(true); 
          OutputStreamWriter wr = new OutputStreamWriter(conn 
            .getOutputStream()); 
          String body = "<?xml version='1.0' encoding='UTF-8'?><SOAP-ENV:Envelope xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" 
            + " xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/'>" 
            + " <SOAP-ENV:Body> <Calculate xmlns='http://tempuri.org/'> <detail_ xmlns:a='http://schemas.datacontract.org/2004/07/BmtWebsite.DepreciationCalculator.Business' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>" 
            + "<a:BuildingType>"     + "Apartment/Unit" + "</a:BuildingType>" 
            + "<a:City>"       + "Sydney"   + "</a:City>" 
            + "<a:Construction>"     + "2013-07-01"  + "</a:Construction>" 
            + "<a:Finish>"       + "Medium"   + "</a:Finish>" 
            + "<a:FloorArea>"      + "120"    + "</a:FloorArea>" 
            + "<a:IsSquares>"      + "false"   + "</a:IsSquares>" 
            + "<a:Levels>"       + "10"    + "</a:Levels>" 
            + "<a:MaxFloorArea>"     + "5000"   + "</a:MaxFloorArea>" 
            + "<a:MaxLevels>"      + "100"    + "</a:MaxLevels>" 
            + "<a:MinFloorArea>"     + "10"    + "</a:MinFloorArea>" 
            + "<a:PropertyType>"     + "Residential"  + "</a:PropertyType>" 
            + "<a:Purchase>"      + "2013-07-01"  + "</a:Purchase>" 
            + "<a:Units>"       + "1"    + "</a:Units>" 
            + "</detail_>" 
            + "</Calculate>" 
            + "</SOAP-ENV:Body></SOAP-ENV:Envelope>"; 

          wr.write(body); 
          wr.flush(); 
          // Get the response 

          Log.i("", "code===="+conn.getResponseCode()); 
          BufferedReader rd = new BufferedReader(new InputStreamReader(conn 
            .getInputStream())); 
          String mResult = ""; 
          String line; 
          while ((line = rd.readLine()) != null) { 
           mResult += line; 
          } 
          wr.close(); 
          rd.close(); 


          return mResult; 

         } catch (Exception e) { 


            e.printStackTrace(); 
           } 

EDIT:

12-06 12:40:59.988: I/(27306): code====500 
12-06 12:40:59.988: W/System.err(27306): java.io.FileNotFoundException: http://www.bmtqs.com.au/DepreciationCalculatorService.svc/basic 
12-06 12:40:59.996: W/System.err(27306): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186) 
12-06 12:40:59.996: W/System.err(27306): at com.bmtqs.bmttaxcalc.MainScreen$calc.doInBackground(MainScreen.java:1015) 
12-06 12:40:59.996: W/System.err(27306): at com.bmtqs.bmttaxcalc.MainScreen$calc.doInBackground(MainScreen.java:1) 
12-06 12:40:59.996: W/System.err(27306): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
12-06 12:40:59.996: W/System.err(27306): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
12-06 12:40:59.996: W/System.err(27306): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
12-06 12:40:59.996: W/System.err(27306): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
12-06 12:40:59.996: W/System.err(27306): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
12-06 12:40:59.996: W/System.err(27306): at java.lang.Thread.run(Thread.java:856) 

Edit2: я попробовал этот путь также, но это тоже не работает.

private final String NAMESPACE = "http://tempuri.org/"; 
       private final String URL = "http://www.bmtqs.com.au/DepreciationCalculatorService.svc/basic"; 
       private final String SOAP_ACTION = "http://tempuri.org/IDepreciationCalculatorService/Calculate"; 
       private final String METHOD_NAME = "Calculate"; 

try{ 
           SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

           request.addProperty("BuildingType","Apartment/Unit"); 
           request.addProperty("City", ""+"Sydney"); 
           request.addProperty("Construction", "2013-07-01"); 
           request.addProperty("Finish", "Medium"); 
           request.addProperty("FloorArea", "120"); 
           request.addProperty("IsSquares", "false"); 
           request.addProperty("Levels", "10"); 
           request.addProperty("MaxFloorArea", "5000"); 
           request.addProperty("MaxLevels", "100"); 
           request.addProperty("MinFloorArea", "10"); 
           request.addProperty("PropertyType", "Residential"); 
           request.addProperty("Purchase", "2013-07-01"); 
           request.addProperty("Units", "1"); 
          // request.addProperty("FloorArea",floor_area.getText().toString().trim()); 

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

           Element[] header = new Element[1]; 

           header[0] = new Element().createElement(NAMESPACE, "a");     
           header[0].addChild(Node.TEXT, "HeaderTextContent"); 

           envelope.headerOut = header; 

           // envelope.implicitTypes=true; 
           // envelope.setAddAdornments(false); 
           HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,30000); 
           androidHttpTransport.debug=true; 
           androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); 
           androidHttpTransport.call(SOAP_ACTION, envelope); 
            // SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 
           // response = (SoapObject) envelope.getResponse(); 

            res=envelope.getResponse().toString(); 
           Log.i("", "cal response==="+envelope.getResponse()); 


          } 

          catch(Exception e){ 
          e.printStackTrace(); 
          } 

EDIT 3: LogCat при использовании ksoap

12-06 13:16:05.793: W/System.err(32177): SoapFault - faultcode: 'a:InternalServiceFault' faultstring: 'Object reference not set to an instance of an object.' faultactor: 'null' detail: [email protected] 
12-06 13:16:05.816: W/System.err(32177): at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:141) 
12-06 13:16:05.816: W/System.err(32177): at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:140) 
12-06 13:16:05.816: W/System.err(32177): at org.ksoap2.transport.Transport.parseResponse(Transport.java:118) 
12-06 13:16:05.816: W/System.err(32177): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:272) 
12-06 13:16:05.816: W/System.err(32177): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:118) 
12-06 13:16:05.816: W/System.err(32177): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:113) 
12-06 13:16:05.824: W/System.err(32177): at com.bmtqs.bmttaxcalc.MainScreen$calc.doInBackground(MainScreen.java:963) 
12-06 13:16:05.824: W/System.err(32177): at com.bmtqs.bmttaxcalc.MainScreen$calc.doInBackground(MainScreen.java:1) 
12-06 13:16:05.824: W/System.err(32177): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
12-06 13:16:05.824: W/System.err(32177): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
12-06 13:16:05.824: W/System.err(32177): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
12-06 13:16:05.824: W/System.err(32177): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
12-06 13:16:05.824: W/System.err(32177): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
12-06 13:16:05.832: W/System.err(32177): at java.lang.Thread.run(Thread.java:856) 
+0

Вы не используете ksoap2 в своем коде. Может, в этом проблема? –

+0

@ XaverKapeller я пытался, но ничего не работает. –

+0

Что именно не срабатывало при использовании ksoap2? Просто посылая мыльный конверт, добавляющий сильный, используя HttpUrlConnection, редко работает, и это не очень хорошее решение. –

ответ

0

Эта ошибка предполагает вы не предоставили правильный URL-адрес, мыло Действие или имя метода. Проверьте их внимательно, и я думаю, что вы найдете проблему.

+0

, я проверил, но эти вещи не ошибаются .. также можно проверить, вот URL-адрес службы http: //www.bmtqs.com.au/DepreciationCalculatorService.svc? Wsdl ... Я использую метод Calculate этой службы –

Смежные вопросы