2012-07-18 73 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客户端。我稍后可能会发表另一个问题。