新泽西码头上Android上抛出ContainerException:[否WebApplication的供应商是present" [英] Jersey on Jetty on Android throws ContainerException: "No WebApplication provider is present"

查看:180
本文介绍了新泽西码头上Android上抛出ContainerException:[否WebApplication的供应商是present"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在Android上运行码头新泽西州。

I'm trying to run Jersey on Jetty on Android.

我已经创建了一个实例化一个Servlet的新泽西州一个码头服务器一个Android。
反正当我开始Jetty和访问REST资源(在我的情况: http://192.168.1.12:8080/api/hello )我得到消息ContainerException:否WebApplication的供应商是present(见下面的异常堆栈跟踪)。

I've created an Android that instantiate a Jetty Server with a Jersey Servlet. Anyway when I start Jetty and visit a REST resource (in my case: http://192.168.1.12:8080/api/hello) I get a ContainerException with message: No WebApplication provider is present (see exception stack trace below).

任何想法,为什么?

我添加的javax包JNDI来,因为它是要求无论是码头或泽西项目。 Android不喜欢,所以我暂时使用--core库的命令行参数反正编译DEX文件imporitng的javax库。

I've added javax package JNDI to the project since it was required by either Jetty or Jersey. Android doesn't like imporitng javax libraries so I'm temporarily using the --core-library command line parameter to compile the dex files anyway.

异常跟踪:

com.sun.jersey.api.container.ContainerException: No WebApplication provider is present
at com.sun.jersey.spi.container.WebApplicationFactory.createWebApplication(WebApplicationFactory.java:69)
at com.sun.jersey.spi.container.servlet.ServletContainer.create(ServletContainer.java:391)
at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.create(ServletContainer.java:306)
at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)
at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:208)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556)
at javax.servlet.GenericServlet.init(GenericServlet.java:241)
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:444)
at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:335)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:523)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:479)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:483)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:965)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
at org.eclipse.jetty.server.Server.handle(Server.java:349)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:449)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:910)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:647)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:233)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:615)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
at java.lang.Thread.run(Thread.java:1019)

活动code:

public class StartServerActivity extends Activity {

private Server webServer;
private final static String LOG_TAG = "Jetty";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    System.setProperty("java.net.preferIPv4Stack", "true");
    System.setProperty("java.net.preferIPv6Addresses", "false");

    webServer = new Server(8080);

    ServletHolder servletHolder = new ServletHolder(ServletContainer.class);
    servletHolder.setInitParameter("com.sun.jersey.config.property.packages", "com.famenu.server.resources");
    servletHolder.setInitParameter("com.sun.jersey.config.property.resourceConfigClass", "com.sun.jersey.api.core.PackagesResourceConfig");
    ServletContextHandler servletContextHandler = new ServletContextHandler(webServer, "/api");
    servletContextHandler.addServlet(servletHolder, "/");


    webServer.setHandler(servletContextHandler);

    try {
        webServer.start();
        webServer.join();
        Log.d(LOG_TAG, "started Web server");

    }
    catch (Exception e) {
        Log.d(LOG_TAG, "unexpected exception starting Web server: " + e);
    }
}

}

我使用码头7.3.0.v20110203,新泽西州1.12,Android 1.6的

I'm using Jetty 7.3.0.v20110203 , Jersey 1.12 , Android 1.6

推荐答案

WebApplicationProviderImpl通过在新泽西州的server.jar META-INF /服务条目登记。任何你重新包装成新泽西州自己的罐子和机会错过了META-INF /服务项目?

WebApplicationProviderImpl is registered through META-INF/services entry in jersey-server.jar. Any chance you are repackaging Jersey into your own jars and missed the META-INF/services entries?

因此​​,要解决这个例外有必要从球衣核球衣服务器和新泽西州的servlet的META-INF /服务文件夹添加到APK的META-INF文件夹中。

So to solve this exception is necessary to add the META-INF/services folders from jersey-core jersey-server and jersey-servlet to the META-INF folder of the apk.

然后,你将无法使用Eclipse来部署,但下面的命令行可以工作:

Then you won't be able to use Eclipse to deploy but the following command line will work:

CD PROJECT_DIRECTORY

cd PROJECT_DIRECTORY

蚂蚁调试

ADB安装-r斌/ YOUR_PROJECT-debug.apk

adb install -r "bin/YOUR_PROJECT-debug.apk"

这篇关于新泽西码头上Android上抛出ContainerException:[否WebApplication的供应商是present"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