Tomcat 创建 Web 服务时出错

Posted

技术标签:

【中文标题】Tomcat 创建 Web 服务时出错【英文标题】:Error in tomcat in creation of web service 【发布时间】:2013-12-13 04:37:46 【问题描述】:

我通过在eclipse juno中使用Axis 2使用自下而上的方法创建了两个数字Web服务的简单相加。Web服务正常工作并通过soa客户端mozilla扩展进行了正确测试,但tomcat中有错误。请通过以下错误

计算器服务无效,导致

java.lang.NoClassDefFoundError: javax/ws/rs/Produces
    at org.apache.axis2.jaxrs.JAXRSUtils.getClassModel(JAXRSUtils.java:53)
    at org.apache.axis2.description.java2wsdl.DefaultSchemaGenerator.generateSchema(DefaultSchemaGenerator.java:272)
    at org.apache.axis2.deployment.util.Utils.fillAxisService(Utils.java:468)
    at org.apache.axis2.deployment.ServiceBuilder.populateService(ServiceBuilder.java:388)
    at org.apache.axis2.deployment.repository.util.ArchiveReader.buildServiceGroup(ArchiveReader.java:101)
    at org.apache.axis2.deployment.repository.util.ArchiveReader.processServiceGroup(ArchiveReader.java:178)
    at org.apache.axis2.deployment.ServiceDeployer.deploy(ServiceDeployer.java:82)
    at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136)
    at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:813)
    at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144)
    at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:377)
    at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:254)
    at org.apache.axis2.deployment.DeploymentEngine.loadServices(DeploymentEngine.java:142)
    at org.apache.axis2.deployment.WarBasedAxisConfigurator.loadServices(WarBasedAxisConfigurator.java:283)
    at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:95)
    at org.apache.axis2.transport.http.AxisServlet.initConfigContext(AxisServlet.java:584)
    at org.apache.axis2.transport.http.AxisServlet.init(AxisServlet.java:454)
    at org.apache.axis2.webapp.AxisAdminServlet.init(AxisAdminServlet.java:60)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.Produces
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
    ... 30 more

[INFO] org.apache.axis2.deployment.DeploymentException: java.lang.NoClassDefFoundError: javax/ws/rs/Produces
[INFO] Deploying Web service: version.aar - file:/M:/mahesh/work/javaws1/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Calc/WEB-INF/services/version.aar
[WARN] No transportReceiver for org.apache.axis2.transport.http.AxisServletListener found. An instance for HTTP will be configured automatically. Please update your axis2.xml file!

【问题讨论】:

计算器服务无效,您的格式也无效,请尝试改进它 对不起我的格式。我会努力改进它。请帮帮我。 为什么我得到以下错误,因为计算器服务正常工作并且客户端也收到正确的结果。 Calculator 服务无效,导致 java.lang.NoClassDefFoundError: javax/ws/rs/Produces 【参考方案1】:

尝试删除 Axis2 服务类中的注释。在我们的例子中,删除 @Deprecated 解决了这个错误。

【讨论】:

【参考方案2】:

Tomcat 只是一个 servlet 容器和 AFAIK,它默认不支持任何类型的 Web 服务。

您必须在 WEB-INF/lib 中有所需的库或将其添加到 tomcat lib 文件夹并使用它。

您收到 ClassNotFoundException,因为在类路径中找不到 javax/ws/rs/Produces。

将 REST 实现(例如:Jersey)部署到服务器库并重新启动服务器。

【讨论】:

我没有使用 rest api。对于 web 服务我使用 Axis2。 不管webservices实现如何,如果你使用除了基本的servlet和jsp之外的任何技术,你必须将库提供给tomcat。这清楚地反映在错误消息中,因为错误是 ClassNotFoundException。 对我来说也一样,因为我使用的是 SOAP ws,那么为什么我们会遇到这个错误。有人吗? 将所需的 jars 添加到您的 WEB-INF/lib 或 tomcat lib 文件夹中。 @AbhijithNagarajan :- 我将 jsr311-api-0.10 添加到我的 lib 文件夹中。现在错误变成了无效的 Calc 服务,导致两个服务不能具有相同的名称。具有 calc [file:/M:/mahesh/work/javaws/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/Calc/WEB-INF/services/Calc/] 名称的服务系统中已经存在。 org.apache.axis2.AxisFault:两个服务不能同名。具有 calc [file:/M:/mahesh/work/javaws/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/Calc/WEB-INF/services/Calc/] 名称的服务系统中已经存在。

以上是关于Tomcat 创建 Web 服务时出错的主要内容,如果未能解决你的问题,请参考以下文章

创建包含方法的 Web 服务时出错返回 ArrayList 类型

创建 ApplicationContext.xml 中定义的 bean 时出错

在新服务器上启动 grails 应用程序时出错(创建名称为“sessionFactory”的 bean 时出错)

在tomcat中启动我的应用程序时出错

问啥我的web.xml一加Listener,启动tomcat就出错

在 tomcat 上部署 grails 应用程序时创建名为“transactionManagerPostProcessor”的 bean 时出错