2
我搜索並嘗試了幾個小時解決這個問題,不幸的是沒有成功。RESTEasy UnavailableException HttpServletDispatcher
我使用Java 1.6,RESTEasy 2.2.1.GA和Jetty嵌入式服務器來設置web服務。 最初我複製了一個現有的工作項目來設置這個項目。不知何故,原來的項目工作,我調整副本不工作。
啓動嵌入式服務器我得到下面的異常後:
這裏是控制檯說什麼:
2011-10-27 09:22:51.113::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
2011-10-27 09:22:51.141::INFO: jetty-6.0.2
2011-10-27 09:22:51.352::WARN: failed Resteasy
javax.servlet.UnavailableException: org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:78)
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:229)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:574)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:128)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1219)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:421)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:496)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:119)
at org.mortbay.jetty.Server.doStart(Server.java:228)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at com.xtag.locationadapter.webui.EmbeddedServer.main(EmbeddedServer.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
2011-10-27 09:22:51.398::WARN: Failed startup of context [email protected]{/admin,file:/Users/workspace/LocationAdapter/webui/target/classes/com/company/locationadapter/webui/webapp/}
javax.servlet.UnavailableException: org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:78)
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:229)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:574)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:128)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1219)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:421)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:496)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:119)
at org.mortbay.jetty.Server.doStart(Server.java:228)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at com.xtag.locationadapter.webui.EmbeddedServer.main(EmbeddedServer.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
2011-10-27 09:22:51.400::INFO: Started SocketConnector @ 0.0.0.0:8088
這是我的項目結構。請忽略的事實名稱WebUI中犯規適合該文件夾的內容:
LocationAdapter
- .idea
- .settings
- bin
- webui
|- src
|- main
|- java
|- com.company.locationadapter.communication.rest
|- ResteasyApplication.java
|- com.company.locationadapter.communication.restservices
|- LocationResource.java
|- LocationResourceImpl.java
|- com.company.locationadapter.service
|- LocationService.java
|- LocationServiceImpl.java
|- com.company.locationadapter.webui
|- EmbeddedServer.java
|- resources
|- com.company.locationadapter.webui.webapp
|- dummy.html
|- com.company.locationadapter.webui.webapp.WEB-INF
|- web.xml
我ResteasyApplication類:
public class ResteasyApplication extends Application {
@Override
public Set<Object> getSingletons() {
Set<Object> set = new HashSet<Object>();
set.add(new LocationResourceImpl());
return set;
}
@Override
public Set<Class<?>> getClasses() {
return super.getClasses();
}
}
我EmbeddedServer類:
public class EmbeddedServer {
private static final String WEBAPP = "com/company/locationadapter/webui/webapp";
private static final String CONTEXT_PATH = "/admin";
public static void main(String[] args) throws Exception {
addSystemProperties();
final Server server = new Server(8088);
final URL warUrl = EmbeddedServer.class.getClassLoader().getResource(WEBAPP);
final String warUrlString = warUrl.toExternalForm();
server.setHandler(new WebAppContext(warUrlString, CONTEXT_PATH));
server.start();
}
protected static void addSystemProperties() {
try {
Properties properties = new Properties(System.getProperties());
String path = System.getProperty("user.properties");
properties.load(new FileInputStream(new File(path)));
System.setProperties(properties);
} catch (IOException e) {
e.printStackTrace();
}
}
}
網絡。用於配置RESTEasy的xml:
<web-app>
<display-name>LocationAdapter</display-name>
<description>Company</description>
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/locationadapter</param-value>
</context-param>
<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.company.locationadapter.communication.rest.ResteasyApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</web-app>
我真的很感謝,如果有人有這個例外的想法或解決方案。 如果您需要更多信息,請讓我知道。
在此先感謝!