xfire发布ws服务-同名函数问题

客户端引用xfire的服务的时候,调用方法时出现错误:

Exception in thread "main" org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. 
Nested exception is org.codehaus.xfire.fault.XFireFault: Index: 2, Size: 2  

发布的接口服务如下:

public interface TestService{  
      
    public Object query(String p1, String p2, String p3);  
  
    public Object query(String p1, String p2, byte[] p3);  
      
    public Object query(String p1, String p2, byte[] p3, byte[] p4);  
      
    public Object query(String p1, String p2);  
}  
引用服务的时候,接口用的旧接口,没有 public Object query(String p1, String p2);方法。调用的过程如下:

Service serviceModel = new ObjectServiceFactory()  
 .create(TestService .class);  
  
XFire xfire = XFireFactory.newInstance().getXFire();  
 XFireProxyFactory factory = new XFireProxyFactory(xfire);  
  
 TestService service = (TestService ) factory  
 .create(serviceModel,"http://localhost:8081/services/dataServiceFacade");  
 CommonResult c = service.query("p1","p2", "p3".getBytes());  

通过url访问http://localhost:8080/services/testService?wsdl的时候,发现xfire对同名方法有自己的排序规则,新增方法前和新增方法后的非新增方法的排序不同,导致调用方法的时候,无法定位到正确的方法上。也就是说对以前的接口是不兼容的。

修改public Object query(String p1, String p2);的方法名可以解决该问题。

所以建议接口中最好不要有同名方法,以减少这种错误的发生。

这个设计很坑爹!


备注: 如果调用方和被调用方的接口的版本一致的情况下不会发生以上错误。也就是说添加相同命名的方法存在向下不兼容的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值