gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:49:04 27 4
gpt4 key购买 nike

概括

我的任务是编写Java Web服务,以在我们的企业环境中集成两个完全不同的系统。由于我实际上是一位经验丰富的C#.NET MVC开发人员,并且只考虑自己是Java的中级人员,因此我从搜索“Java Web服务教程”开始。我正在尝试运行this common tutorial,但是由于HTTP 404错误而无法运行教程服务。

过程

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

然后,我通过加载服务器的Tomcat Manager GUI并使用 WAR文件部署功能来部署WAR文件。这样做时,将复制WAR文件,然后启动应用程序。但是,当我尝试通过http://localhost:8080/HelloWorld/hello通过链接“tutorial”访问该服务时,该服务将返回404错误。

服务器环境

  • Oracle Enterprise Linux发行版3.8.13-44.1.1.el6uek.x86_64
  • Apache Tomcat 6.0.24
  • JVM 1.7.0_75-mockbuild_2015_01_20_16_42-b00

  • 如果建议是我需要更改Java或Tomcat版本或平台,则我也应该知道这一点,因为我对这些技术的经验很少。但是,由于我的Linux发行版的限制(我的服务器管理员),我可能无法更改所有因素。

    我尝试过的事情(按顺序):

    在Windows上设置本地Tomcat服务器

    我在Windows 7笔记本电脑上安装了本地Tomcat服务器。由于Linux服务器正在运行Java 1.7.0.75,因此我从 JRE 1.7.0.75安装了匹配的Windows版本 Oracle's support page。然后,我从 Apache Tomcat 6.0.24 Windows Service下载了 their archives,并使用JRE 1.7.0.75和本地端口1985(将其与Netbeans中使用的GlassFish本地服务器分开)成功安装了它。

    就像在Linux服务器上一样,我的本地Tomcat服务器无法启动本教程。手动单击 start 命令链接会给我消息“失败-无法启动上下文路径/com.mkyong.ws上的应用程序”。我的本地服务器的日志中没有显示有关该应用程序均无法启动的任何信息。

    将JAX-WS RI JAR文件添加到{$ Tomcat}/lib

    然后根据 tutorial mentioned above的第5节,将指示的JAR文件添加到服务器的{$ Tomcat}/lib文件夹中,然后重新启动服务器。这次, 该应用程序启动了,但是我仍然无法访问该服务。来自 http://localhost:8080/HelloWorld/hello的链接“ tutorial”返回404错误。我什至尝试将整个JAX-WS RI/lib文件夹复制到{$ Tomcat}/lib目录,而不做任何更改,因此我撤消了此更改。

    作为引用,这是我复制的文件的列表:
  • gmbal-api-only.jar
  • ha-api.jar
  • jaxb-core.jar
  • jaxb-impl.jar
  • jaxws-api.jar
  • jaxws-rt.jar
  • management-api.jar
  • policy.jar
  • stax-ex.jar
  • streambuffer.jar

  • 在本地Tomcat服务器中启用 Debug模式

    我未部署WAR文件。使用 Apache Tomcat Monitor ,我停止了该服务,删除了现有日志,启用了DEBUG日志记录级别,然后重新启动了该服务。然后,我重新部署了教程WAR文件。我再次看到它没有启动,然后我打开了所有日志文件。甚至没有提到无法访问服务的问题,但是也许没有记录404错误。

    使用嵌入Netbeans的Glassfish服务器运行服务

    当我第一次创建Web应用程序时,Netbeans提出要使用本地Glassfish服务器进行设置。我接受了,并且将所有内容都设置为默认值。当我尝试在此服务器上运行教程时,无法访问该服务。 http://localhost:8080/HelloWorld/hello的链接“ tutorial”仍然返回404错误。

    研究其他文章和教程

    这是我没有找到解决方法而检查的其他StackOverflow帖子和网站:
  • JAX-WS on Tomcat server(不适用)
  • Deploying JAX-WS webservice as War in Apache Tomcat(类似于tutorial,建议复制额外的JAR文件)
  • JAX-RPC / JAX-WS runtime in Apache Tomcat(仅供引用)
  • how to deploy a jax-ws service to eclipse or tomcat?(类似于tutorial,建议复制额外的JAR文件)
  • https://myarch.com/create-jax-ws-service-in-5-minutes/(类似于tutorial,但没有部署帮助)

  • 我在思考的问题
  • 本教程中的代码有问题吗? (似乎不太可能,因为从其他人的评论中获得了成功。)
  • 他在本教程中使用的Java或Tomcat版本是否有显着差异? (他没有提供Java或Tomcat的版本。)
  • 我应该针对JDK而不是JRE运行本地Tomcat吗?
  • 本教程是否应该针对与Tomcat使用的相同的JDK进行编译? (我希望不是,因为这似乎非常有局限性...)
  • 我什至可以在Tomcat中运行JAX-WS吗? (基于http://tomee.apache.org/apache-tomee.html之类的页面,看来基础TOmcat甚至可能不支持JAX-WS?再次,仅是我的有限经验。)

  • 我会很感激任何人都可以提供的任何故障排除指南。 预先感谢您的帮助!

    更新#1

    根据@NIKETBHANDARY的请求,我停止了该服务,删除了日志,重新启动了该服务,并在Chrome中浏览到了localhost:1985/helloworld/hello-仍然出现404错误。然后,我打开了 catalina.log 文件,但是它完全是空的。只有 jakarta_service.log 拥有任何日志条目,并且都与服务启动有关。我还验证了日志记录级别已设置为 debug 。我还能更改什么以获取其他日志消息?

    我还在整个Tomcat目录中搜索“com.mkyong”。仅webapp WAR文件,webapps/../META-INF/context.xml,webapps/../WEB-INF/sun-jaxws.xml和/conf/cataline/localhost/com.mkyong.we.xml文件返回任何点击。没有任何日志。可以表明这是一个配置问题吗?

    更新#2

    显然,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

    更新#3

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

    java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener



    再次搜索该错误导致MKYong的博客寻求修复(将 jaxws-rt.jar文件复制到 {$ tomcat}/lib 文件夹。我重新部署了WAR文件,管理器加载了该应用程序。但是,就像在常规Tomcat上一样,但 http://localhost:8080/HelloWorld/hello的网址“ tutorial”仍返回404错误,因此结果完全相同。

    缺少针对其他版本的JDK编译 tutorial的方法,我很快就耗尽了想法... :-)

    更新#4

    以下是每个其他请求,这是 {$ Tomcat}\lib 文件夹中所有JAR文件的列表:
  • 注解-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
  • management-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
  • ..\examples
  • ..\host-manager
  • ..\manager
  • ..\ROOT
  • ..\com.mkyong.ws.war

  • 更新#5

    {$ Tomcat}\webapps\com.mkyong.ws 目录包含以下内容:

    screenshot of com.mkyong.ws module directory in {$Tomcat}/webapps folder

    这是Tomcat Manager GUI的屏幕截图:

    screenshot of the Tomcat Manager GUI

    这是我收到的HTTP 404错误以及URL的屏幕截图:

    screenshot of the HTTP 404 error

    我还确认了WAR中的文件与 tutorial完全匹配。

    最佳答案

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

    现在不仅可以显示ws模块中的所有文件夹和文件结构,还可以删除帖子中的其余模块。我只想要ws模块的结构。

    模块名称必须采样而不是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

    关于java - 无法在Apache Tomcat上运行JAX-WS Java Web服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32059153/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com