[英]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.