繁体   English   中英

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

[英]Java - Exposing a DAO Class that implements an interface as a Web Service

我有这个项目,我想将DAO类公开为Web服务。 不幸的是,似乎无法公开实现接口 (或扩展抽象类)的类。 要求是Axis 1.4Tomcat 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转换为抽象类。 但是生成过程不会通过。 有没有人有类似的情况? 谢谢您的帮助。

这个答案有2分:

1)看看这个问题: 异常:AXIS引擎无法找到要调用的目标服务! targetService是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是一回事,Web服务是另一回事。
  • 您可以在Web方法中清楚地调用DAO。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM