当前位置: 首页 > 知识库问答 >
问题:

Netbeans 7.4 JAX-RS Servlet类

缑泓
2023-03-14

我正试图在NetBeans 7.4(今天发布)和GlassFish 4服务器下开发JAX-RS。

显然,NetBeans 7.4 应该使用 Jersey 2.0,但是在库下查看项目内的库 -

  • javax.servlet-api.jar
  • javax.ws.rs-api.jar

所以我不确定Jersey和服务器使用的是哪个版本。因此,第一个问题是:我是否需要在运行时使用与编译时相同的JAX-RS实现?我怎么知道我在NetBeans 7.4下使用的是什么版本?

现在使用com . sun . jersey . SPI . container . servlet . Servlet container作为web.xml内部的Servlet类返回

SEVERE:   WebModule[/TestApplication]Error loading WebappClassLoader (delegate=true; repositories=WEB-INF/classes/) com.sun.jersey.spi.container.servlet.ServletContainer

同时使用组织.玻璃鱼.泽西岛.spi.container.servlet.ServletContainer

SEVERE:   WebModule[/TestApplication]Error loading WebappClassLoader (delegate=true; repositories=WEB-INF/classes/) org.glassfish.jersey.spi.container.servlet.ServletContainer

所以第二个问题是:什么是正确的Servlet类?

在WEB-INF/lib下添加从https://jersey.java.net/download.html下载的泽西2.0库并使用后一个Servlet类会产生:

[2013-10-15T18:05:45.136+0200] [glassfish 4.0] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=35 _ThreadName=admin-listener(5)] [timeMillis: 1381853145136] [levelValue: 1000] [[
  Exception while loading the app : CDI deployment failure:WELD-001408 Unsatisfied dependencies for type [Ref<ContainerRequest>] with qualifiers [@Default] at injection point [[BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject org.glassfish.jersey.server.internal.routing.UriRoutingContext(Ref<ContainerRequest>, ProcessingProviders)]
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Ref<ContainerRequest>] with qualifiers [@Default] at injection point [[BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject org.glassfish.jersey.server.internal.routing.UriRoutingContext(Ref<ContainerRequest>, ProcessingProviders)]
        at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:403)
        at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:325)
        at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:177)
        at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:208)
        at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:519)
        at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:505)
        at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:480)
        at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:536)
        at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:216)
        at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
        at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:328)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:493)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
        at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:527)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:523)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:356)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:522)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:546)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1423)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1500(CommandRunnerImpl.java:108)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1762)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1674)
        at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
        at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
        at org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:297)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:246)
        at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
        at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
        at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
        at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
        at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
        at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
        at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
        at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
        at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
        at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
        at java.lang.Thread.run(Thread.java:722)
]]

编辑:

从 WEB-INF 中的 lib/ 文件夹中删除库(如米哈尔·加伊多斯所建议的那样)可以避免运行时错误。因此,网络.xml现在是

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>ServletAdaptor</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ServletAdaptor</servlet-name>
        <url-pattern>/webresources/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

然而,JAX-RS仍然不想启动,服务器日志上什么也没有显示。我还遗漏了什么指示吗?

撞!

共有2个答案

江文斌
2023-03-14

球衣2完全改变了工作方式见球衣部署文件CHPT 4。

首先,不再有web.xml配置,删除您在其中添加的所有内容,因为启动Jersey服务器不再需要它。你只需要添加

@ApplicationPath("webresources")
@Path("/people")
@Stateless
public class PersonResource extends Application
{
 ...
 @GET
    @Path("/getpeople")
    @Produces(
    {
        MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML
    })
  ...

如您所见,javax.ws.rs.ApplicationPath中定义的@ApplicationPath替代了先前的web xml根路径配置,Resource类必须扩展javax.ws.s.core.application中定义的应用程序。

就是这样,实际上NetBeans 7.4对此没有太大帮助,即使使用错误的web.xml也会编译,不幸的是没有任何提示。

茅涵映
2023-03-14

泽西岛 2.x 中正确的服务对象类是

org.glassfish.jersey.servlet.ServletContainer

更改<code>网站。xml来使用这一个,你应该没事了。

注意:您的应用程序不应该包含已经存在于GF类路径中的库(这可能会导致与您的类似的异常)。

 类似资料:
  • 本文向大家介绍请说说你熟悉的三个垂直社区或金融类 APP,并简述其典型用户画像。相关面试题,主要包含被问及请说说你熟悉的三个垂直社区或金融类 APP,并简述其典型用户画像。时的应答技巧和注意事项,需要的朋友参考一下 掌上生活、浦大喜奔、买单吧 金融类app用户首先是持有银行卡和智能手机的消费能力中上的人群。其次,因为金融类app多数被用于生活消费、查询账单、理财等功能,可以将其画像定义为:对理财和

  • 问题内容: 我是一个初学者,正在学习spring和hibernate(在项目中使用Maven),遇到了这个问题,被困在这里。试图找到解决方案,但最终无处可寻。请帮忙。非常感谢 错误:“找不到“http://java.sun.com/jsp/jstl/core ”的标记库描述符 码: 尝试了在Java构建路径中找不到超类“javax.servlet.http.HttpServlet”中给出的解决方案

  • 问题内容: 我在jsp页面中看到以下错误- 我看到了一篇关于此的文章,并尝试了一些建议的方法。BalusC提供了很好的输入- JSTL1.2和Standard.jar不能一起使用。我做到了,它解决了一段时间的问题- 但它再次出现。我不确定是否还有jar碰撞。我已经将所有jar定义为Maven中的依赖项。以下是我指定的依赖项pom.xml- 问题答案: 您将需要在项目中导入JSP API,而Serv

  • 问题内容: 我是使用库的新手,但是我需要能够向忘记密码的用户发送电子邮件。我正在尝试使用JavaMail和Apache Commons Email来实现这一点。但是,我认为我一定是错误地导入了库。 当我尝试发送电子邮件时,收到以下消息: 编码: 堆栈跟踪: 我已经尝试了几件事: 将包含所有.java文件的org.apache.commons.mail文件夹复制到我的netbeans项目的源文件中,

  • 问题内容: 您能否澄清一下,为什么在我们将 final 关键字设为不变时,为什么 在上课之前需要 final 关键字。我的意思是,如果我们将所有属性声明为私有和最终的,那么它也是一个不可变的类,不是吗? 很抱歉,这个问题似乎很简单,但是我对此感到非常困惑。帮帮我。 编辑:我知道一个声明为final的类不能被子类化。但是如果每个属性都是私有和final的,那有什么区别呢? 问题答案: 正如堆纸器所说

  • 问题内容: 我有一个蚀项目结构看起来像这样: 所有这些项目都是Maven项目。项目B是Eclipse WTP项目,包含项目A作为依赖项。我正在使用m2eclipse插件。 当我将项目B部署到Tomcat(全部从Eclipse中进行)时,总是会抛出错误,提示它无法从项目A中找到类。解决此问题的唯一方法是在Eclipse中 关闭 项目A并执行 mvn install 命令,因此,在这一点上,项目A就像

  • 问题内容: 假设我有一个包含许多公共方法的类: 现在,我想创建一个 包装器 类,该 包装器 类将所有方法委托给包装好的实例( 委托 ): 现在,如果MyClass有很多方法,我将需要重写它们中的每一个,这些方法或多或少与只是“委托”的代码相同。我想知道是否可以做一些魔术来自动调用Java中的方法(因此Wrapper类需要说“嘿,如果您对我调用方法,只需去 委托 对象并对其调用此方法)。 顺便说一句

  • 问题内容: 我的应用程序显示了许多自定义对话框,例如“是/否”或“接受/取消决定”,并且在编写代码时,我意识到遵循相同的模式重复了太多代码。 我想建立一个通用类,但我不知道该怎么做,或更确切地说,我不知道该怎么做(接口,抽象类,继承,静态类等)。 这是我目前的课程: } 这就是我需要使用此类时要做的事情: 我敢肯定它是可改进的,但是您怎么能做到呢? 谢谢 问题答案: 首先创建一个Base 来保持的