精华内容
下载资源
问答
  • 这个工程详细的介绍了webService服务客户端如何调用简单和复杂的webService,其中就包括传递的参数对象类型,返回数据是数组类型,还有最简单的基本类型。压缩包里还配置说明,清晰的说明webService的整个过程,对...
  • PHP WEBSERVICE NOWSDL模式 (不参数,字符串参数,数组参数,对象参数) IOS 参数为XML 目录结构: 网站根目录 -------- soap ----------------server.php client.php server.php: <?php ...

    目录结构:

    网站根目录

    -------- soap

    ----------------server.php client.php

     

    server.php:

    <?php

        header('Content-Type:text/html;charset=utf-8');

        $SoapArrtitue = array('location'     => 'http://www.z.cn/soap/server.php',

                              'uri'          => 'http://www.z.cn/soap',

                              'soap_version' => SOAP_1_2,

                              'encoding'     => 'UTF-8');

        $SoapServerHandle = new SoapServer(null, $SoapArrtitue);

        $SoapServerHandle->addFunction(SOAP_FUNCTIONS_ALL);  /// 允许客户端调用所有的方法

        $SoapServerHandle->handle();

     

        function HELLO($ARGUMENT)

        {

            if(false == isset($ARGUMENT)) return '(NULL)HELLO NULL';

            else if(true == is_string($ARGUMENT)) return '(STRING)HELLO '.$ARGUMENT;

            else if(true == is_array($ARGUMENT))

            { /// 数组使用$OBJECT['NAME'] $OBJECT['AGE']

                $GREAT = 'HELLO '.$ARGUMENT['NAME'].', Y 2 '. $ARGUMENT['AGE'].' OLD';

                return array('TYPE' => 'ARRAY', 'GREAT' => $GREAT, 'WINNER' => 'WINNER');

            }

            else if(true == is_object($ARGUMENT))

            { /// 对象使用$OBJECT->NAME $OBJECT->AGE

                $GREAT = 'HELLO '.$ARGUMENT->NAME.', Y 2 '. $ARGUMENT->AGE.' OLD';

                $RETURN->TYPE = 'OBJECT';

                $RETURN->GREAT = $GREAT;

                $RETURN->WINNER = 'WINNER';

                return $RETURN;

            }

        }

    ?>



    client.php:

    <?php

        header('Content-Type:text/html;charset=utf-8');

        $SoapArrtitue = array('location'     => 'http://www.z.cn/soap/server.php',

                              'uri'          => 'http://www.z.cn/soap',

                              'soap_version' => SOAP_1_2,

                              'encoding'     => 'UTF-8');

        $SoapClientHandle = new SoapClient(null, $SoapArrtitue);

        var_dump($SoapClientHandle->__getTypes());

     

        try

        {

            echo "HELLO:";

            $ResponseHELLONULL = $SoapClientHandle->HELLO();

            echo $ResponseHELLONULL;

            echo '</br>';

     

            echo "HELLOString:";

            $ResponseHELLOString = $SoapClientHandle->HELLO("Zhang");

            echo $ResponseHELLOString;

            echo '</br>';

     

            echo "HELLOArray:";

            $ARRAY = array('NAME' => 'ZHANG', 'AGE' => '18');

            $ResponseHELLOArray = $SoapClientHandle->HELLO($ARRAY);

            print_r($ResponseHELLOArray);

            echo '('.$ResponseHELLOArray['TYPE']."&nbsp|&nbsp".$ResponseHELLOArray['GREAT'];

            echo "&nbsp|&nbsp".$ResponseHELLOArray['WINNER'].')</br>';

     

            echo "HELLOObject:";

            $OBJECT->NAME = 'ZHANG';

            $OBJECT->AGE = '20';

            $ResponseHELLOObject = $SoapClientHandle->HELLO($OBJECT);

            print_r($ResponseHELLOObject);

            echo '('.$ResponseHELLOObject->TYPE."&nbsp|&nbsp".$ResponseHELLOObject->GREAT;

            echo "&nbsp|&nbsp".$ResponseHELLOObject->WINNER.')</br>';

        }

        catch(SoapFault $SoapFaultHandle)

        {

            var_dump($SoapFaultHandle);

            echo '</br>';

            echo '</br>';

            echo '</br>';

            echo '</br>';

            print ($SoapClientHandle->__getLastRequest());

        }

    ?>

     

    IOS代码:

     

    NSString *NSStringArgumentString = @"STRING";

        NSString *NSStringArgumentObject = @"<NAME>ZHANG</NAME><AGE>20</AGE>";

        NSString *soapMsg = [NSString stringWithFormat:

                             @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"

                             "<soap12:Envelope "

                             "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "

                             "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "

                             "xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">"

                             "<soap12:Body>"

     

                             "<HELLO xmlns=\"http://www.z.cn/\">"

                             "<ARGUMENT>%@</ARGUMENT>"

                             "</HELLO>"

                             "</soap12:Body>"

                             "</soap12:Envelope>",

                             NSStringArgumentObject];

        // 将这个XML字符串打印出来

        NSLog(@"%@\n\n", soapMsg);

        // 创建URL,内容是前面的请求报文报文中第二行主机地址加上第一行URL字段

        NSURL *url = [NSURL URLWithString: @"http://www.z.cn/soap/server.php"];

        // 根据上面的URL创建一个请求

        NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];

        NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMsg length]];

        // 添加请求的详细信息,与请求报文前半部分的各字段对应

        [req addValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

        [req addValue:msgLength forHTTPHeaderField:@"Content-Length"];

        // 设置请求行方法为POST,与请求报文第一行对应

        [req setHTTPMethod:@"POST"];

        // 将SOAP消息加到请求中

        [req setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];

     

        // 创建连接

        conn = [[NSURLConnection alloc] initWithRequest:req delegate:self];

        if (conn) {

            webData = [NSMutableData data];

        }

     

    代码看不懂,看http://hi.baidu.com/zorru/item/54c225ff3b28c50ac7dc45f1文章,代码是从这个文章中修改过来的,就修改了传递参数。

     

    这样传递图片和文字综合体就没问题了,多了很多字段,文字用文本模式,图片二进制数字用base64编码转换成字符,一切ok...分段传输图片也没问题了,因为xml的字段可以附加很多信息。

    posted on 2014-09-29 14:15 zorru 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/zsonce/p/4000148.html

    展开全文
  • webservice的时候使用SoapUI测试接口的时候需求人员想要把参数格式给展示出来,类似于 这种格式的,上网搜也没找到类似的案例所以弄出来之后给大家分享一下。 刚开始方法后面接收参数是用的String进行接收 @...

    做webservice的时候使用SoapUI测试接口的时候需求人员想要把参数格式给展示出来,类似于
    在这里插入图片描述
    这种格式的,上网搜也没找到类似的案例所以弄出来之后给大家分享一下。

    刚开始方法后面接收参数是用的String进行接收

     @WebMethod
     public String Test(@WebParam(name = "request")String param) ;
    
    

    使用SoapUI测试的时候,只有一个@WebParam里面的参数名称,没有那种级联关系,调用你接口的人也不知道给你怎么传参数,传什么格式。
    在这里插入图片描述
    但是@WebParam中有一个targetNamespace属性,这个属性你可指定接收参数的对象,指定好之后再用SoapUI测试的时候就会显示出级联关系,调用你接口的人员很容易知道要传什么参数什么格式

    //targetNamespace 中的路径是包名反写。
    public Response selectOrderType(@WebParam(name = "request" ,targetNamespace ="http://request.test.com/RequestMsg")RequestMsg param) ;
    

    定义好之后就可以返回这种格式。
    在这里插入图片描述
    接收参数的类:

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name="OrderRequestMsgHeader", propOrder={"msgHeader","tt","tt1","tt2"
    		})
    @XmlRootElement
    public class RequestMsg {
    	
    	@XmlElement(name="msgHeader", required=true)
    	private MsgHeader msgHeader;
    	
    	@XmlElement(name="Tt", required=true)
    	private MsgHeader tt;
    	
    	@XmlElement(name="Tt1", required=true)
    	private MsgHeader tt1;
    	
    	@XmlElement(name="Tt2", required=true)
    	private MsgHeader tt2;
    	// get/set
    }
    

    MsgHeader头信息类

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name="msgHeader", propOrder={"test", "testMsg","PAGESIZE","CURRENT_PAGE","TOTAL_RECORD"})
    @XmlRootElement
    public class MsgHeader {
    
    	@XmlElement(name="test",required = true)
    	private String test;
    	@XmlElement(name="testMsg",required = true)
    	private String testMsg;
    	@XmlElement(name="PAGESIZE",required = true)
    	private String PAGESIZE;
    	@XmlElement(name="CURRENT_PAGE",required = true)
    	private String CURRENT_PAGE;
    	@XmlElement(name="TOTAL_RECORD",required = true)
    	private String TOTAL_RECORD;
    	//get/set
    	}
    

    类上面用的标签大家都可以去了解下,这里就不过多做解释了。

    展开全文
  • 这边需要用C#call一个webservice的接口,推过去的参数以JSON的格式传递过去。 说实话,接口写了很多,全部是封装好的,直接调用,把对象传进去就好了,所有要写个从无到有的,有点蒙蔽,智能百度自己查了。 1.接口...

    背景:
    这边需要用C#call一个webservice的接口,推过去的参数以JSON的格式传递过去。
    说实话,接口写了很多,全部是封装好的,直接调用,把对象传进去就好了,所以要写个从无到有的,有点蒙蔽,只能百度自己查了。

    1.接口调用地址验证
    拿到人家的接口,首先要验证接口是否正确。
    在这里插入图片描述
    在浏览器中输入该地址:返回结果如下,正常返回,能看到里面所有方法
    在这里插入图片描述
    2.验证调用方法是否正确
    刚开始我用postman,按照百度,输入request地址,选择post方式,在Headers中配置“Content-Type”等,结果点击send之后,返回的记过就是soap:Fault,没办法,主要是postman里面设置的东西太多了,估计我哪项没设置好导致无法正确读取我传过去的参数,然后百度又百度不到怎么设置参数的。
    然后改用SoapUI就可以了,官网下载SoapUI,安装完毕运行,新建SOAP项目:
    在这里插入图片描述
    随便起个名称TEST,然后在Initial WSDL中输入刚才在浏览器中验证的接口地址,点击OK
    在这里插入图片描述
    在左侧菜单栏中,可以看到此接口的所有16个方法,与浏览器中看到的一致
    在这里插入图片描述
    选择你需要call的方法双击Request1,将直接跳出你需要传输过去的XML,里面包含了需要填入的2个参数。
    但是我被接口方给的接口文档混淆了,文档上写传过去的必须是JSON格式,百度了好久,都找不到WebService传参传Json的例子,全是传XML的,后来才知道,WebService传参就是以XML格式传过去的,即使文档里面说的JSON格式,实际上也是一个JSON格式的字符串放在XML的参数里而已。
    如下,文档说传过去的参数必须是JSON格式,所实际上就是在 < paras>?</ paras>中放入JSON格式的字符串。
    然后又遇到一个问题, < ValidateData>?</ ValidateData>是什么鬼?接口文档中压根没有,所以只能绕N久找到接口的给出方问了,这个应该是对应验证XML的一个参数,只要传固定值就好了(总结经验,call接口必须得找给出接口的人,面对面测试,否则自己肯兹肯兹半天都不一定搞得出来,这边就是,文档中就压根没给出ValidateData的参数)
    在这里插入图片描述
    写入2个参数,第一个参数跟接口方讨论了下,是固定值;第二个参数就是按照接口文档给出的规范,传过去一个JSON类型的字符串,输入2个参数,点击运行,可以看到,调用接口方法后正确返回结果。
    在这里插入图片描述

    3.接口调用方法正确后,开始写代码如何调用该方法了。
    网上查了下C#调用webService接口的方式有3种方式,看下面链接,写的很详细:(但是动态调用我按照他里面写的,就是无法调用,代码走到调用生成的.dll文件一直是null,不知道为啥)
    https://www.jb51.net/article/190211.htm

    因为要测试代码,所以我先随便建立了一个“Windows窗体应用程序”,随便添加个button,在点击事件里面来走下代码测试下结果:
    3.1.静态调用
    静态调用最简单,如果是给定接口的URL(即我这边的案例),直接引用即可
    刚开始我以为静态调用无法更改url地址,实际上并不是,在静态引用后,vs会很智能的自动将地址配置到配置文件中,这时候更改url地址,即配置文件中的地址了。
    右击引用,选择添加服务引用
    在这里插入图片描述
    将给的接口地址输入,点击“转到”,则可以看到“服务”中的接口了,然后自己修改个命名空间即可,注:有些接口文档给出的地址可能需要自己补上尾部“?WSDL”
    在这里插入图片描述
    然后你回看到引用的接口已经被添加到项目中,类似于一个类文件,或者说就可以把“ServiceReference1”看做一个封装好的接口类就行了
    在这里插入图片描述
    双击ServiceReference1,可以看到所有的方法都在里面
    在这里插入图片描述
    找到方法名
    在这里插入图片描述
    双击方法名,进入“Reference.cs”文件,们可以看到里面的所有方法了。
    然后找到实现该方法名的真正方法“WebBuilderWebServiceForZTBClient”
    在这里插入图片描述
    实例化那个接口类:“接口类名.方法名”。
    最后根据接口文档,调用业务方法“client.InformationDel(validateData, paras);”。
    在这里插入图片描述
    针对“client.InformationDel(validateData, paras);”,我们按F12进入到“Reference.cs”文件,可以看到InformationDel()删除方法与上面我们用SoapUI测试的传入参数是一致的
    在这里插入图片描述
    与SoapUI测试的输入XML参数一致,也是2个参数:“ValidateData”和“paras”在这里插入图片描述
    点击button完成点击事件,可以看到输出结果是成功的,传过来也是JSON字符串,需要的话,可以直接把它转成对象。
    在这里插入图片描述
    最后我们在“Reference.cs”文件里面,拉倒最上面可以看到,里面有个“ConfigurationName”下面的方法全部按照这个方法名来调用的,这个实际上就是vs自动智能帮忙生成的配置文件的Url
    在这里插入图片描述
    进入配置文件,可以看到自动配置好的地址,如果ip变了,只要配置这边就OK了,无需重新生成引用文件了
    在这里插入图片描述
    3.2.动态调用
    刚开始我以为静态调用是接口地址固定调用,而动态调用时接口地址变动的调用,但是实际上,静态调用也是可以配置地址的,如3.1最后写的一点,实际上静态调用指的是直接引用接口地址,动态调用是代码生成的.dll文件,然后引用该文件,实现dll中的类,调用里面的方法。
    根据百度的参考,就是调用不起来,尝试了不同的人写的都不行,最后没法办了只好采用静态调用,直到写这个笔记之前,想找到原因,然后又找了个人写的,居然可以了,发现可能是@namespace命名的问题,同样的方法,我按照下面这位博主的方法,就调用成功了,看了下好像就@namespace命名不同,其他都一样。
    https://www.cnblogs.com/ruochen/archive/2007/12/11/990427.html
    直接上代码,就是上面的连接

     private void button7_Click(object sender, EventArgs e)
            {
    
                string validateData = "epointoa@83OZsT5IdXL2uwu_XMvEfpdpzrc=@MjE0NzQ4MzY0Nw==";
                string paras = "[" +
                                "{" +
                                    "'siteGuid': '123'," +
                                    "'infoId': 'SCJG20990040'," +
                                "}" +
                            "]";
    
                //这里的namespace是需引用的webservices的命名空间,在这里是写死的,大家可以加一个参数从外面传进来。
                string @namespace = "client";
                try
                {
    
                   string url= "http://192.168.0.1:8081/EpointWebBuilder/services/WebBuilderWebServiceForZTB";
                    //获取WSDL
                    WebClient wc = new WebClient();
                    Stream stream = wc.OpenRead(url + "?WSDL");
                    ServiceDescription sd = ServiceDescription.Read(stream);
                    string classname = sd.Services[0].Name;
                    ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
                    sdi.AddServiceDescription(sd, "", "");
                    CodeNamespace cn = new CodeNamespace(@namespace);
    
                    //生成客户端代理类代码
                    CodeCompileUnit ccu = new CodeCompileUnit();
                    ccu.Namespaces.Add(cn);
                    sdi.Import(cn, ccu);
                    CSharpCodeProvider csc = new CSharpCodeProvider();
                    ICodeCompiler icc = csc.CreateCompiler();
    
                    //设定编译参数
                    CompilerParameters cplist = new CompilerParameters();
                    cplist.GenerateExecutable = false;
                    cplist.GenerateInMemory = true;
                    cplist.ReferencedAssemblies.Add("System.dll");
                    cplist.ReferencedAssemblies.Add("System.XML.dll");
                    cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
                    cplist.ReferencedAssemblies.Add("System.Data.dll");
    
                    //编译代理类
                    CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
                    if (true == cr.Errors.HasErrors)
                    {
                        System.Text.StringBuilder sb = new System.Text.StringBuilder();
                        foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
                        {
                            sb.Append(ce.ToString());
                            sb.Append(System.Environment.NewLine);
                        }
                        throw new Exception(sb.ToString());
                    }
    
                    //生成代理实例,并调用方法
                    System.Reflection.Assembly assembly = cr.CompiledAssembly;
                    Type t = assembly.GetType(@namespace + "." + classname, true, true);
                    object obj = Activator.CreateInstance(t);
                    System.Reflection.MethodInfo mi = t.GetMethod("InformationDel");
    
                    object obj1 = mi.Invoke(obj, new object[] { validateData, paras });
                    MessageBox.Show($"方法返回值:{obj1.ToString()}"); 输出
                    
                }
                catch (Exception ex)
                {
                    string expt = ex.ToString();
                }
            }
    

    结果也一样成功了
    在这里插入图片描述
    4.查看接口方结果。
    完成以上3步,实际上OK了,需要查看的就是对方接口功能是否正确。
    坑爹的就是,明明返回true,但是接口的业务就是没有完成,无法看到预期结果。
    最后还是找对方,联合测试,对方查看,返回true是因为数据已经成功插入到他们的数据库了,但是业务没完成,是因为里面的“地区”字段传空了,那边不知道把内容关联到哪个地区,所有没有显示最终结果。我只能表示“呵呵”了,既然“地区”字段必须要有值,那你接口文档为何要写允许为空?关键还是返回true?
    在这里插入图片描述
    5.总结
    即使接口文档写的很详细,涉及到其他系统,还是得找到对方接口的开发,很重要,至少能节约半天以上时间。

    展开全文
  • 现在假设调用webservice方法的时候需要一个对象参数,需要用到服务器端的一个类。 服务器端类是这样的 public class User implements Serializable { private String username; private Integer age; public...

    现在假设调用webservice方法的时候需要传一个对象参数,需要用到服务器端的一个类。

    服务器端类是这样的

    public class User implements Serializable {
        private String username;
        private Integer age;
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    }


    webservice接口如下

    /**
     * SERVICE_URL:http://192.168.1.101:8080/TestWsImplService/TestWsImpl
     * SERVICE_NAMESCAPE:http://impl.webservices.yinke.com/
     * 测试服务,包含两个方法,一个返回单个字符串,一个返回字符串数组
     * @author Tsingheng
     */
    @Local
    @WebService
    public interface TestWs {
        /**
         * 返回单个字符串测试方法
         * @param testStr 字符串参数,将包含在返回结果中
         * @return 返回单个字符串
         */
        String test(User user);
        /**
         * 返回字符串数组测试方法
         * @return 返回字符串数组
         */
        String[] arrayTest();
    }


    然后看客户端对应的User类,需要实现KvmSerializable接口

    public class User implements KvmSerializable {
    	private String username;
    	private Integer age;
    	
    	public User() {
    
    	}
    	
    	public User(SoapObject obj) {
    		this.username = obj.getProperty(0).toString();
    		this.username = obj.getProperty(1).toString();
    	}
    	
    	@Override
    	public Object getProperty(int arg0) {
    		// TODO Auto-generated method stub
    		Object obj = null;
    		switch (arg0) {
    			case 0: {
    				obj = this.username;
    				break;
    			}
    			case 1: {
    				obj = this.age;
    				break;
    			}
    		}
    		return obj;
    	}
    
    	@Override
    	public int getPropertyCount() {
    		// TODO Auto-generated method stub
    		return 2;
    	}
    
    	@SuppressWarnings("rawtypes")
    	@Override
    	public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
    		// TODO Auto-generated method stub
    		switch(arg0){
    			case 0:{
    				arg2.name = "username";
    				arg2.type = PropertyInfo.STRING_CLASS;
    				break;
    			}
    			case 1:{
    				arg2.name = "age";
    				arg2.type = PropertyInfo.STRING_CLASS;
    				break;
    			}
    		}
    	}
    
    	@Override
    	public void setProperty(int arg0, Object arg1) {
    		// TODO Auto-generated method stub
    		switch(arg0){
    			case 0:{
    				this.username = arg1.toString();
    				break;
    			}
    			case 1:{
    				this.age = (Integer) arg1;
    				break;
    			}
    			}
    	}
    
    	public String getUsername() {
    		return username;
    	}
    
    	public void setUsername(String username) {
    		this.username = username;
    	}
    
    	public Integer getAge() {
    		return age;
    	}
    
    	public void setAge(Integer age) {
    		this.age = age;
    	}
    
    }


     

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    	
        <TextView 
            android:id="@+id/testStr"
            android:text="@string/hello_world"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    	
    </LinearLayout>


     

    public class MainActivity extends Activity {
    
    	private TextView testStr;
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		testStr = (TextView) super.findViewById(R.id.testStr);
    		
    		try {
    			User user = new User();
    			user.setUsername("Tsingheng");
    			user.setAge(22);
    			String resultText = stringTest(user);
    			testStr.setText(resultText);
    			
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (XmlPullParserException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	//测试调用getResultArray方法,返回值为字符串数组。
    	private String stringTest(User user) throws IOException, XmlPullParserException{
    		SoapObject arraySoapObject = SoapUtil
    				.buildSoapObject(ServiceUtil.TEST_METHOD);
    		//为方法调用添加参数
    		PropertyInfo pi = new PropertyInfo();
    		pi.setName("arg0");
    		pi.setValue(user);
    		pi.setType(User.class);
    		arraySoapObject.addProperty(pi);
    		String result = SoapUtil.getResultString(ServiceUtil.TEST_SERVICE_URL, arraySoapObject);
    		return result;
    	}
    }


    运行结果如下

    需要用到的Util类

    public class ServiceUtil {
    	public static final String SERVER_IP = "192.168.1.101:8080";
    	public static final String SERVICE_NS = "http://impl.webservice.yinke.com/";
    	public static final String REGIST_SERVICE_URL = "http://" + SERVER_IP + "/RegistWsImplService/RegistWsImpl";
    	public static final String OPERATION_SERVICE_URL = "http://" + SERVER_IP + "/OperationWsImplService/OperationWsImpl";
    	public static final String MESSAGE_SERVICE_URL = "http://" + SERVER_IP + "/MessageWsImplService/MessageWsImpl";
    	public static final String TEST_SERVICE_URL = "http://" + SERVER_IP + "/TestWsImplService/TestWsImpl";
    	public static final String REGIST_METHOD = "register";
    	public static final String UP_OPERATION_METHOD = "uploadOperation";
    	public static final String CHECK_MESSAGE_METHOD = "hasNewMessage";
    	public static final String GET_MESSAGEID_METHOD = "getStationMessageIds";
    	public static final String GET_MESSAGE_METHOD = "getMessageById";
    	public static final String MESSAGE_CONFIRM_METHOD = "messageComfirm";
    	public static final String TEST_METHOD = "test";
    	public static final String ARRAY_TEST_METHOD = "arrayTest";
    }


     

    public class SoapUtil {
    	public static SoapObject buildSoapObject(String methodName) {
    		SoapObject soapObject = new SoapObject(ServiceUtil.SERVICE_NS,
    				methodName);
    		return soapObject;
    	}
    
    	public static SoapObject resultSoapObject(String serviceUrl,
    			SoapObject soapObject) throws IOException, XmlPullParserException {
    		HttpTransportSE ht = new HttpTransportSE(serviceUrl);
    		ht.debug = true;
    		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
    				SoapEnvelope.VER11);
    		envelope.bodyOut = soapObject;
    		ht.call(null, envelope);
    		if (envelope.getResponse() != null) {
    			SoapObject resultSoapObject = (SoapObject) envelope.bodyIn;
    			return resultSoapObject;
    		}
    		return null;
    	}
    	
    	public static String getResultString(String serviceUrl,
    			SoapObject soapObject) throws IOException, XmlPullParserException{
    		SoapObject resultSoapObject = resultSoapObject(serviceUrl, soapObject);
    		if (resultSoapObject != null) return String.valueOf(resultSoapObject.getProperty(0));
    		return null;
    	}
    	
    	public static String[] getResultArray(String serviceUrl,
    			SoapObject soapObject) throws IOException, XmlPullParserException{
    		SoapObject resultSoapObject = resultSoapObject(serviceUrl, soapObject);
    		if (resultSoapObject != null){
    			String[] result = new String[resultSoapObject.getPropertyCount()];
    			for(int i = 0; i < resultSoapObject.getPropertyCount(); i++){
    				result[i] = String.valueOf(resultSoapObject.getProperty(i));
    			}
    			return result;
    		}
    		return null;
    	}
    	
    }


     

    个人觉得如果能不用服务器端类就不要用。OVER,谢谢您的阅读!
    展开全文
  • axis调用无参数的接口可以,但是一但有参数就出错 错误信息大致是:参数为空,但是我的值打印出来是有值的。下面附上代码,大佬帮忙看看!谢谢 PS:大致的错误我明白了,这个链接需要两个参数一个data ...
  • 我用cxf(版本3.1.5)搭建了一个webservice,AsEntitymgttemplate是自定义的一个javabean对象webservice方法了一个这个参数。 package com.XXXX.XX.base.webservice @WebService public interface ...
  • 上面的代码是我调用java webservice的getStudentInfo方法。参数为一个字符串数组一个字符串,但是我在后台的 getStudentInfo方法打印的时候str参数能正常打印出来,但是arr这个字符串数组却打印的不对。只是打印出...
  • android端传参数调用 ================================================== private void initBtnListener() { // TODO Auto-generated method stub btninsertjd.setOnClickListener(new OnClickListener() { ...
  • 不确定,有待后面验证 webService接口传递json对象数据为什么接口实现类获取不到? 我写了一个测试接口,我发布好了之后测试它,我接口里要传递的参数是JSONObject, 我测试客户端了一个JSONObject类型的...
  • //生成代理实例,并调用方法 System.Reflection.Assembly assembly = cr.CompiledAssembly; Type t = assembly.GetType(@namespace + "." + classname, ... 网上有二进制数组的,但服务端是人家的也没法弄
  • 用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型、double和DateTime类型的值(在服务端得到的均为null)...
  • 项目里有一部分需要传参数WebService进行处理,WebService的函数接受的参数是自定义的业务对象。此业务对象已经给予了[Serializable]属性,每个属性赋予了[XmlAttribute()]WebMethod赋予了[System.Xml....
  • WebService学习之路三

    2016-06-28 23:37:58
    WebService学习之路一 :http://trylin.iteye.com/blog/1906819   WebService学习之路二 :http://trylin.iteye.com/blog/1907883   复杂类型的参数传替 ...试着在原有的WS加入自定义对象参数。   1、创建
  • 创建HttpTransportSE对象,该对象用于调用WebService操作。 创建SoapSerializationEnvelope对象。代表一个SOAP消息封包。...如果有参数需要WebService服务器端,调用SoapObject对象的addProperty(Strin
  • 下面我们用JavaBean 、List、Map、Array等返回值或参数完成WebService。1、首先看看JavaBean模式的参数和返回值的WebService,JavaBean代码如下:package com.hoo.entity;import java.io.Serializable;/*** function...
  • *这里是我的参数放在了properties文件中,我在读取里面的参数,这里我们也可以通过方法传参数 *如 : testWebService(String url,String xMlStr)() 那么在调用的时候就可以直接进来了 *url 是你访问的webservice 的...
  • 一直以来在基于springMVC做restful风格的开发。...这时候,服务器端会将过来的xml还原为本语言的对象,调用相应的方法处理业务逻辑,并将返回值序列化为xml,返回。 不知道我上面的理解是否正确。
  • 前章:最近接到一同事的需求,我们需跟别的公司的开发人员实现一个webservice的内容请求。一开始我以为,不就是一个webservice,简单的一比。...2.接口调用传递参数类型为一个对象: 以前接口调试一直...
  • 我接收Base64编码的二进制数据(也就是附件),需要将附件通过webService传递,第三方暴露给我的附件接口参数类型包括了DataHandler。 对于Base64数据的处理有两种实现方法: 1、将Base64编码的数据转为文件,文件...
  • Android端向服务器发送数据一般通过封装好的webservice,服务器只要提供一个请求地址,其中参数多数为字符串,有时候需要可能需要json 第一种是简单的object对象 JSONStringer js = new JSONStringer() js....
  • 今天遇到个问题,还挺有意思...问题是这样的,外部业务逻辑执行完之后调getXML(String xml)这个方法把报文作为参数传过来,然后我把它赋给当前类属性xmlString ,然后new个对象调run()方法,在run()方法里把 xmlSt...
  • 我想在winform按钮事件中调用webservice接口传对象到服务端。 我尝试了第一种方式直接在webservice中创建自定义类,写一个接口参数为自定义类的数组。在客户端添加web引用后可以看到webservice自动生成的代码,发现...
  • [code="java"] var service ; function ajaxRequest() ... var url = "http://localhost:8081/MyServer/WebService/WebInfo.ws";... //设置webService传入...调用的时候JavaWeb的参数没有过去 打印出来Null
  • Tips

    2008-03-31 09:49:00
    1. WS中的private和Object类型转换:java 1.5 之后,int与Integer可以自动转换的,所以你将一个Integer对象作文参数传给一个接收int的函数的时候是不会出错的,但是如果是webservice就要当心了, 因为ws是一个通用...
  • 删除事件设计准则l3-5 .NETFramewoek事件设计准则13-6传递事件的参数13-6-1Sender对象与事件参数13-6-2定义delegate函数样板13-6-3EventArgs类的设计l3-6-4事件处理常式的编写13-6-5触发事件第14章Attribute与...
  • 删除事件设计准则l3-5 .NETFramewoek事件设计准则13-6传递事件的参数13-6-1Sender对象与事件参数13-6-2定义delegate函数样板13-6-3EventArgs类的设计l3-6-4事件处理常式的编写13-6-5触发事件第14章Attribute与...

空空如也

空空如也

1 2
收藏数 34
精华内容 13
关键字:

webservice传对象参数