2013-11-19 4 views
1

У меня есть этот проект, где я хочу открыть класс DAO в качестве веб-службы. К сожалению, кажется, что класс, который реализует интерфейс (или расширяет абстрактный класс), не может быть раскрыт. Требования: Axis 1.4, Tomcat 7 - И я использую IDE Eclipse.Java - Предоставление класса DAO, который реализует интерфейс как веб-службу

Вот немного интерфейса 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 (Это класс, который подвергаясь в качестве веб-службы)

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 для создания веб-службы.

Но когда я пытаюсь разоблачить методы в браузере или в проводнике веб-службы eclipse, я получаю эту ошибку.

The AXIS engine could not find a target service to invoke! targetService is ProductDAO

Я попытался преобразовать IDAO в абстрактном классе. Но процесс генерации не пройдет. У кого-то была похожая ситуация? Спасибо за помощь.

+0

убедитесь, что URLMapper не хватает ... – Imran

+0

Извините, ребята, хотя я знаю Java. Веб-службы для меня новы. Будучи учебным проектом, не стесняйтесь предлагать лучший дизайн, лучший способ делать вещи ... – zwan

ответ

3

2 очка в этом ответе:

1) Взгляните на этот вопрос: exception: The AXIS engine could not find a target service to invoke! targetService is SecurityDepositServiceImpl

Кажется, что ось рассчитывают найти имя службы в URL, смотреть внимательно, чтобы ввести URL существо дела -чувствительно к имени службы и следить за возможной конечной косой чертой, указанной в связанном ответе.

2) В шаблоне DAO есть философский вопрос: вы используете шаблон DAO, когда ваше приложение получает доступ к внешнему источнику данных, и это может быть все: файлы конфигурации, базы данных, внешние службы ... Но это утверждение неправильно:

"I want to expose a DAO Class as a web service"

это не правильный способ использовать DAO: не подвергать DAO, вы используете интерфейс DAO для доступа к внешним данным.

В любом случае, если ваше приложение клиента внешнего веб-сервис, то это правильная ситуация, чтобы использовать DAO шаблон для обеспечения интерфейса, который позволит вашему бизнесу-объект для доступа к этому источнику данных (что сеть оказание услуг).

Я предлагаю вам очень интересно читать о DAO в документации Oracle: http://www.oracle.com/technetwork/java/dataaccessobject-138824.html

EDIT:

Чтобы уточнить это пример сервиса Java Ось Я ожидаю

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 доступ к источнику данных (в данном случае ваша база данных).
  • веб-сервис выставляет метод.
  • DAO - это одно, веб-сервис - это еще одна вещь.
  • Вы можете четко называть свой DAO в своем веб-методе.
+0

Я видел другой вопрос, с которым вы связались, но это не решило мою проблему. Собственно, это серверная сторона: моя DAO работает (CRUD) с данными из базы данных и передает ее на прикладной уровень. Теперь, когда я хочу разоблачить это, я подумал, что могу напрямую разоблачить класс DAO, так как webservice будет выполнять те же операции CRUD ... – zwan

+0

Но это ошибка дизайна: вы правильно используете свой DAO для получения данных из БД, но неправильно привязывать его к интерфейсу WS! На самом деле ваш интерфейс WS - это ** НЕ ** интерфейс DAO. Поэтому просто вызовите операцию DAO CRUD в методе, который вы собираетесь выставить. – thermz

+0

Спасибо за ваши усилия! Но можете ли вы быть более ясными? на этом 'На самом деле ваш WS-интерфейс НЕ является интерфейсом DAO'. Моя проблема в том, что я не могу вызывать методы ProductDAO из WS client. Я получаю ошибку. Механизм AXIS не смог найти целевую службу для вызова! targetService - ProductDAO' – zwan

Смежные вопросы