Java webservice客户端顶部的包装器

Java webservice客户端顶部的包装器,java,web-services,client,Java,Web Services,Client,我有一个返回webservice客户端的库 Client c=Clientlib.getclient() 现在我做的是在它上面创建一个包装: public class Myclient { private static Client c = ClientLib.getClient(); private static instance = new MyClient(); public static MyClient getInstance(){ return instance;

我有一个返回webservice客户端的库

Client c=Clientlib.getclient()

现在我做的是在它上面创建一个包装:

public class Myclient {

 private static Client c = ClientLib.getClient(); 
 private static instance = new MyClient();

 public static MyClient getInstance(){
  return instance;
 } 

 private Myclient(){
   //singleton
 }

 public Data getDate(Sting id){
  Data1 d1 = cleint.getData();
  convert d1 to Data and return data
 } 
}
这是正确的方法吗?我应该只创建一个
客户端的实例吗

这种方法会有问题吗?如果两个线程调用
getData
方法呢 同时这种情况很可能是因为这是一个基于web的应用程序


如果与服务器的连接断开并恢复,该怎么办?我认为这不应该是个问题,因为http是无状态的。

一般来说,我认为包装器是个好主意。您可以从webservice重建类,而不影响其余代码。还允许您执行缓存、安全性等其他操作

如果您打算将MyClient作为一个单例,那么Client c不需要是静态的。这不是一件大事,但值得一提

是否存在线程问题取决于ClientLib.getClient()的实现。您可能需要进行一些阅读,以了解是否允许以多线程方式访问它,或者是否应该验证同步。不过,通过包装客户端,您可以轻松地在一个位置同步访问。一般来说,Web服务应该可以从多个线程访问,它只是通过http进行的调用


我唯一能建议的另一件事是在MyClient上添加一个接口,以解耦使用该类的任何东西。使测试更加容易。

:感谢您的回复。我还有一个相关的问题。我有很多Web服务,每个服务提供不同类型的数据。因此每个包装器获取数据返回不同的bean。而且不同包装器的每个gedata接受不同类型的参数和不同数量的参数。因此我认为在base中提供抽象方法和每个包装器覆盖没有意义你能给出你的建议吗?不,我不认为一个简单的基类对你有任何好处。在编写代码时,您可能会看到值得考虑的常见问题。