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 时出错)
问啥我的web.xml一加Listener,启动tomcat就出错
在 tomcat 上部署 grails 应用程序时创建名为“transactionManagerPostProcessor”的 bean 时出错