Android ksoap2调用.net webservice上传对象参数

/**
     * 请求webservice并返回响应
     * @param namespace        webservice命名空间
     * @param webServiceURL    WSDL文档的URL 
     * @param soapAction    SOAPAction
     * @param methodName    要调用的webservice方法名
     * @param propertyInfos    PropertyInfo参数数组
     * @param timeout        超时时长 毫秒
     * @param mappingName     对象参数类名
     * @param mappingClass     对象参数类
     * @return
     * @throws XmlPullParserException 
     * @throws IOException 
     */
    public static Object visitWebService(String namespace,String webServiceURL,String soapAction,String methodName,PropertyInfo[] propertyInfos,int timeout,String mappingName,Class mappingClass) throws IOException, XmlPullParserException{
        Object result = null;
            //创建SoapObject对象,并指定WebService的命名空间和调用的方法名
            SoapObject soapObject = new SoapObject(namespace, methodName);
            //设置WebService方法的参数
            if(propertyInfos!=null)
                for(int i=0;i<propertyInfos.length;i++){
                    soapObject.addProperty(propertyInfos[i]);
                }
            //创建SoapSerializationEnvelope对象,并指定WebService版本
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            //设置bodyOut属性 
            envelope.bodyOut = soapObject;
            //需要设置dotNet属性,否则报错
            envelope.dotNet = true;
            if(mappingName!=null){
                envelope.addMapping(namespace, mappingName, mappingClass);
            }
            envelope.setOutputSoapObject(soapObject);
            //创建HttpTransportSE对象并指定WSDL文档的URL 
            HttpTransportSE ht = new HttpTransportSE(webServiceURL, timeout);
            ht.debug = true;
            //需要设置SOAPAction的值,否则报错
            ht.call(soapAction, envelope);
            //使用getResponse方法获得WebService方法的返回结果 
            result = envelope.getResponse();
        return result;
    }
PropertyInfo[] propertyInfos = new PropertyInfo[1];
        PropertyInfo propertyInfo = new PropertyInfo();
        propertyInfo.setName("model");
        propertyInfo.setValue(new Model("BB", 99));
        propertyInfo.setType(Model.class);
        propertyInfos[0] = propertyInfo;

终于可以调用带对象参数的方法了。

 

 

posted @ 2012-12-17 16:07  TQ.CH  阅读(758)  评论(0编辑  收藏  举报