我有这个项目,我希望将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
转换为抽象类。但是生成过程不会通过。
有没有人有类似的情况?谢谢你的帮助。
答案 0 :(得分:3)
这个答案有2分:
似乎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
}
我不知道如何扩大答案,请记住: