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

2023-11-30

Summary

我的任务是编写一个 Java Web 服务来集成企业环境中的两个不同的系统。由于我实际上是一名经验丰富的 C#.NET MVC 开发人员,并且只认为自己在 Java 方面处于中级水平,因此我首先搜索“Java Web Service 教程”。我正在尝试跑步这个通用教程, but 由于 HTTP 404 错误,我无法运行教程服务。

Process

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

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

服务器环境

  • Oracle Enterprise Linux 发行版,版本 3.8.13-44.1.1.el6uek.x86_64
  • 阿帕奇汤姆猫 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,因此我安装了匹配的Windows版本JRE 1.7.0.75 from Oracle 的支持页面。然后我下载了Apache Tomcat 6.0.24 Windows 服务 from 他们的档案并使用 JRE 1.7.0.75 和本地端口 1985 成功安装它(将其与 Netbeans 中使用的 GlassFish 本地服务器分开)。

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

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

根据第 5 条上面提到的教程,然后我将指示的 JAR 文件添加到服务器的 {$Tomcat}/lib 文件夹中并重新启动服务器。这次,应用程序已启动,但我仍然无法访问该服务。链接 ”http://localhost:8080/HelloWorld/你好“ 来自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
  • 管理-api.jar
  • 策略.jar
  • stax-ex.jar
  • 流缓冲区.jar

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

我取消部署了 WAR 文件。使用Apache Tomcat 监视器,我停止了服务,删除了现有日志,启用了 DEBUG 日志记录级别,然后重新启动了服务。然后我重新部署了教程 WAR 文件。我再次看到它没有启动,然后我打开了所有日志文件。甚至没有提及访问服务失败,但也许 404 错误没有被记录。

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

当我第一次创建 Web 应用程序时,Netbeans 提出为我设置本地 Glassfish 服务器。我接受了,并将一切设置为默认值。当我尝试针对该服务器运行教程时,我无法访问该服务。链接 ”http://localhost:8080/HelloWorld/你好“ 来自tutorial仍然返回 404 错误。

研究其他帖子和教程

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

  • Tomcat 服务器上的 JAX-WS(不适用)
  • 在 Apache Tomcat 中将 JAX-WS Web 服务部署为 War(类似于tutorial建议复制额外的 JAR 文件)
  • Apache Tomcat 中的 JAX-RPC / JAX-WS 运行时(仅供参考)
  • 如何将jax-ws服务部署到eclipse或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 错误。然后我打开了卡塔琳娜日志文件,但它完全是空的。仅有的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 不会完全刷新其日志消息,直到线程随着服务关闭而关闭(可能是由于日志记录配置)。因此,我停止了刷新日志文件的服务。以下是该文的全部内容卡塔琳娜日志文件(其中包含对 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

我越来越确信某个地方存在配置问题。凭直觉,我研究并安装了适用于 Windows 的 Apache TomEE 1.7.2,指向与常规 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 上一样,URL“http://localhost:8080/HelloWorld/你好“ 来自tutorial仍然返回 404 错误。所以,结果是完全一样的。

缺少编译tutorial与其他版本的 JDK 相比,我很快就没有想法了……:-)

更新#4

根据下面的另一个请求,这里是所有 JAR 文件的列表{$Tomcat}\lib folder:

  • 注释-api.jar
  • 卡塔琳娜.jar
  • catalina-ant.jar
  • catalina-ha.jar
  • catalina-tribes.jar
  • el-api.jar
  • gmbal-api-only.jar
  • ha-api.jar
  • 贾斯珀.jar
  • jasper-el.jar
  • jasper-jdt.jar
  • jaxb-core.jar
  • jaxb-impl.jar
  • jaxws-api.jar
  • jaxws-rt.jar
  • jsp-api.jar
  • 管理-api.jar
  • 策略.jar
  • servlet-api.jar
  • stax-ex.jar
  • 流缓冲区.jar
  • tomcat-coyote.jar
  • tomcat-dbcp.jar
  • tomcat-i18n-es.jar
  • tomcat-i18n-fr.jar
  • tomcat-i18n-ja.jar

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

  • ..\com.mkyong.ws
  • ..\docs
  • ..\例子
  • ..\主机管理器
  • ..\经理
  • ..\ROOT
  • ..\com.mkyong.ws.war

更新#5

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

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

以下是 Tomcat 管理器 GUI 的屏幕截图:

screenshot of the Tomcat Manager GUI

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

screenshot of the HTTP 404 error

我还确认了 WAR 中的文件与tutorial.


您的 ws 模块部署存在问题。 您刚刚从 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 Apache Tomcat 上运行 JAX-WS Java Web 服务 的相关文章

