Xfire的aegis绑定方式配置需要注意的问题
当遇到需要映射POJO或配置WebService接口方法返回类型(如集合类型,自定义对象类型)时,需要进行绑定,此时aegis的绑定为建立 xxxx.aegis.xml的文件(xxxx为对应的实体名,如User.aegis.xml)。
1 对于正常的String,int类型的数据,无需做特别说明就能映射。
2 对于Collection类型,需要如下配置:(例如User对象里包含一个roleList属性)
<property name="roleList" componentType="com.domain.Role" />
这是如果你的Role对象里都是基本数据类型,则可以不写Role.aegis.xml,但如果Role对象里也有其他类型的对象,则同样需 要配置Role.aegis.xml。
当然如果你不想映射roleList,可以这么配置(所以无需映射的属性都可以这样配置):
<property name="roleList" ignore="true" />
3 注意:对于一些非标准的写法需要做特殊处理。
例如:在User实体类里有一个方法getOrg(),返回Department对象,但是User实体里面并没有org属性(正因为如此,我称之为非标准写法),这个时候,如果不特殊处理,此处会出现如下异常:
java.lang.StackOverflowError
at com.ctc.wstx.sw.BaseNsStreamWriter.closeStartElement(BaseNsStreamWriter.java:387)
at com.ctc.wstx.sw.BaseNsStreamWriter.checkStartElement(BaseNsStreamWriter.java:436)
at com.ctc.wstx.sw.SimpleNsStreamWriter.writeStartOrEmpty(SimpleNsStreamWriter.java:257)
at com.ctc.wstx.sw.BaseNsStreamWriter.writeStartElement(BaseNsStreamWriter.java:318)
at org.codehaus.xfire.aegis.stax.ElementWriter.writeStartElement(ElementWriter.java:116)
at org.codehaus.xfire.aegis.stax.ElementWriter.<init>(ElementWriter.java:61)
at org.codehaus.xfire.aegis.stax.ElementWriter.getElementWriter(ElementWriter.java:161)
at org.codehaus.xfire.aegis.type.basic.BeanType.getWriter(BeanType.java:421)
at org.codehaus.xfire.aegis.type.basic.BeanType.writeObject(BeanType.java:386)
………………
此时你无法跟踪。
解决办法:在User实体里增加一个org属性,在User.aegis.xml里增加对org属性的配置就行了。
1 对于正常的String,int类型的数据,无需做特别说明就能映射。
2 对于Collection类型,需要如下配置:(例如User对象里包含一个roleList属性)
<property name="roleList" componentType="com.domain.Role" />
这是如果你的Role对象里都是基本数据类型,则可以不写Role.aegis.xml,但如果Role对象里也有其他类型的对象,则同样需 要配置Role.aegis.xml。
当然如果你不想映射roleList,可以这么配置(所以无需映射的属性都可以这样配置):
<property name="roleList" ignore="true" />
3 注意:对于一些非标准的写法需要做特殊处理。
例如:在User实体类里有一个方法getOrg(),返回Department对象,但是User实体里面并没有org属性(正因为如此,我称之为非标准写法),这个时候,如果不特殊处理,此处会出现如下异常:
java.lang.StackOverflowError
at com.ctc.wstx.sw.BaseNsStreamWriter.closeStartElement(BaseNsStreamWriter.java:387)
at com.ctc.wstx.sw.BaseNsStreamWriter.checkStartElement(BaseNsStreamWriter.java:436)
at com.ctc.wstx.sw.SimpleNsStreamWriter.writeStartOrEmpty(SimpleNsStreamWriter.java:257)
at com.ctc.wstx.sw.BaseNsStreamWriter.writeStartElement(BaseNsStreamWriter.java:318)
at org.codehaus.xfire.aegis.stax.ElementWriter.writeStartElement(ElementWriter.java:116)
at org.codehaus.xfire.aegis.stax.ElementWriter.<init>(ElementWriter.java:61)
at org.codehaus.xfire.aegis.stax.ElementWriter.getElementWriter(ElementWriter.java:161)
at org.codehaus.xfire.aegis.type.basic.BeanType.getWriter(BeanType.java:421)
at org.codehaus.xfire.aegis.type.basic.BeanType.writeObject(BeanType.java:386)
………………
此时你无法跟踪。
解决办法:在User实体里增加一个org属性,在User.aegis.xml里增加对org属性的配置就行了。