最近正好在搞WEBSERVICE ,碰到了不少问题,幸好网络够强大,基本问题都能解决,先把些特性案例解决方案共享下

首先说明,aegis为XFire默认的绑定方式,何时需要绑定?
当使用JDK1.4时,或者对JDK1.5的范型和注释不是很熟悉的情况下,当遇到需要映射POJO或配置WebService接口方法返回类型(如集合类型)时,需要进行绑定,此时aegis的绑定为建立.aegis.xml的文件。

首先说明,aegis为XFire默认的绑定方式,何时需要绑定?
当使用JDK1.4时,或者对JDK1.5的范型和注释不是很熟悉的情况下,当遇到需要映射POJO或配置WebService接口方法返回类型(如集合类型)时,需要进行绑定,此时aegis的绑定为建立.aegis.xml的文件。

public interface UserInfo {public User findUserInfosByUserID(String userUniqueID);public String test();public Collection findRoleInfosByUserID(String userUniqueID);}

观察此接口,受限我们看findRoleInfosByUserID方法,此方法传入String,返回类型为Collection,此时,我们即需要配置findRoleInfosByUserID方法。
配置步骤,在接口类的同一包下建立和接口名相同的aegis.xml文件,即UserInfo.aegis.xml文件。
UserInfo.aegis.xml

<?xml version="1.0" encoding="UTF-8"?>
<mappings><mapping><method name="findRoleInfosByUserID"><return-typecomponentType="com.tongtech.bjvsp.sysmng.entity.Role" /></method></mapping>
</mappings>

其中,method代表需要配置的方法名,由于XFire可以支持基本类型,针对集合类型时,需要配置,返回类型或参数类型为基本类型时不需要特殊配置。
<return-type/>为配置返回类型,componentType属性代表返回的集合中所包含的类,此类可以是自定义的对象,也可以是基本类型,例如java.lang.String
此时,findRoleInfosByUserID方法配置完毕

PS,还拿此接口举例,如接口中,findRoleInfosByUserID接受的参数也为集合类型,那么需要在<method></method>之间再加入以下代码

<parameter index="0" componentType="java.lang.String"/>

index="0"代表方法的参数的序号,0即第一个参数。
componentType代表集合参数内包含的类型,也可以为自定义对象,例如User
注意,如果findRoleInfosByUserID方法有两个参数,一个比如为String,一个为集合,那么只需要配置集合参数即可。

二。映射POJO
比如还是上面的UserInfo接口,第一个方法
public User findUserInfosByUserID(String userUniqueID);
此时,返回类型为User
如果User中仅为基本类型,例如String,int等基本类型,无需配置User

但如果User中还包含有其他类型,比如包含有Set,List,那么需要对其进行配置
比如User代码如下:

public class User  implements java.io.Serializable {// Fields    private Integer userId;private String loginName;private String userPassword;private Integer SOrder;private String userCa;private String userName;private String userTel;private String userEmail;private String ZNote;private String userCode;private DicSystemAuth SDicSystemAuth;private Set SGroupUsers = new HashSet(0);private Set SUserDepts = new HashSet(0);
}

此时User中还包含有SDicSystemAuth的对象,以及SUserDepts等Set集合
这种情况主要可能会出现在使用Hibernate,映射一对一,一对多表时
这里要特别注意
那么此时我们需要对User进行aegis绑定,控制POJO和XML的映射
配置方法:
在User对象所在包内建立User.aegis.xml
由于User中包含Set,那么只需要对集合做设置即可,DicSystemAuth下面单独讨论

我们可以分两次来配置,分别讲解
1,

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns:my="http://my.bjvsp.tongtech.com">
<mapping name="my:User">
<property name="SGroupUsers" componentType="com.tongtech.bjvsp.sysmng.entity.GroupUser"/>
<property name="SUserDepts" componentType="com.tongtech.bjvsp.sysmng.entity.UserDept"/>
</mapping>
</mappings>

此时,配置文件中配置了两个Set集合,componentType明确定义了Set集合内包含的内容
此时,DicSystemAuth即便是自定义的对象类,由于不是集合,XFire也可以对其正确映射。
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns:my="http://my.bjvsp.tongtech.com">
<mapping name="my:User"><property name="SGroupUsers" ignore="true"/>
<property name="SUserDepts" ignore="true"/>
<property name="SDicSystemAuth" ignore="true"/>
</mapping>
</mappings>

第二种方式,定义了三个字段,并使用了ignore属性,表示这三个属性不能被序列化。
那么,何时会遇到类似于User中Set集合,不被序列化呢?

当客户端访问本地代理时,如果User表内包含有其他表的关联时,如果基于hibernate的持久层,由于hibernate的惰性加载机制,加载User时仅会将User中的属性值加载而不会加载关联表中的值,比如set和SDicSystemAuth对象等,当客户端访问本地代理,序列化User对象时,如果没有设置关联字段是否序列化,那么它会将其全部序列化,但当序列化时,由于hibernate的惰性加载,此时Session已经关闭,那么在序列化关联字段的时候,就会出现session was close的异常。因此解决办法是在aegis绑定时制定关联字段的ignore属性设置为true。

还有一种解决办法,就是仍然按照第一种配置方式,明确指明关联的Set集合内的对象,但在执行序列化前,session关闭之前,提前将关联字段内的值初始化。
用Hibernate.initialize初始化

