Java - 公开将接口实现为Web服务的DAO类

时间:2013-11-19 03:45:11

标签: java eclipse web-services axis dao

我有这个项目,我希望将DAO类公开为Web服务。不幸的是,似乎无法公开实现接口(或扩展抽象类)的类。 要求是 Axis 1.4 Tomcat 7 - 我正在使用IDE Eclipse

以下是界面IDAO.java

的一些内容
public interface IDAO<T> {

    public final static Connection connect = SQLiteJDBC.getInstance();

    public T find(long id);

    public Product[] findByName(String search);
}

然后来自ProductDAO.Java的一些代码(这是作为Web服务公开的类

public class ProductDAO implements IDAO<Product> {
    @Override
    public Product find(long id) {
        // TODO Auto-generated method stub
        // DB Query 
        return prod;
    }

    @Override   
    public Product[] findByName(String search) {
        // Database action
        // Retourne l'arraylist converti en array   
        return prods;
    }

}

然后我使用Eclipse内置的Bottom-up向导来生成Web服务。

但是当我在浏览器或eclipse web服务资源管理器中尝试使用公开的方法时,我收到了这个错误。

The AXIS engine could not find a target service to invoke! targetService is ProductDAO

我试图将IDAO转换为抽象类。但是生成过程不会通过。 有没有人有类似的情况?谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

这个答案有2分:

1)看看这个问题:exception: The AXIS engine could not find a target service to invoke! targetService is SecurityDepositServiceImpl

似乎Axis希望在URL中找到服务名称,仔细观察以输入对服务名称区分大小写的URL,并注意链接答案中指向的可能的尾部斜杠。

2)DAO模式中存在一个哲学问题:当您的应用程序访问外部数据源时,您可以使用DAO模式,这可以是一切:配置文件,数据库,外部服务...... 但这种说法是错误的:

  

“我想将DAO类公开为Web服务”

这不是使用DAO的正确方法:您不公开DAO,使用DAO界面访问外部数据

无论如何,如果您的应用程序是外部Web服务的 客户端 ,那么使用DAO模式提供允许您的业务对象的接口的正确情况访问该数据源(该Web服务)。

我建议您在Oracle文档中阅读有关DAO的非常有趣的内容:http://www.oracle.com/technetwork/java/dataaccessobject-138824.html

编辑:

为了澄清这是我期待的Java Axis服务的一个例子

public class ProductService {
  public int create(String name) {
    return new ProductDAO().add(name);
  }

  public List<Product> read() {
    return new ProductDAO().getAll();
  }

  //... and so on for the CRUD operations
}

我不知道如何扩大答案,请记住:

  • 您的DAO访问数据源(在本例中为您的数据库)。
  • Web服务公开方法。
  • DAO是一回事,网络服务是另一回事。
  • 您可以通过网络方式清楚地调用DAO。