我用XFire来建Web Serive, 能成功看到wsdl, 而且,能得到Web Service对象,
类型为PersistSerive, 实现 IPersistService接口, 其中有一个接口方法为: public void initPros(Map webDataMap);
在与IPersistService同一个包下,定义了IPersistService.aegis.xml文件
<?xml version="1.0" encoding="UTF-8"?> <mappings> <mapping > <method name="initPros"> <parameter index="1" componentType="java.util.Map"/> </method> </mapping > </mappings>
当我得到Service端的实现IPersistService接口的PersistService对象后, 就把一个client端的Map对象传入PersistService的initPros方法里面, 奇怪的是,这个Map各个key对应的对象,在传入
PersistService里面的initPros方法体后,就全为null了, 但根据打印出来的信息,这个Map在传入initPros之前, 是有值的.
我在debug模式下, 看到这个PersistService对象其实是被代理的, 现在我的问题应该怎么解决呢? 谢谢.
1 楼
dovecat
2007-03-21
terry_yip 写道
我用XFire来建Web Serive, 能成功看到wsdl, 而且,能得到Web Service对象,
类型为PersistSerive, 实现 IPersistService接口, 其中有一个接口方法为: public void initPros(Map webDataMap);
在与IPersistService同一个包下,定义了IPersistService.aegis.xml文件
当我得到IPersistService的Service对象后, 就把一个Map对象传入initPros方法里面, 奇怪的是,这个Map各个key对应的对象,在传入
PersistService里面的initPros方法体后,就全为null了, 但根据打印出来的信息,这个Map在传入initPros之前, 是有值的.
我在debug模式下, 看到这个PersistService对象其实是被代理的, 现在我的问题应该怎么解决呢? 谢谢.
你可以看看xfire的demo例如在book的demo中必须将map中的key类型和类型为PersistSerive, 实现 IPersistService接口, 其中有一个接口方法为: public void initPros(Map webDataMap);
在与IPersistService同一个包下,定义了IPersistService.aegis.xml文件
<?xml version="1.0" encoding="UTF-8"?> <mappings> <mapping > <method name="initPros"> <parameter index="1" componentType="java.util.Map"/> </method> </mapping > </mappings>
当我得到IPersistService的Service对象后, 就把一个Map对象传入initPros方法里面, 奇怪的是,这个Map各个key对应的对象,在传入
PersistService里面的initPros方法体后,就全为null了, 但根据打印出来的信息,这个Map在传入initPros之前, 是有值的.
我在debug模式下, 看到这个PersistService对象其实是被代理的, 现在我的问题应该怎么解决呢? 谢谢.
value类型也隐射出来:
<method name="getBooksMap"> <parameter index="0" keyType="java.lang.String" componentType="org.codehaus.xfire.aegis.type.basic.SimpleBean"/> <return-type mappedName="BookMap" keyType="java.lang.String" componentType="org.codehaus.xfire.demo.Book" /> </method>
2 楼
ecsoftcn
2007-03-21
如果你用的是JDK5.0以上版本,建议用泛型来解决这个问题,如:
public void initPros(Map<String,PersonVO> webDataMap);
3 楼
terry_yip
2007-03-21
谢谢以上的回复, 现在我的问题的核心是, 为什么,我的这个webDataMap对象, 在传入PersistService的接口方法initPros(Map webDataMap)之前, 打印出来的hashCode为-1669610917, 但在接口方法中, webDataWeb的hashCode变为0了,证明在方法中的对象,都不是原先传入的那个, 这个PersistSerivce对象是用Xfire建立的的web service来的.
4 楼
dovecat
2007-03-21
terry_yip 写道
谢谢以上的回复, 现在我的问题的核心是, 为什么,我的这个webDataMap对象, 在传入PersistService的接口方法initPros(Map webDataMap)之前, 打印出来的hashCode为-1669610917, 但在接口方法中, webDataWeb的hashCode变为0了,证明在方法中的对象,都不是原先传入的那个, 这个PersistSerivce对象是用Xfire建立的的web service来的.
...aegis中Map在网络传输的过程中会被序列化为entry对象(在xml文件中),entry对象又包含key对象和value对象(都在xml文件中有定义).你在客户端传输的map,到server端,会被反序列化为map(重新生成了),当然hashcode不一样(entry,key,value什么的也同样反序列最后组成Map).
5 楼
terry_yip
2007-03-21
dovecat 写道
aegis中Map在网络传输的过程中会被序列化为entry对象(在xml文件中),entry对象又包含key对象和value对象(都在xml文件中有定义).
你在客户端传输的map,到server端,会被反序列化为map(重新生成了),当然hashcode不一样(entry,key,value什么的也同样反序列最后组成Map).
你在客户端传输的map,到server端,会被反序列化为map(重新生成了),当然hashcode不一样(entry,key,value什么的也同样反序列最后组成Map).
谢谢, 但我还是不明白, 为何Map对象从客户端传到server端后, 里面的value全为null, 用过xfire的朋友请帮忙一下, 或者提示一下能从什么地方跟踪entry对象的内容.
6 楼
terry_yip
2007-03-25
搞了三天,还没有解决。
7 楼
terry_yip
2007-03-25
在只有做了一个最简化的工程,并打包上来,请大家帮我调试一下
8 楼
terry_yip
2007-03-25
http://www.plastics-daily.com/lib.rar , 这是所需的jar包,解压后,加到WEB-INF/classes下面,并加入eclipse的build-path中就可以了。
9 楼
jianfeng008cn
2007-03-25
不会是你本地lazyload了,快照时已load,发送时未load吧?
10 楼
dovecat
2007-03-26
...你是java ws call java ws还是java ws与.net交互啊?
11 楼
terry_yip
2007-03-26
jianfeng008cn 写道
不会是你本地lazyload了,快照时已load,发送时未load吧?
我在上面的那个工程中,没有用到hibernate
12 楼
terry_yip
2007-03-26
http://jira.codehaus.org/browse/XFIRE-161
据这个URL所述,有可能这是XFire的一个BUG.在上面只是写在XFire1.0中才有这个问题, 我用的是1.2.4版本
我刚才试过如果往一个List里面加入字符串,是能正确打印出来的,但Map就不行, 把Map对象加入List里面也不行.
或许也和JDK版本有关,我用的是JDK1.4, aegis文件定义的参数及返回类型, XFire应该是基于泛型来读取的.
据这个URL所述,有可能这是XFire的一个BUG.在上面只是写在XFire1.0中才有这个问题, 我用的是1.2.4版本
我刚才试过如果往一个List里面加入字符串,是能正确打印出来的,但Map就不行, 把Map对象加入List里面也不行.
或许也和JDK版本有关,我用的是JDK1.4, aegis文件定义的参数及返回类型, XFire应该是基于泛型来读取的.
13 楼
terry_yip
2007-03-26
dovecat 写道
...你是java ws call java ws还是java ws与.net交互啊?
是java ws call java ws