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

无法在Apache Tomcat上运行JAX-WS Java Web服务

韩刚洁
2023-03-14

我的任务是编写一个Java web服务,在我们的企业环境中集成两个不同的系统。由于我实际上是一个经验丰富的C#.NET MVC开发人员,并且只认为自己是Java中级,所以我开始搜索“Java Web服务教程”。我正在尝试运行这个普通教程,但由于HTTP 404错误,我无法运行教程服务。

我使用的是Netbeans 8.0.2中的Java Web应用程序模板。我使用JDK 1.6.0.25来编译教程(因为我需要编写的最终服务将需要这个Java版本与我将要使用的其他一些JAR兼容)。一切都编译成一个WAR文件就可以了。

然后,我通过加载服务器的Tomcat Manager GUI并使用WAR file to deploy特性来部署WAR文件。当我这样做时,将复制WAR文件,并启动应用程序。但是,当我试图通过教程中的链接“http://localhost:8080/HelloWorld/Hello”访问服务时,服务返回一个404错误。

    null

就像在Linux服务器上一样,我的本地Tomcat服务器无法启动教程。手动单击start command链接会给出消息“Fail-Application at context path/com.mkyong.ws不能启动”。我的本地服务器日志也没有显示任何关于该应用程序无法启动的信息。

根据上面提到的教程的第5节,我将指定的JAR文件添加到服务器的{$Tomcat}/lib文件夹中,并重新启动服务器。这一次,应用程序启动了,但我仍然无法访问服务。教程中的链接“http://localhost:8080/helloworld/hello”返回一个404错误。我甚至尝试将整个JAX-WS RI/LIB文件夹复制到{$Tomcat}/LIB目录中而不做任何更改,因此我取消了此更改。

下面是我复制的文件列表,以供参考:

    null

