[英]Java - Exposing a DAO Class that implements an interface as a Web Service
我有这个项目,我想将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
转换为抽象类。 但是生成过程不会通过。 有没有人有类似的情况? 谢谢您的帮助。
这个答案有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
}
我不知道如何扩展答案,请记住:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.