2013-03-08 130 views
0

我是新来的Web服务。我开发了一个示例Web服务,如下所示。Axis2 Web服务 - 版本

我试图在数据中添加一个新字段,比如boolean sucess;。 (只是为了学习向后兼容性)

当我添加新字段时,正如我预期服务调用失败客户端存根。

如何维护不同版本的服务。我有什么选择?

我已经通过网上很多文章了(可惜没有例子:()。而几个选项是

1)在类新的输出写入不同的操作。我明白了。

2)对服务进行版本控制。像服务/ VERSION1/SumAndMult,服务/ 版本2/SumAndMult

我如何实现第二个选项?这个选项背后的想法是什么?要维护服务类的副本?

如果我的服务器上只有一个服务类,如何显示多个wsdls?

此外,维护向后兼容性的最佳方法是什么?

public Data getSumAndMultData(int[] input){ 
    Data result = new Data(); 
    int sum = 0; 
    int mult = 1; 

    for(int i = 0; i < input.length; i++){ 
     sum += input[i]; 
     mult *= input[i]; 
    } 
    result.setMult(mult); 
    result.setSum(sum); 
    return result; 
} 
class Data{ 
    int sum; 
    int mult; 
    public int getSum() { 
     return sum; 
    } 
    public void setSum(int sum) { 
     this.sum = sum; 
    } 

    public int getMult() { 
     return mult; 
    } 
    public void setMult(int mult) { 
     this.mult = mult; 
    } 
} 

由于

回答

1

案例#2真的只是手段,有自己的WSDL添加新的Web服务。您可能会从旧的WSDL开始,进行所需的任何更改,然后将其发布到不同的服务名称下,以便通过不同的URL访问它。

使用Axis2,您可以将多个服务打包到同一个AAR中。在services.xml中,您将为每个服务定义一个<servicegroup><service>部分。所有这些服务都将使用相同的类加载器,并且可以访问同一组静态变量。

+0

非常感谢您的回复。我知道在service.xml中添加多个服务。您提到“使用自己的WSDL添加新的Web服务”。我应该用新的Response对象在服务器端创建一个新的服务类吗? – Jack 2013-03-11 06:56:47

+0

是的,您将为每项服务有不同的服务等级。 – Kenster 2013-03-11 15:17:09