私はのDAOインターフェイスにあるメソッドを使用しようとしています。私はサーブレットであっ呼んでいるとき、私はWebサービスJava EEでEJBを使用する方法
@WebServlet("/Index")
public class Index extends HttpServlet {
private static final long serialVersionUID = 1L;
//etc
@EJB
InterfacesDao dao;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//dao.getUsers(); //works well
//System.out.println(dao); //will print the dao object correctly
Boolean logged = dao.login("myLogin","mystrongpassword"); //works
request.setAttribute("logged",logged);
request.getRequestDispatcher("/jsp/login.jsp").forward(request, response);
}
//etc
}
をテストしかし、私はアヤックスを使用したいので、Webサービスで渡した場合、私は、例えば、何の問題もありません。 私は
@WebService
@Path("/users")
public class UserService {
@POST
@Path("/login")
@Produces("application/json")
public String login(@FormParam("login") String login, @FormParam("pwd") String mdp) {
return "Hello World" + login;
}
}
私がログインとPWDが含まれているJSONオブジェクトでhttp://[...]/rest/users/login
に行けば、私はHello World theloginientered
を取得するしかし、私は、私がしようとしたEJB
@WebService
@Path("/users")
public class UserService {
@EJB
InterfacesDao dao;
@POST
@Path("/login")
@Produces("application/json")
public String login(@FormParam("login") String login, @FormParam("pwd") String mdp) {
//System.out.println(dao); //dao null ?
//dao.getUsers(); //erros because dao null
Boolean logged = dao.login(login,pwd); //doesn't work
//I not arrive till here because NullPointerException error
return "Hello World" + login;
}
}
を使用する必要がありますをテストすることができます私のサーブレットに私のウェブサービスのDAOの参照を渡すことによってインスタンスが動作しませんでした 私はjをしようとしました私WebServiceの、コンストラクタ内のinitでUST 1 EJB、およびゲッターによって私サーブレットからそれを得るが、再びヌル
私はEJBの依存性注入のための設定を忘れてしまったが、だと思います私の中でサーブレット私はもはや少ないです。サーブレット
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.supinfo.interfaces.InterfacesDao;
インタフェースDAOウェブ側とEJB側
package com.supinfo.interfaces;
import java.util.List;
import javax.ejb.Remote;
import com.supinfo.entity.User;
@Remote
public interface InterfacesDao {
public boolean login(String login, String mdp);
public boolean signin(String login, String mdp);
public List<User> getUsers();
}
実装のための
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jws.WebService;
import javax.servlet.annotation.WebServlet;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import com.supinfo.interfaces.InterfacesDao;
import com.supinfo.servlet.Index;
インポートWebサービスのための
インポート
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import com.supinfo.database.PersistenceManager;
import com.supinfo.entity.User;
import com.supinfo.interfaces.InterfacesDao;
@Stateless
public class InterfaceDaoImpl implements InterfacesDao{
@Override
public List<User> getUsers() {
EntityManager em = PersistenceManager.getEntityManager();
Query query = (Query) em.createQuery("Select u FROM User u ");
List<User> persons = query.getResultList();
return persons;
}
@Override
public boolean login(String login, String mdp) {
EntityManager em = PersistenceManager.getEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> person = query.from(User.class);
query.where(cb.equal(person.get("login"), login)).where(cb.equal(person.get("mdp"), mdp));
List<User> persons = em.createQuery(query).getResultList();
//Boolean isEmpty = persons.isEmpty();
//return !(isEmpty == null ? false : isEmpty);
return !persons.isEmpty();
}
ありがとうございます
ありがとうございます。しかし、それは同じではありませんnullPointeur:StandardWrapperValve [Jersey Web Application]:サーブレットジャージーWebアプリケーションの例外を割り当てます。 java.lang.NullPointerException –
コードをimport文で更新し、InterfacesDaoクラスの定義を含めてください? – Dainesch
ok、ありがとうございました –