`
liuxiang_eyes
  • 浏览: 7885 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Xfire的aegis绑定方式配置小结

    博客分类:
  • Java
阅读更多

首先说明,aegis为XFire默认的绑定方式,何时需要绑定?

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

1.当封装的接口类中,某方法返回集合类型时,aegis的绑定方式:

例如,需要将以下接口封装

代码

 

 

  1. public interface UserInfo {   
  2.   
  3.     public User findUserInfosByUserID(String userUniqueID);   
  4.     public String test();   
  5.     public Collection findRoleInfosByUserID(String userUniqueID);   
  6.     }   
  7.   

 

观察此接口,受限我们看findRoleInfosByUserID方法,此方法传入String,返回类型为Collection,此时,我们即需要配置findRoleInfosByUserID方法。

配置步骤,在接口类的同一包下建立和接口名相同的aegis.xml文件,即UserInfo.aegis.xml文件。

UserInfo.aegis.xml

代码

 

 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <mappings>  
  3.     <mapping>  
  4.         <method name="findRoleInfosByUserID">  
  5.             <return-type  
  6.                 componentType="com.tongtech.bjvsp.sysmng.entity.Role" />  
  7.         </method>  
  8.     </mapping>  
  9. </mappings>  
  10.   

 

其中,method代表需要配置的方法名,由于XFire可以支持基本类型,针对集合类型时,需要配置,返回类型或参数类型为基本类型时不需要特殊配置。

<return-type/>为配置返回类型,componentType属性代表返回的集合中所包含的类,此类可以是自定义的对象,也可以是基本类型,例如java.lang.String

此时,findRoleInfosByUserID方法配置完毕

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

代码

 

 

  1. <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代码如下:

代码

 

 

  1. public class User  implements java.io.Serializable {   
  2.   
  3.     // Fields       
  4.   
  5.      private Integer userId;   
  6.      private String loginName;   
  7.      private String userPassword;   
  8.      private Integer SOrder;   
  9.      private String userCa;   
  10.      private String userName;   
  11.      private String userTel;   
  12.      private String userEmail;   
  13.      private String ZNote;   
  14.      private String userCode;   
  15.      private DicSystemAuth SDicSystemAuth;   
  16.      private Set SGroupUsers = new HashSet(0);   
  17.      private Set SUserDepts = new HashSet(0);   
  18. }   

 

此时User中还包含有SDicSystemAuth的对象,以及SUserDepts等Set集合

这种情况主要可能会出现在使用Hibernate,映射一对一,一对多表时

这里要特别注意

那么此时我们需要对User进行aegis绑定,控制POJO和XML的映射

配置方法:

在User对象所在包内建立User.aegis.xml

由于User中包含Set,那么只需要对集合做设置即可,DicSystemAuth下面单独讨论

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

1,

代码

 

 

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

 

此时,配置文件中配置了两个Set集合,componentType明确定义了Set集合内包含的内容

此时,DicSystemAuth即便是自定义的对象类,由于不是集合,XFire也可以对其正确映射。

2

代码

 

 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <mappings xmlns:my="http://my.bjvsp.tongtech.com">  
  3. <mapping name="my:User">  
  4.   
  5. <property name="SGroupUsers" ignore="true"/>  
  6. <property name="SUserDepts" ignore="true"/>  
  7. <property name="SDicSystemAuth" ignore="true"/>  
  8. </mapping>  
  9. </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

分享到:
评论

相关推荐

    spring远程调用和xfire aegis 源代码上传

    4. **Aegis绑定器**:Aegis是XFire的一部分,它负责将Java对象序列化和反序列化为XML。Aegis绑定器允许你在不使用XML Schema的情况下,直接将普通的Java对象转换为Web服务消息,反之亦然。这极大地提高了开发效率,...

    xfire-aegis-1.2.6.jar

    xfire-aegis-1.2.6.jar

    webservice.jar中的xfire-aegis-1.2.6.jar

    webservice中用到的jar,xfire-aegis-1.2.6.jar

    XFire在MyEclipse中配置图文讲解

    ### XFire在MyEclipse中配置详解 #### XFire与MyEclipse的融合:搭建高效Web Service开发环境 XFire是一款高性能的Java SOAP框架,以其轻量级、易用性及对多种标准的支持(如JAXB、XMLBeans、Java5和JAX-WS等)而...

    webservice数据传输方式Xfire

    此外,Xfire还支持Aegis绑定,这是一种直接将Java对象序列化为XML和反序列化的机制,减少了数据转换的中间步骤,从而提高了性能。 Xfire的主要功能包括: 1. **服务生成**:Xfire可以自动从Java类生成Web服务接口...

    xfire-1.2.6

    xfire-aegis-1.2.6.jar xfire-annotations-1.2.6.jar xfire-core-1.2.6.jar xfire-java5-1.2.6.jar xfire-jsr181-api-1.0-M1.jar xfire-spring-1.2.6.jar xfire-xmlbeans-1.2.6.jar xstream-1.3.1.jar

    xfire依赖jar包

    2. **xfire-aegis**: Aegis绑定器是xfire的一个组件,它允许直接在Java对象上进行SOAP绑定,无需编写额外的接口或类。Aegis使用了XFire的代码生成器,可以自动生成WSDL(Web服务描述语言)文档。 3. **xfire-...

    XFire-WebServices傻瓜配置.doc

    XFire提供了简洁的API和XML绑定,使其成为开发人员构建基于SOAP的服务的理想选择。在本文档中,我们将探讨如何在Eclipse环境下配置和使用XFire来创建和测试Web服务。 ### 一、开发环境准备 1. **Eclipse-SDK-3.3-...

    XFire容易配置出现的几个异常信息

    XFire依赖于XML配置文件来定义服务和绑定。如果XML文件格式错误,或者缺少必要的元素,可能会抛出解析异常。检查XML文件的语法,确保所有的标签都正确关闭,属性值引号完整,且遵循XML规范。 3. **网络异常**: ...

    Spring + Xfire + 注解方式

    标题 "Spring + Xfire + 注解方式" 指向的是一个关于整合Spring框架与Xfire服务框架,并利用注解进行配置的教程。这个主题涵盖了Java企业级开发中的服务集成和简化配置两个重要方面。 首先,Spring是一个广泛使用的...

    spring+xfire( 编写webservice完整配置+案例)

    总之,Spring与XFire的结合提供了一种简洁、灵活的方式来创建和管理Web服务,使得开发者可以专注于业务逻辑,而不是底层的协议细节。虽然现在Spring社区更倾向于使用Spring-WS或其他现代的Web服务框架,如Apache CXF...

    相关文档

    4. "Xfire的aegis绑定方式配置小结.doc" - Xfire的aegis绑定方式是它的一种数据绑定机制,可能用于将Java对象直接映射到XML或其他格式的数据。文档可能总结了如何配置和使用这种绑定方式,包括相关的XML配置、注解的...

    XFire用户库包-开发WebServices服务

    解压缩后,你会看到诸如xfire-核心库、xfire-xmlbeans库、xfire-aegis库等文件,这些库分别提供了XFire的核心功能、XMLBeans绑定支持以及Aegis数据绑定框架。 创建用户库是使用XFire的第一步。在你的开发环境中,如...

    xfire中对集合的配置

    Xfire通常通过XML配置文件来定义服务、端点、绑定和消息处理器。在这个过程中,集合配置可能会出现在这些XML文件中,用于定义一组服务或参数。例如,你可以创建一个包含多个服务接口的List,然后在Xfire配置中引用这...

    Web服务中XFire的配置和在客户端的配置,图解说明

    Web服务中XFire的配置和在客户端的配置,图解说明Web服务中XFire的配置和在客户端的配置,图解说明Web服务中XFire的配置和在客户端的配置,图解说明Web服务中XFire的配置和在客户端的配置,图解说明Web服务中XFire的...

    嵌入式Xfire(Webservice )

    Xfire集成了多种技术,如Aegis绑定、SOAP处理和WSDL支持,使得开发人员能够轻松地创建、部署和使用Web服务。这篇博客文章可能详细介绍了如何利用Xfire来实现这一目标。 首先,我们要理解Xfire的核心组件——xfire-...

    spring和xfire配置

    在这里,我们指定了两个配置文件的位置:一个是XFire自身的配置文件`xfire.xml`,位于类路径下的`org/codehaus/xfire/spring`目录;另一个是应用的主配置文件`applicationContext.xml`,位于`/WEB-INF`目录下。 ```...

    xfire 所有JAR包

    - **xfire-aegis-1.2.6.jar**:Aegis绑定是XFire的一种数据绑定机制,能够将Java对象直接映射到XML,简化了数据交换的过程。 - **xfire-generator-1.2.6.jar**:代码生成器,可以自动生成基于WSDL的服务端和客户端...

    Spring+xFire+wss4j配置Helloworld完整Demo.rar

    标题中的"Spring+xFire+wss4j配置Helloworld完整Demo"揭示了这是一个关于整合Spring框架、xFire(现称为Apache CXF)和WSS4J的安全Web服务示例项目。这个项目旨在帮助开发者理解如何在Spring环境中配置并实现一个...

    WebService--xfire中对集合的配置和操作

    总之,"WebService--xfire中对集合的配置和操作"这个主题涵盖了如何在XFire框架下处理集合类型的数据,包括配置服务、绑定集合类型、序列化与反序列化以及测试这些设置。理解这些概念对于开发基于XFire的Web服务至关...

Global site tag (gtag.js) - Google Analytics