一尘不染

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

tomcat

摘要

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

处理

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

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

服务器环境

  • Oracle Enterprise Linux distro, version 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,因此我从
JRE1.7.0.75 from Oracle’s support
page
. I
then downloaded Apache Tomcat 6.0.24 Windows
Service

from their
archives
and installed it successfully, using the JRE 1.7.0.75
and local port 1985 (to separate it from the GlassFish local server used
within Netbeans).

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

Adding JAX-WS RI JAR files to {$Tomcat}/lib

Per section 5 on the tutorial mentioned
above
, I then added the indicated
JAR files to the server’s {$Tomcat}/lib folder and restarted the server. This
time, the application started , but I still couldn’t access the service.
The link “http://localhost:8080/HelloWorld/hello” from the
tutorial returns a 404
error. I even tried copying the entire JAX-WS RI/lib folder to the
{$Tomcat}/lib directory with no changes, so I backed out this change.

For reference, here’s a list of the files I’ve copied:

  • 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

Enabling DEBUG mode in the local Tomcat Server

I un-deployed the WAR file. Using the Apache Tomcat Monitor , I stopped
the service, deleted the existing logs, enabled the DEBUG logging level, and
restarted the service. I then re-deployed the tutorial WAR file. I again saw
it didn’t start, and then I opened all the log files. There is not even a
mention of the failure to access the service, but perhaps 404 errors aren’t
logged.

Running the service using the Netbeans-embedded Glassfish server

When I first created the Web Application, Netbeans offered to set me up with a
local Glassfish server. I accepted, and I set everything up with defaults.
When I try to run the tutorial against this server, I cannot access the
service. The link “http://localhost:8080/HelloWorld/hello” from the
tutorial still returns a
404 error.

我在思考的问题

教程中的代码有什么问题吗?(似乎不太可能,因为从别人的评论中获得了成功。)
他在本教程中使用的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 /
sunjaxws.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
的Windows,
指向同一个JRE作为常规的Tomcat。在研究了
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 / hello ” 仍然返回 404错误,因此结果完全相同。

除了没有针对其他版本的JDK 编译本教程之外,我很快就没有
足够的想法了…… :-)

更新#4

Per another request below, here’s a list of all JAR files in the
{$Tomcat}\lib folder:

  • annotations-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

The {$Tomcat}\webapps folder contains the following:

  • ..\com.mkyong.ws
  • ..\docs
  • ..\examples
  • ..\host-manager
  • ..\manager
  • ..\ROOT
  • ..\com.mkyong.ws.war

阅读 389

收藏
2020-06-16

共1个答案

一尘不染

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
2020-06-16