以下是我查看过的其他一些StackOverflow帖子和网站,但没有找到解决方案:

  • Tomcat服务器上的JAX-WS(不适用)
  • 将JAX-WS webservice部署为Apache Tomcat中的War(类似于教程中建议复制额外的JAR文件)
  • Apache Tomcat中的JAX-RPC/JAX-WS运行时(仅提供信息)
  • 如何将jax-ws服务部署到eclipse或Tomcat?(与教程中建议复制额外的JAR文件类似)
  • https://myarch.com/create-jax-ws-service-in-5-minutes/(与教程类似,但没有部署帮助)
  • 教程中的代码有问题吗?(似乎不太可能,因为从评论来看,其他人已经取得了成功。)
  • 他在教程中使用的Java或Tomcat版本有显著差异吗?(他没有给出Java或Tomcat的版本。)
  • 应该针对JDK而不是JRE运行本地Tomcat吗?
  • 教程应该与Tomcat使用的JDK相同吗?(我希望不是这样,因为这看起来很有局限性……)
  • 我甚至可以在Tomcat中运行JAX-WS吗?(基于http://tomee.apache.org/apache-tomee.html这样的页面,基本的TOmcat可能甚至不支持JAX-WS?还是那句话,这只是我有限的经验。)

显然,Tomcat不会完全刷新其日志消息,直到服务关闭时线程关闭(可能是由于日志配置)。因此,我停止了刷新日志文件的服务。以下是catalina.log文件的全部内容(其中确实包含对com.mkyong的引用):

Aug 17, 2015 9:51:17 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.19.
Aug 17, 2015 9:51:17 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Aug 17, 2015 9:51:19 PM org.apache.coyote.http11.Http11AprProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-1985
Aug 17, 2015 9:51:19 PM org.apache.coyote.ajp.AjpAprProtocol init
INFO: Initializing Coyote AJP/1.3 on ajp-8009
Aug 17, 2015 9:51:19 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 2121 ms
Aug 17, 2015 9:51:19 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Aug 17, 2015 9:51:19 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.24
Aug 17, 2015 9:51:19 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor com.mkyong.ws.xml
Aug 17, 2015 9:51:20 PM com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized
INFO: WSSERVLET12: JAX-WS context listener initializing
Aug 17, 2015 9:51:22 PM com.sun.xml.ws.transport.http.servlet.WSServletDelegate <init>
INFO: WSSERVLET14: JAX-WS servlet initializing
Aug 17, 2015 9:51:22 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor host-manager.xml
Aug 17, 2015 9:51:22 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor manager.xml
Aug 17, 2015 9:51:22 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory docs
Aug 17, 2015 9:51:22 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory examples
Aug 17, 2015 9:51:22 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory ROOT
Aug 17, 2015 9:51:22 PM org.apache.coyote.http11.Http11AprProtocol start
INFO: Starting Coyote HTTP/1.1 on http-1985
Aug 17, 2015 9:51:22 PM org.apache.coyote.ajp.AjpAprProtocol start
INFO: Starting Coyote AJP/1.3 on ajp-8009
Aug 17, 2015 9:51:22 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3895 ms

我越来越相信在某个地方有配置问题。凭直觉,我研究并安装了Apache TomEE 1.7.2 for Windows,指向与普通Tomcat相同的JRE。在研究了running.txt文件并试验了属性和设置之后,我终于能够启动本地版本的Tomee了。我部署了与以前相同的WAR文件,由于以下错误,我发现它将无法加载WAR应用程序:

ClassNotFoundException:com.sun.xml.ws.transport.http.servlet.wsServletContextListener

  • 注释-api.jar
  • catalina.jar
  • catalina-ant.jar
  • catalina-ha.jar
  • catalina-tribes.jar
  • el-api.jar
  • gmbal-api-only.jar
  • ha-api.jar
  • Jasper.jar
  • jasper-el.jar
  • jasper-jdt.jar
  • jaxb-core.jar
  • jaxb-impl.jar
  • jaxws-api.jar
  • jaxws-rt.jar
  • jsp-api.jar
  • 管理-api.jar
  • policy.jar
  • servlet-api.jar
  • stax-ex.jar
  • StreamBuffer.jar
  • tomcat-coyote.jar
  • tomcat-dbcp.jar
  • tomcat-i18n-es.jar
  • tomcat-i18n-fr.jar
  • tomcat-i18n-ja.jar

{$Tomcat}\webapps文件夹包含以下内容:

  • ..\com.mkyong.ws
  • ..\docs
  • ..\示例
  • ..\host-manager
  • ..\经理
  • ..\root
  • ..\com.mkyong.ws.war

共有1个答案

钮兴安
2023-03-14

ws模块的部署有问题。U刚刚从MKyoung示例复制了整个文件夹。我不是那样工作的。

不仅如此,现在显示ws模块内的所有文件夹和文件结构,从您的帖子中删除其余的模块。我只想要ws模块的结构。

模块名必须是sample而不是com.mkyoung.ws,其结构必须是

**sample**
------WEB-INF
------index.jsp

WEB-INF
----classes
----web.xml
----sun-jaxws.xml

classes
----com
--------mkyoung
-----------ws
ws
-----Helloworld.class
-----HeloworldIMPL.class
 类似资料:
  • 我正在使用Apache Tomcat v6服务器。在创建新的网络服务时,我获得了“Apache Axis”、“Apache Axis2”和“Apache CXF2. x”的网络服务运行时选项。 是否可以将运行时设置为“JAX-RPC”或“JAX WS”? 编辑: 我正在使用Eclipse IDE

  • 问题内容: 我试图按照正常的安装指南启动和运行ElasticSearch 。 Macbook上的一切运行正常,但是我试图在Ubuntu 11.04服务器上做同样的事情。 运行正常,我得到了回应。 但是,这是我尝试将ElasticSearch作为服务启动时得到的(我已经安装了服务包装器): 果然说不了本地主机:9200。 任何想法可能是什么问题? 编辑:服务日志显示: 问题答案: 服务器实例没有足够

  • 我无法在VS代码上运行Tomcat服务器。 错误信息如下 但是,我的tomcat文件夹放在D驱动器上,与源代码文件夹相同。我不知道它为什么要搜索“C:\Program”文件夹。如果你能帮忙,我真的很感激。非常感谢。 jdk1.8 Windows10 VS code1.47.2 Tomcat9.0.37 在此处输入图像描述

  • 问题内容: 我有Jenkins作业的阶段,可以使用docker测试和部署我的nodejs,我在端口3000上运行docker,但是当我尝试浏览我的docker时,它不起作用,并且我的docker没有运行 这是我的Jenkinsfile Dockerfile: 我在ubuntu服务器上通过docker- compose运行Jenkins,是我丢失还是出错了?因为我的目标是使用Jenkins来测试我的

  • 问题内容: 我将Selenium与Java(1.8)中的Chromedriver结合使用来进行一些自动的网络爬网: 我正在尝试迁移到Ubuntu 16.04服务器。在服务器上,我安装了Ubuntu chromedriver版本2.37,chrome版本65。根据chromedriver文档,这些版本兼容。我已经更改了指定chromedriver在Ubuntu中的位置的代码: 在运行程序之前,我先启

  • 问题内容: 以下代码可在实时站点上运行,但无法在jsfiddle站点上运行。 谁能告诉我为什么它在jsfiddle上不起作用? 在控制台上,它记录:和。 您将代码作为片段嵌入此处时,可以看到该代码的工作原理: 问题答案: 您定义的函数是在onload函数中定义的,因此在它们被引用之前,因为它们是在该函数中定义的,所以只能在该函数中引用它们。您在HTML中将它们称为全局变量。您有三种选择 a)(最简