项目需要用到soap开发,在网上搜索找到了ksoap2的andriod移植版。感觉都说不错,所以就用它做soap开发,刚开始用.net开发了简单的webservice,测试没有问题。
后来服务器端真实环境弄好了,是用php yii框架开发的webservice.
然后一样的代码去连接,在androidHT.call(SOAP_ACTION,envelope);这句话出现了异常,
提示
expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <definitions name='AndriodController' targetNamespace='urn:AndriodControllerwsdl'>@2:363 in java.io.InputStreamReader@435b7208) 附上我的代码:
        final String SOAP_ACTION = nameSpace + methodName;  
        SoapObject request = new SoapObject(nameSpace, methodName);  
        SoapObject soapResult=null;  
          
        if(params !=null && !params.isEmpty()){  
            for(Iterator it = params.entrySet().iterator();it.hasNext();){
                Map.Entry<String, Object> e =(Map.Entry<String, Object>) it.next();  
                request.addProperty(e.getKey().toString(),e.getValue());  
            }  
        }  
 
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
              
        //envelope.dotNet=true;
        envelope.bodyOut = request;  
         
        /*AndroidHttpTransport androidHT = new  AndroidHttpTransport(wsdl);
        androidHT.call(SOAP_ACTION,envelope);
        soapResult = (SoapObject)envelope.getResponse(); */
        HttpTransportSE ht = new HttpTransportSE(wsdl);
        ht.call(null, envelope); 
        soapResult = (SoapObject)envelope.getResponse();
        
        return soapResult;  
我各种都测试了用AndroidHttpTransport  或者 HttpTransportSE, call函数第一个用null或者SOAP_ACTION,出现还是一样的异常。我个人分析应该是解析wsdl文件应该出错了我后来用.net去连接这个phpwebservice,测试没有,难道net兼容性好?
真是郁闷,困扰我几天了,又没有代码,也没有办法调试,后来看到能反编译,不过反编译后代码有错误啊,如何去修改一个java文件,编译后去替换jar包呢??
有哪位大侠,知道的告知一声,在此感谢了!!!

解决方案 »

  1.   

    你用SoapUI测试一下,接口,看有问题么
      

  2.   

    测试了一下,没有问题接口,我用.net工程访问也没有问题,真是晕倒。我感觉是SoapEnvelope版本问题
      

  3.   

    同样的问题,我也遇上了,.net 可以,java不行
      

  4.   

    1. 在AndroidManifest.xml 中加入 访问网络的权限。 <uses-permission android:name="android.permission.INTERNET"/> 2.     namespace和url 中 ip、port请尽量填写WIFI或者公网,因为如果你用手机去模拟上传,你的手机是连接不到内网的(如IP:192.168.1.1或 localhost)。 3.     Webservice服务器的Soap版本为1.0,所以客户端指定SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);     VER11改为VER10 4.   String  url = "http://134.192.44.105:8080/SSH2/service/IService?wsdl";Url指的是你的webservice的地址.一般都是以***.wsdl或者***.?wsdl结束的...但是.需要注意的是..要去掉后面的.wsdl或者.?wsdl。本人服务器端是用 xfire-all-1.2.6.jar 写webservice接口,调用webservice的时候 把 ?wsdl 去掉,就能成功访问。网上粘的我就卡在第四条上,找了一晚上