随机推荐

  • Xcode 界面生成器中的图像资源大小

    如果我在 Xcode 中的界面构建器上添加图像视图 并且其大小为 200 x 100 Xcode 中的大小 我如何知道将图像资源设置为 1x 2x 和 3x 的大小 如果我在 3x 的 Photoshop 中将其设置为 600x300 像素
  • 在使用 Ajax 生成的表单上使用 jquery 验证插件

    使用 jQuery 验证插件时 如何验证使用 ajax 生成的表单 我的意思是问 当页面加载时 表单最初不会出现在页面上 而是使用ajax添加到页面中 我正在关注以下示例bassistance de jquery plugins jquer
  • iOS编辑tableview隐藏单元格中的子视图

    我有一个关于编辑 UITableView 的问题 我想知道当点击删除控件并出现删除按钮时如何隐藏子视图 我已经弄清楚如何在点击删除按钮时隐藏子视图 但为时已晚 我使用以下代码来完成该任务 void tableView UITableView
  • 如何使用 jOOQ 从模板生成带有参数顺序的 SQL?

    我使用 jOOQ 3 11 11 生成这样的 SQL 模板 DSLContext context new DefaultDSLContext conf Query query context select from table1 where
  • 在服务器上调用 Collection.insert 时,“Meteor 代码必须始终在 Fiber 内运行”

    我在 server statusboard js 中有以下代码 var require meteor bootstrap require request require request function getServices servic
  • 使用 Quarkus Rest Data Panache 时如何从 @PrePersist 中的请求标头访问用户名

    我正在尝试记录修改实体的用户 反向代理正在请求标头中设置用户名 当使用 REST Panache 公开 JAX RS CRUD 时 如何从独立类读取请求和标头 下面是我尝试过的示例 但我得到了 null 或 null 指针 exep pac
  • 为什么正则表达式中的转义字符不匹配?

    如果我想匹配点符号 我必须写这个正则表达式 需要转义字符来匹配符号本身 如果我想匹配 d 符号 我必须写这个 d 转义字符是not需要匹配符号本身 如果我想匹配任何字符 或任何数字字符 d 反之亦然 在我看来 这种做法不太一致 其背后的理由
  • 未找到类型

    我刚刚更新了 angular cli v1 1 并使用创建了一个新项目ng new MyProj 然后我添加并安装了两个依赖项项目 json file dependencies toastr 2 1 2 spin 0 0 1 devDepe
  • 如何使用 openxml 在 Excel 文件单元格中的文本上应用字体和颜色

    我是 Openxml 新手 我正在尝试使用 openxml 创建 xlsx 文件 我想对Excel文件中不同单元格的文本应用不同的字体和颜色 我使用它来创建 xlsx 文件 但无法执行字体和颜色部分 SpreadsheetDocument
  • Python 3.6 urllib 为什么行以 b 开头

    我正在使用 python 3 并且不明白为什么输出在每个行的开头都有 b 我不认为 python 2 是这种情况 为什么会这样以及如何删除它 谢谢 import urllib fhand urllib urlopen http www py
  • AngularJS 通过选择空选项进行过滤

    我正在尝试为 AngularJS 中的表构建一个过滤系统 我有一个产品列表 每个产品都与一个系统绑定 我希望能够在选择中列出所有系统 并按所选系统过滤产品 除了选择空选择选项 该选项会过滤掉所有系统 之外 这非常有效 这是我的示例代码 控制
  • PyCharm 奇怪的类型警告[重复]

    这个问题在这里已经有答案了 为什么下面的代码会这样 v None for in range 3 v 1 0 lt lt lt 告诉我这个 意外类型 整数 整数 可能的类型 整数 无 切片 可迭代 无 消除此类警告的一个简单解决方法是添加类型
  • 在 MATLAB 中使用 sendmail 指定抄送地址

    MATLAB 的典型使用 调用sendmail函数看起来像这样 content body text attachments attachment pdf set preferences setpref Internet SMTP Serve
  • 如何检索实际的 OleDb 表架构(不包括其他表列)

    当我运行此代码时 它还会检索表中不存在的一些其他字段 我怎样才能克服这个问题 Dim conn As New OleDb OleDbConnection Create a connection string for an Access da
  • 从 C 到 Objective-C 的回调方法

    我有一个 Objective C 课程 我正在做的是在 Objective C 类中调用 C 函数 这个 C 函数是我在一个文件中实现的 该文件是这个示例 ios 项目的一部分 所有 C 函数都工作正常 到目前为止没有任何问题 当我尝试调用
  • 通过 PHP 使用 maxlength 标签检查表单输入长度

    我的问题很简单 如果我在 HTML 表单中有一些带有 maxlength 标记的输入字段 我也必须通过 PHP 检查输入长度吗 您应该这样做 因为任何人都可以 复制 您的表格并使用它 服务器端检查比客户端更好 它是安全的 例如 您的表格
  • 如何让动画和手势识别器协同工作? (迅速)

    我做了一个简单的项目 带有滑动手势识别器和动画 我让标签移动并且每 3 秒增加一次数字 每次滑动我都需要减少数量 我的手势识别器对象与标签绑定在一起 即它仅在标签范围内工作 当 prog 在没有动画的情况下工作时 一切正常 但是当它有动画时
  • 这个函数签名在sml中是什么意思?

    我正在查看我的教授关于 SML 语言的一些注释 其中一个函数如下所示 fun max gt let fun lp curr curr lp curr a l if gt a curr then lp a l else lp curr l i
  • 返回并使用带有匹配的泛型类型

    我正在开发一个简单的 Rust 应用程序 它接受标准输入并根据它进行操作 我想让每个命令返回一个结果向量 不同的命令可能返回不同类型的向量 这list方法返回一个向量PathBufs 但默认匹配臂返回字符串 use std io fs us
  • 无法在 Apache Tomcat 上运行 JAX-WS Java Web 服务

    Summary 我的任务是编写一个 Java Web 服务来集成企业环境中的两个不同的系统 由于我实际上是一名经验丰富的 C NET MVC 开发人员 并且只认为自己在 Java 方面处于中级水平 因此我首先搜索 Java Web Serv