在web service间传递java bean
来源:互联网 发布:java javascript 编辑:程序博客网 时间:2024/06/05 09:35
web service的调用返回值都是基本的数据类型,那么对于java这种具有很强的对象封装的语言,怎么来支持各种自定义的java类型的对象处理呢?
在java ee 规范中,我们是推荐使用java类的序列化(即让类实现Serializable这个接口)的方式,这个在有些情况下容易出现乱码的问题。
1、返回单个对象的web service的编写
---1、服务器端的编写
--------1、写一个自定义的java类,这个java类就是在 web service中需要传递的对象
public class Order implements Serializable{
private String id;
private String name;
set get Method...
}
---------2、对应于上面这个自定义类的服务类
public class OrderService {
public Order returnOrder(Order order) {
Order newOrder = new Order();//类似临时对象
//编写一些业务逻辑
if(order.getId().equals("1")) {
newOrder.setName("Jacky");
} else {
newOrder.setName("Tom");
}
return newOrder;
}
----------3、将他们编译成class或者jar包,以便于后续的拷贝与部署;
----------4、将编译好的class文件(或者jar包)拷贝到axis\web-inf\classes的路径下;
----------5、修改server-config.wsdd配置文件,添加相应的服务配置参数;
<service name="OrderService" provider="java:RPC">
<parameter name="className" value="com.webservice.wsdd.HelloWSDD"/> <!--这里可以使用通配符-->
<parameter name="allowedMethods" value="returnOrder"/>
<parameter name="scope" value="request/session/application"/>
</service>
但是上面的配置并没有完成,因为我们在服务的返回值当中使用了自定义的java bean对象,这个时候我们必须要在我们的配置文件中来加以声明:
---------6、将自定义的java类的类型,在webservice的配置文件中,进行描述
<service name="OrderService" provider="java:RPC">
<parameter name="className" value="anni.OrderService"/> <!--这里可以使用通配符-->
<parameter name="allowedMethods" value="returnOrder"/>
<parameter name="scope" value="request/session/application"/>
<beanMapping languageSpecificType="java:anni.Order" qname="nsl:Order" xmlns:nsl="BeanService" /> <!--这两个地方可以改动,其他地方固定的-->
<!--如果在类中使用内部类,我们尽量使用静态内部类,因为它支持序列化,-->
<!--如果在我们的自定义类的内部有对于另外一个自定义类的依赖,那么这个时候我们还需要在我们的service服务中在配置一个beanMapping的对应配置节点-->
</service>
----------7、编写测试客户端,首先在我们的客户端一定要有我们在服务器端自定义的类的class或者jar包,也就是说要引用自定义的jar包啦。String url = "http://localhost:8080/axis/services/OrderService";
Service service = new Service();
Call call = service.createCall();
//这里注册javaBean, 注意:和server-config.wsdd编写的内容一致
QName qn = new QName("urn:BeanService", "Order");
call.registerTypeMapping(Order.class, qn , new BeanSerializerFactory(Order.class, qn), new BeanDeserializerFactory(Order.class, qn);
//创建调用
call.setTargetEndpointAddress(new URL(url));
//调用服务器的方法
call.setOperationName(new QName("order", "returnOrder"));
//设定传入的参数
call.addParameter("arg1", qn, parameterMode.IN);
//设置返回的类型
call.setReturnType(qn, Order.class);
//接受结果
Order result = call.invoke(new Object[]{order});
System.out.println("the response is "+result);
以上提供了一种编写的方式,这里只是一种。
- 在web service间传递java bean
- web service 传递复杂对象
- 在cxf web service类中同时注入spring bean出错时的解决办法
- Java web bean
- java web分页bean
- Java Web 论如何在 Listener获取Spring Bean
- 在Service之间传递数据
- 在.NET与Java间进行Web Service交互的新选择
- Sun 拥有Java, 但是它的Web Service 在哪里?
- 使用JWSDP完成Web Service在java的入门(一)
- 使用JWSDP完成Web Service在java的入门(二)
- 在java项目中配置web service服务
- 在java项目中配置web service服务
- 在struts2中加入java的web service示例
- web service axis2 参数为对象传递
- Web Service之AXIS传递javabean
- c#动态传递URL到Web Service
- web service的基础教程 web Service java
- 简单的事情复杂做
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 关于FSM(有限状态机)的学习2
- SQL注入与防范
- 手机卫士第七天笔记
- 在web service间传递java bean
- 天声人語 20160306 見えてきた微生物
- 字符串最后一个单词的长度
- ppz飞控代码不同姿态表示之间转换理解
- 搭建可调试的微信公众平台本地测试环境
- JavaWeb开发_Tomcat安装及配置教程
- 关于FSM(有限状态机)的学习3---总结
- toms swgj steh ziyb
- Linux内核驱动自动创建设备节点文件