最后补充一小句
XFire对于自定义的对象可以聪明的找到,前提是它不包含集合
例如你的方法返回一个User对象
User中都是基本类型,或者User中包含有Dept对象的引用,都没有问题。
但如果你不希望加载user时序列化Dept出问题,就乖乖把dept初始化或将dept的ignore属性设置为true

本篇文章没什么头绪,想哪儿写哪儿,主要是对这段时间的xfire的基本的学习的一个小结,所以没有太注重词语搭配,以看懂为主。。。有时间再来整理整理

转载于:https://www.cnblogs.com/skrifer/archive/2010/10/14/1851291.html

Xfire的aegis绑定方式配置小结相关推荐

  1. Nginx基础应用配置小结 - 运维笔记

    Nginx基础应用配置小结 - 运维笔记 在linux系统下使用nginx作为web应用服务,用来提升网站访问速度的经验已五年多了,今天在此对nginx的使用做一简单总结. 一.nginx服务简介 N ...

  2. SNF快速开发平台MVC-各种级联绑定方式,演示样例程序(包含表单和表格控件)...

    做了这么多项目,经常会使用到级联.联动的情况. 如:省.市.县.区.一级分类.二级分类.三级分类.仓库.货位. 方式:有表单需要做级联的,还是表格行上需要做级联操作的. 实现:实现方法也有很多种方式. ...

  3. Zabbix安装和使用配置小结

    前言 Zabbix是目前最为主流的开源监控方案之一,部署本身并不困难,难的是深入理解.根据在生产环境的实践从新版Zabbix 4.0 LTS开始全部使用Docker部署,我相信未来越来越多的开源组件都 ...

  4. WCF编程系列(六)以编程方式配置终结点

    WCF编程系列(六)以编程方式配置终结点 示例一中我们的宿主程序非常简单:只是简单的实例化了一个ServiceHost对象,然后调用open方法来启动服务.而关于终结点的配置我们都是通过配置文件来完成 ...

  5. 【分享】html5 开发工具——WeX5中的各种绑定方式

    今天整理一下 html5 开发工具--WeX5中的各种绑定方式,下面分为表现类.流程类.交互类 3 种类型分别介绍. 表现类绑定 表现类的绑定属性有visible.text.html.css.styl ...

  6. Linux系统多网卡绑定各配置模式详解

    Linux系统多网卡绑定各配置模式详解 1. 配置多网卡bond 1.1. mode=0 模式 1.2. mode=1 模式 1.2.1. 关闭NetworkManager服务 1.2.2. 网卡配置 ...

  7. java配置springmvc_Java方式配置Spring MVC

    概述 使用Java方式配置Spring MVC,以及回顾一下Spring MVC的各种用法. Spring MVC简述 关于Spring MVC的介绍网上有很多,这里就不再赘述了,只是要说一下,Spr ...

  8. C++中的两种绑定方式(静态绑定、动态绑定)

    两种绑定方式 静态绑定:在编译时刻,根据指针或引用变量的静态类型来决定成员函数属于哪一个类. 动态绑定:在运行时刻,根据指针或引用变量实际指向或引用的对象类型(动态类型)来确定成员函数属于哪一个类. ...

  9. spring mvc 的各种参数的绑定方式

    本文转自http://www.cnblogs.com/HD/p/4107674.html SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似): Controller代码 ...

最新文章

  1. 3维线程格 gpu_基于CUDA的GPU并行优化重力三维反演
  2. 为什么说特斯拉在自动驾驶上比Waymo更占优势
  3. Dell 原有PowerEdge 服务器型号获得通过 Red Hat Enterprise Linux 6 认证
  4. hadoop8088端口查看历史打不开,但是在虚拟机上可以打开的解决办法
  5. 你会怎样衡量你的产品? —— 一点产品数据分析的经验分享
  6. GPT-3诞生,Finetune也不再必要了!NLP领域又一核弹!
  7. 监听文本框数据修改,特别是微信等客户端直接选择粘贴修改
  8. 在ubuntu下安装Eclipse3.4+MyEclipse7.1
  9. 对战 | RabbitMq 大战 kafka
  10. 内网渗透中SSh的巧用
  11. 61.Linux/Unix 系统编程手册(下) -- SOCKET: 高级主题
  12. JSON对象按照ASCII对key值排序
  13. php在线售卡系统,云尚在线发卡系统PHP源码|专门为个人或小型企业提供在线售卡,订单处理系统...
  14. 浙江旅行新地标!图卷9号与法国著名建筑大师安东尼·贝叙共同打造
  15. Roman number -- 罗马数字
  16. Pycharm下载安装 以及配置python环境变量
  17. 如何建语料库_如何建设语料?
  18. 【图像增强】基于Frangi滤波器实现血管图像增强附matlab代码
  19. 2022,新的一年,加油
  20. 孤立词语音识别matlab,基于Matlab仿真的孤立词语音识别技术研究

热门文章

  1. Github上如何找到自己想要的开源项目(小技巧:精确搜索)
  2. 牛客小白月赛9: div.2 A(线性筛)
  3. Codeforces Round #518 (Div. 2): E. Multihedgehog(模拟)
  4. bzoj 1658: [Usaco2006 Mar]Water Slides 滑水(贪心)
  5. bzoj 3631: [JLOI2014]松鼠的新家(LCA+树上差分)
  6. 51nod-1366:贫富差距
  7. 凸包模板(分治 or Graham扫描法)
  8. Harris角点检测算法手动实现
  9. python列表(list)和元组(tuple)之间的转换
  10. C++ STL 遍历vector