В моем приложении у меня есть EntryServlet, который загружает данные по умолчанию и устанавливает безопасность на основе зарегистрированного идентификатора пользователя. Этот сервлет использует EJB через внедрение зависимостей. Он работает нормально, когда я выполняю его как обычное веб-приложение, но когда я пытаюсь протестировать приложение с помощью JSFUnit, ссылка на ejb в сервлете не вводится и является нулевой.
Мне нужно вызвать EntryServlet перед установкой сеанса JSF, так как он загружает данные, необходимые на страницах jsf.
Я называю это следующим образом
JSFUnit тестовый код
открытый класс VisitingScholarNewRequestTest расширяет org.apache.cactus.ServletTestCase {
public static Test suite() {
return new TestSuite( VisitingScholarNewRequestTest.class );
}
public void testSaveAsDraft() throws ServletException,IOException {
//Calling EntryServlet
JSFUnitEntryServlet entryServlet = new JSFUnitEntryServlet();
request.setAttribute("netid","KS2316");
entryServlet.doPost(request,response); -- this is giving an error.
// Send an HTTP request for the initial page
JSFSession jsfSession = new JSFSession("/faces/cardrequestcreate.xhtml");
// A JSFClientSession emulates the browser and lets you test HTML
JSFClientSession client = jsfSession.getJSFClientSession();
// A JSFServerSession gives you access to JSF state
JSFServerSession server = jsfSession.getJSFServerSession();
System.out.println("current view id :"+server.getCurrentViewID());
// Test navigation to initial viewID
assertEquals("/cardrequestcreate.xhtml", server.getCurrentViewID());
}
Код EntryServlet
открытый класс JSFUnitEntryServlet extends HttpServlet {
@EJB
частный MasterDataLocal masterDataFacade;
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
String netId = "";
try {
netId = (String)request.getAttribute("netid");
//Establish the portal connection for this user
masterDataFacade.reinstateUser(netId); -- The test is failing with a null pointer exception here.
Как я уже упоминал ранее, когда я запускаю приложение в браузере, оно работает нормально, и EJB внедряется в EntryServlet, но оно не внедряется, когда я запускаю набор тестов JSFUnit. По какой-то причине сервлет не выполняется в контейнере. Пожалуйста, помогите в этом отношении. Любая помощь будет принята с благодарностью
С уважением
Киран