2014-10-30 2 views
0

Annotation @EJB를 통해 Stateless EJB를 JAX-RS 웹 서비스에 삽입하려고합니다. 불행하게도 주입되는 EJB는 클래스 "RegistrationRest"를 참조 null이며,이 호출되고 NullPointerException이 발생합니다 :JAVA-EE7/javax.ws.rs : REST-Resource에서 EJB 주입

@Path("/database") 
@Stateless 
public class RegistrationRest { 
    @EJB 
    private DbDao dbDao; 

    @Path("getInfo/{name}") 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getInfoByName(@PathParam("name") String name { 
     TreeSet <String> ts = new TreeSet<String>(); 
     JsonGenerator json = new JsonGenerator().writeStartArray(); 

     // Lesen Info aus Datenbank 
     for(Persons person : dbDao.findInfoByName(name) { 
      ts.add(person.getName()); 
     } 
     // Schreiben der gefundenen Staedte in ein JSON 
     for(String name : ts) { 
      json.write(name); 
     } 
     // Rueckgabe der Daten als JSON 
     return json.writeEnd().toString(); 
    } 
} 

내 Webservice를이 일부로과 javax.ws.rs.core.Application를 통해 등록을 참조하십시오 http://netbeans.dzone.com/articles/how-to-combine-rest-and-ejb-31

"RestConfiguration"의 코드 :이 문서를 읽고 이해 한 바와 같이, 주입 된 EJB로

package net.service.rest; 
import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 
// other imports 

@ApplicationPath("/rest") 
public class RestConfiguration extends Application { 
    @Override 
    public Set<Class<?>> getClasses() { 
     return new HashSet<Class<?>>(Arrays.asList(RegistrationRest.class)); 
    } 
} 

는 웹 서비스/자원에 주입되는 EJB 방지 사실 될 수있는 인터페이스를 구현 그 인터페이스를 구현하는 EJB를 주입 할 수 없습니다 적혀있다 위의 문서에서

@Stateless(name = "DbDao") 
@Local 
public class DbDaoImpl implements DbDao { 
    private final String ENTITY_MANAGER = "mouPU"; 

    @PersistenceContext(unitName = ENTITY_MANAGER) 
    protected EntityManager em; 

    @Override 
    public List<Address> findInfoByName(final String name) { 
     @SuppressWarnings("unchecked") 
     List<Person> persons = em.createNamedQuery("findInfoByName").setParameter("name", name)).getResultList(); 
     return persons; 
    } 
} 

: 이름이 "DbDao"와 EJB로 0

는 내가 유지하고 싶은 인터페이스를 구현하는 DAO이다 . 나는 그것이 그렇게 상상할 수 없다, 또는 나는 내가 뭔가를 간과했다고 생각한다.

16:28:14,831 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/].[net.Bplace.mou.ui.rest.RestConfiguration]] (http--0.0.0.0-80-6) Servlet.service() for servlet net.Bplace.mou.ui.rest.RestConfiguration threw exception: org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException 
    at org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:340) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.SynchronousDispatcher.handleException(SynchronousDispatcher.java:214) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.SynchronousDispatcher.handleInvokerException(SynchronousDispatcher.java:190) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:540) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:502) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:119) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) [prettyfaces-jsf2-3.3.3.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] 
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final] 
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] 
    at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_11] 
Caused by: java.lang.NullPointerException 
    at net.Bplace.mou.ui.rest.RegistrationRest.getCityByCountryAndZipCode(RegistrationRest.java:100) [classes:] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_11] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.7.0_11] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.7.0_11] 
    at java.lang.reflect.Method.invoke(Unknown Source) [rt.jar:1.7.0_11] 
    at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:155) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:257) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:222) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:211) [resteasy-jaxrs-2.3.2.Final.jar:] 
    at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:525) [resteasy-jaxrs-2.3.2.Final.jar:] 
    ... 23 more 

당신이 도와 줄 수 : 여기

는 스택 트레이스입니까?

+0

'@ Local'대신 '@LocalBean'을 사용해 보셨습니까? –

+0

스택 트레이스가 있습니까? 제발, 우리에게 보여줘. –

+0

stacktrace를 보여주기 위해 제 질문을 편집했습니다. 오류의 주된 이유는 예외라고 생각합니다. org.jboss.resteasy.spi.UnhandledException : java.lang.NullPointerException. org.jboss.resteasy.core.ResourceMethod.invoke (ResourceMethod.java:222) [resteasy-jaxrs-2.3.2.Final.jar : – Pille

답변

3

이 시도 :

@ApplicationPath("/rest") 
public class RestConfiguration extends Application { 

    private Set<Class<?>> resources = new HashSet<Class<?>>(); 

    public RestConfiguration() { 
     resources.add(RegistrationRest.class); 
    } 

    @Override 
    public Set<Class<?>> getClasses() { 
     return resources; 
    } 

} 

당신의 web.xml이이 있는지 확인 : 마지막으로

<listener> 
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> 
</listener> 

을, 당신이 당신의 WEB-INF 폴더에 beans.xml 환경이 있는지 확인

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" 
     http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> 
</beans> 
+0

내 인터페이스에서 주석 로컬을 설명한 후 작동 해 주셔서 감사합니다. 그래서 해결책은 휴식 서비스를 위해 특별한 청취자 또는 서블릿을 설정하는 것이 었습니다. – Pille

+0

다행이었습니다! 후드에서 어떻게 작동하는지 모르겠지만 청취자가 있어야한다는 것을 알고 있습니다! – mendieta

관련 문제