簡體   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