2012-07-18 75 views
0

我遇到了在PC和Android上正確使用PHP web服務交談時獲得ksoap2客戶端的問題。我已經嘗試了PHP的包含庫和nusoap,而非它的作品。Ksoap2客戶端與基於PHP的webservice交談的問題

忘記了錯誤。 Android和PC客戶端都會提供org.xmlpull.v1.XmlPullParserException 但消息不同。 PC例如給出PI不能以xml開頭

這是我的PC客戶端的代碼。

import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.*; 

public class client { 



    public static void main(java.lang.String args[]) { 
     final String SOAP_ACTION = "http://secure.g4apps.com/submitAxios/writegpsdata"; 
     final String METHOD_NAME = "writegpsdata"; 
     final String NAMESPACE = "http://secure.g4apps.com/submitAxios/"; 
     final String URL = "http://secure.g4apps.com/submitAxios.php"; 

     SoapObject rpc = new SoapObject(NAMESPACE,METHOD_NAME); 
     SoapSerializationEnvelope env = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     rpc.addProperty("writegpsdataRequest","A1,E1,E1,AT333AT333,9055627513,2012-02-02 02:02:02,2012-02-02 02:02:02,-454545.343434,434343.232323,A334A334A334A443X,1000000,3434"); 


     env.bodyOut=rpc; 
     env.encodingStyle = SoapSerializationEnvelope.XSD; 

     HttpTransportSE ht = new HttpTransportSE(URL); 
     ht.debug = true; 

     try { 
      ht.call(SOAP_ACTION, env); 

      System.out.println(ht.requestDump); 

     } 
     catch(org.xmlpull.v1.XmlPullParserException ex2) { 
      System.out.println("Error" + ex2.toString()); 
     } 
     catch (Exception ex){ 
      String error = ex.toString(); 
      System.out.println("Error: "+ error); 
     } 


    } 
} 

這是我的PHP服務器代碼。這是通信函數writegpsdata的作品,但服務器響應客戶端錯誤。

<?php 
// submitGPS is a soap server which writes GPS data to a mysql database. 
// requires the writegpsdata.inc file which contains the required function 
// uses submitGPS.wsdl file for defining soap service 

require_once ("writegpsdata.axios.inc.php"); 
//require_once ("lib/nusoap.php"); 

ini_set("soap.wsdl_cache_enabled","0"); //disabling WSDL caching 
$server = new SoapServer("http://secure.g4apps.com/submitAxios.wsdl"); 
$server->AddFunction("writegpsdata"); 
$server->handle(); 
?> 

對於好的措施,這裏是wsdl文件。

<?xml version="1.0"?> 
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://secure.g4apps.com/submitAxios/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="submitAxios" targetNamespace="http://secure.g4apps.com/submitAxios/"> 
    <wsdl:message name="writegpsdataRequest"> 
    <wsdl:part name="writegpsdataRequest" type="xsd:string"/> 
    </wsdl:message> 
    <wsdl:message name="writegpsdataResponse"> 
    <wsdl:part name="writegpsdataResponse" type="xsd:string"/> 
    </wsdl:message> 
    <wsdl:portType name="submitAxios"> 
    <wsdl:operation name="writegpsdata"> 
     <wsdl:input message="tns:writegpsdataRequest"/> 
     <wsdl:output message="tns:writegpsdataResponse"/> 
    </wsdl:operation> 
     </wsdl:portType> 
    <wsdl:binding name="submitAxiosSOAP" type="tns:submitAxios"> 
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> 
    <wsdl:operation name="writegpsdata"> 
     <soap:operation soapAction="http://secure.g4apps.com/submitAxios/writegpsdata"/> 
     <wsdl:input> 
     <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://secure.g4apps.com/submitAxios/" use="encoded"/> 
     </wsdl:input> 
     <wsdl:output> 
     <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://secure.g4apps.com/submitAxios/" use="encoded"/> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="submitAxios"> 
    <wsdl:port binding="tns:submitAxiosSOAP" name="submitAxiosSOAP"> 
     <soap:address location="http://secure.g4apps.com/submitAxios.php"/> 
    </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

回答

0

事實證明,我的include函數writegpsdata有一些額外的字符是或結束(PHP之外的標籤),我無法在Eclipse中看到。我複製了內容,刪除了該文件,並將其粘貼到新文件中,並在離開時發生此錯誤。雖然我仍然有問題與我的Android客戶端。我稍後可能會發表另一個問題。