采用MyEclipse开发平台,采用xFire开发框架,开发webservice。如果说,webservice中方法的输入输出参数均为基本类型,比如int,string等,通过下面的方法可以调用:Client client = new Client(new URL("http://../webservice/services/servicename?wsdl"));
Object[] results = client.invoke("methodName",new Object[]{输入参数1,输入参数2,输入参数3,......});
boolean bool = (Boolean)results[0];//这里假设 输出结果 为boolean型
但是,如果输入参数,输出结果不是基本类型,比如说数组、自定义类,那么该如何传递这些数据,怎么调用webservice?
Object[] results = client.invoke("methodName",new Object[]{输入参数1,输入参数2,输入参数3,......});
boolean bool = (Boolean)results[0];//这里假设 输出结果 为boolean型
但是,如果输入参数,输出结果不是基本类型,比如说数组、自定义类,那么该如何传递这些数据,怎么调用webservice?
解决方案 »
- tomcat发布工程,内存溢出,请高手们进来指点
- xfire的webservice接口问题
- 祝大家圣诞节快乐!哈~~~
- 求XML教学视频和struts的教学视频(hibernate、spring的也要),有好的话,加分回报!!
- 中文乱码问题? 解决立即结贴!
- 系统突然登陆不了了,咋办呢?!
- 大家谁对portal技术了解啊?
- 问高手JXTA的问题!急!!!
- jsp在运行时的错误,请帮忙解决!!!!!
- ognl.MethodFailedException: Method "list" failed for object com.hyq.Action.Emplo
- 一个关于JDBC连接mySQL的问题 (急......)
- 如何禁止hibernate查询的时候将数字转换为科学计数法
例如
有个用户对象user,包含有userName和pwd两个字段,你可以将它封装为
String param = "userName=admin###pwd=123";然后另外一端用String.split("###")将这个拆开,然后封装为对象,进行处理。
数组更好办,直接封装为"array1###array2###array3",这样,那边直接通过split("###")就可以得到这个数组的字符串了,然后在用上面说的对象字符串转换方法转换为对应的对象。具体转化为字符串的方式,可以参考Java的反射机制
<param typ="string">param1</param>
<!--.....-->
<param typ="string">paramn</param>
<param typ="recordset">//这个用来存放这些复杂的信息
大致思路:
首先,建立一公共接口;
public void checkValue(String 类型名称,Object 传入的对象,String 执行哪个法方);
然后,建立相应的法方;
也可以对某一通用法方进行多态。
最后,执行你所需要的判断法方。
给一段代码你,希望对你有用
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new URL(url));//网络地址
call.addParameter(new QName(url,"p1"), javax.xml.rpc.encoding.XMLType.SOAP_STRING, javax.xml.rpc.ParameterMode.IN);
call.setOperationName(new QName(url,"getUserBySystemCode"));//调用的方法名
//System.out.print("第二步成功了");
call.setReturnType(new QName("entity.webservices.tjsoft.com", "User"), User.class);//
// 注册映射关系
QName Userinfo = new QName("entity.webservices.tjsoft.com", "User");//此处的 User为WSDL文件中complexType name的属性值 //这里注册映射关系,对自定义的类进行序列化与反序列化。
call.registerTypeMapping(User.class, Userinfo, new BeanSerializerFactory(User.class, Userinfo),
new BeanDeserializerFactory(User.class, Userinfo));//ITVAccount.class同上,
//给方法传递参数,并且调用方法
Object[] obj = new Object[]{userCode};
User wuser = (User)call.invoke(obj);
System.out.print("打印当前用户的Code "+wuser.getPersonCode());
// String url="http://localhost:8088/ServiceObject/services/ServiceObject";// //2.创建服务
//
// Service service=new ObjectServiceFactory().create(Sayhand.class);
//
// //3.创建服务代理
//
// XFireProxyFactory factory=new XFireProxyFactory(XFireFactory.newInstance().getXFire());
//
// //4.调用外部的WebService, 建立对象. 再测试其方法
//
// try {
//
// Sayhand obj=(Sayhand)factory.create(service,url);
//
// System.out.println(obj.hellow("wanglu"));
//
// } catch (MalformedURLException e) {
//
// e.printStackTrace();
//
// }