EJB-REST-service liefert null-pointer-exception
Ich versuche, umzusetzen REST-service mit Resteasy und Jboss as7, habe ich session-bean, die Daten bekommt von der DB über DAO(es funktioniert auf JSF+managed bean), und ich möchte, um zu injizieren, dass die session-bean mit @EJB, aber es gibt null, mache ich etwas falsch?
MyRESTApplication.java:
public class MyRESTApplication extends Application {
private Set<Object> singletons = new HashSet<Object>();
private Set<Class<?>> empty = new HashSet<Class<?>>();
public MyRESTApplication(){
singletons.add(new TablesResource());
}
@Override
public Set<Class<?>> getClasses() {
return empty;
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}
TablesResource.java:
@Path("/RESTService")
public class TablesResource {
@EJB
private TablesSB tablesSB;
@GET
@Produces("application/xml")
@Path("/table")
public Tables getTable() {
return tablesSB.getTable(28);
}
}
session-bean:
@Stateless
@LocalBean
public class TablesSB {
@PersistenceContext
private EntityManager em;
private TablesDAO tablesDao;
private TablesDAOxml tablesDaoXml;
public TablesSB() {
}
@PostConstruct
public void init(){
//tablesDao = new TablesDAO(em);
tablesDaoXml = new TablesDAOxml();
}
public Tables getTable(int tableId) {
return tablesDaoXml.getTable(tableId);
}
...
}
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>BarBar</display-name>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>ws.MyRESTApplication</param-value>
</context-param>
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
</web-app>
stack trace:
20:59:06,820 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/BarBar].[Resteasy]] (http-localhost-127.0.0.1-8080-1) Servlet.service() for servlet Resteasy threw exception: org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException
at org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:76) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:212) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:149) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:372) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.0.6.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 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_45]
Caused by: java.lang.NullPointerException
at ws.TablesResource.getTable(TablesResource.java:30) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_45]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.7.0_45]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.7.0_45]
at java.lang.reflect.Method.invoke(Unknown Source) [rt.jar:1.7.0_45]
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:137) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:280) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:234) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:221) [resteasy-jaxrs-3.0.6.Final.jar:]
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356) [resteasy-jaxrs-3.0.6.Final.jar:]
... 19 more
- es ist ein Protokoll zum Zeitpunkt der Bereitstellung an .war-Datei (war die EJB ordnungsgemäß bereitgestellt) ?
- Ich bin mir nicht sicher, wie kann ich das überprüfen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Glaube ich, die Ursache davon ist, weil Sie mit RestEasy ausdrücklich. Es kann nicht Spritzen die EJB-weil Sie nicht wissen, über Sie. Können Sie versuchen Austausch der gesamten web.xml oben mit:
(d.h. ersetzt alle RestEasy Sachen mit den standard-servlet-mapping für die JAX-RS - siehe JAX-RS 1.1 Spezifikationen, ch. 2.3.2; natürlich ersetzen
yourcompany.yourpackage.MyRESTApplication
mit der realen voll quallified NamenMyRESTApplication
)Alternativ Anmerkungen application-Klasse mit
javax.ws.rs.ApplicationPath
und entfernen Sie alle relevanten Konfiguration von web.xml:Tipps von Nikos völlig wahr. Aber es ist merkwürdig, dass der code funktioniert für Sie.
In Ihrem code, den Sie erstellen Referenz TablesResource Klasse "manuell". Sie nennen Konstruktor explicit.
Klasse MyRESTApplication sollte geändert werden wie folgt. Der Punkt ist, zu zeigen, container, welche Klassen er verwenden soll. Und es hat zu nennen-Konstruktor(en) selbst.
(Ich hatte ähnliches problem und habe es gelöst mit den oben genannten änderungen. Das problem ist, der code automatisch generiert von Eclipse JBoss Tools "Create Sample RESTful-Dienst".)
Bitte hinzufügen bean.xml Datei im WEB-INF-Ordner und fügen Sie den untenstehenden code in bean.xml Datei.