2011-10-27 17 views
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> 

我真的很感謝,如果有人有這個例外的想法或解決方案。 如果您需要更多信息,請讓我知道。

在此先感謝!

回答

2

問題解決,異常是由POM.xml中的條目引起的,其中工件「resteasy-jaxb-provider」的範圍設置爲提供