xfire 修改wsdl的参数名称
来源:互联网 发布:less.min.js 错误 13 编辑:程序博客网 时间:2024/06/05 03:50
Xfire的aegis绑定方式配置小结
最近正好在搞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
-type
componentType=
"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>
此时,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>
那么,何时会遇到类似于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的基本的学习的一个小结,所以没有太注重词语搭配,以看懂为主。。。有时间再来整理整理
- xfire 修改wsdl的参数名称
- xfire webservice wsdl 文件中字段名称修改
- 设置xfire webservice wsdl 文件中参数名称
- 修改wsdl中生成的参数
- XFire中的安全验证and自定义WSDL文档的参数名
- 如何让xfire wsdl文件输出的参数名不是in0
- xfire的Client的WSDL调用
- xfire中wsdl中参数为in0,in1解决方法
- xfire中wsdl中参数为in0,in1解决方法
- 使用spring集成xfire开发webservice接口时的namespace和参数名称等配置
- xfire+spring(ssh) 实现wsdl 的公网访问
- 一个根据wsdl生成xfire stub的应用问题
- webService-WSDL文件的修改
- 修改回收站的名称
- 主机名称的修改
- 修改项目的名称
- xfire 参数对象 命名空间的问题
- xFire两种客户端的传递参数
- ajax前端防范与js注入
- 告别cpp&h:hpp文件编写心得
- linux yum命令详解
- Unity3D-游戏架构脚本该如何来写
- scrollview的contentSize
- xfire 修改wsdl的参数名称
- ArcGIS教程:时态数据管理和可视化快速浏览
- 修改Oracle字符集
- JavaScript-4.2函数,变量作用域---ShinePans
- 使用 NDK r9 编译ffmpeg
- PHP session destroyed / lost after header
- 指针变量与++ --结合
- OJ(Online Judge)系统及ACM测试题库大全
- 黑马程序员——Java基础---GUI