关于ws接口调用时无法传递数据类型参数的解决方案

4年前

关于ws接口调用时无法传递数据类型参数的解决方案
问题描述:
在全友BCS系统中,通过包装逻辑流的方式开发一系列WS接口,在第三方应用调用这些接口的时候,发生以下问题
1、第一次调用的时候,接口无法连通,调用方直接报错,在逻辑流上打的调试断点无法进入。清理掉EOS的缓存后,调试可以进入逻辑流。
2、调用WS时传入的参数为数据实体,在逻辑流中调试时,无法得到传入的参数,为null。但这种现象不是每次都会发生,而是无规律地间断发生。
3、当接口部署在TOMCAT下时,清理掉缓存后,接口可以调通;当接口部署在JBOSS下,不管怎么样清理缓存,都无法调通接口。

分析问题:
1、在本机上搭建了同样的环境,导入代码,重现了问题。
2、清理过缓存后,接口调用成功,数据实体参数能够成功传递;但是在重启tomcat后,接口调用不成功,数据实体得到null。经验排查,可能是因为服务器启动的过程中,构建包加载顺序
导致的问题,致使数据实体反序列化和序列化失败。
3、定位出问题的接口中作为参数数据实体,发现在另外一个构建包中,另外一个接口也使用了同名的数据实体。初步判断是资源冲突导致数据实体反序列化和序列化失败。
4、将含有冲突实体的构建包删除,再测试,发现正常。
5、测试更多的类似接口,无论是部署在tomcat下面,还是部署在jboss下面,均没有发生相同的问题,调用正常。


解决方案:
终上所述,在遇到类似的问题时,在同一个工程下面,使用数据实体名称搜索,查找其他地方的引用。如果发现其他的接口也引用了该数据实体,有可能导致数据实体序列化和反序列化失败,
这种情况下,可以对别的WS中的数据实体改名,避免冲突。



COMMENTS

需要 后方可回复
如果没有账号可以 一个帐号。