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

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

      客户端引用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);的方法名可以解决该问题。

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

猜你喜欢

转载自lbxc.iteye.com/blog/1819775
今日推荐