Não é possível executar o serviço da Web Java JAX-WS no Apache Tomcat

Sumário

Fui encarregado de escrever um serviço da Web Java para integrar dois sistemas diferentes em nosso ambiente corporativo. Como sou um desenvolvedor experiente em C # .NET MVC e me considero intermediário em Java, comecei pesquisando "Java Web Service Tutorials". Estou tentando correreste tutorial comum, masNão consigo executar o serviço de tutorial devido a um erro HTTP 404.

Processo

Estou usando o modelo de aplicativo da Web Java emNetbeans 8.0.2. eu useiJDK 1.6.0.25 para compilar o tutorial (já que o eventual serviço que eu preciso escrever precisará desta versão Java para ser compatível com alguns outros JARs que vou usar). Tudo é compilado em um arquivo WAR.

Em seguida, implantei o arquivo WAR carregando a GUI do Tomcat Manager do servidor e usando oArquivo WAR para implementar característica. Quando faço isso, o arquivo WAR é copiado e o aplicativo é iniciado. No entanto, quando tento acessar o serviço através do link "http: // localhost: 8080 / HelloWorld / hello" detutorial, o serviço retornará um erro 404.

Ambiente do servidorDistribuição do Oracle Enterprise Linux, versão 3.8.13-44.1.1.el6uek.x86_64Apache Tomcat 6.0.24JVM 1.7.0_75-mockbuild_2015_01_20_16_42-b00

Se o conselho é que eu preciso alterar as versões ou plataformas Java ou Tomcat, também preciso saber disso, pois tenho pouca experiência com essas tecnologias. No entanto, talvez não seja possível alterar todos os fatores devido a limitações na minha distribuição Linux (por administrador do meu servidor).

Coisas que eu tentei (em ordem):Configurar um servidor local do Tomcat no Windows

Instalei um servidor Tomcat local no meu laptop Windows 7. Como o servidor Linux está executando o Java 1.7.0.75, instalei uma versão correspondente do WindowsJRE 1.7.0.75 dePágina de suporte da Oracle. Então eu baixeiApache Tomcat 6.0.24 Windows Service deseus arquivos e o instalou com sucesso, usando o JRE 1.7.0.75 e a porta local 1985 (para separá-lo do servidor local GlassFish usado no Netbeans).

Assim como no servidor Linux, meu servidor Tomcat local não pôde iniciar o tutorial. Clicar manualmente nocomeçar O link do comando fornece a mensagem "FAIL - O aplicativo no caminho de contexto /com.mkyong.ws não pôde ser iniciado". Os logs do meu servidor local também não mostram nada sobre o aplicativo que falhou ao iniciar.

Adicionando arquivos JAR JAX-WS RI ao {$ Tomcat} / lib

De acordo com a seção 5 dotutorial mencionado acima, Adicionei os arquivos JAR indicados à pasta {$ Tomcat} / lib do servidor e reiniciei o servidor. Desta vez,o aplicativo foi iniciado, mas ainda não consegui acessar o serviço. A ligação "http: // localhost: 8080 / HelloWorld / hello" detutorial retorna um erro 404. Eu até tentei copiar toda a pasta JAX-WS RI / lib para o diretório {$ Tomcat} / lib sem alterações, então fiz o backup dessa alteração.

Para referência, aqui está uma lista dos arquivos que eu copiei:

gmbal-api-only.jarha-api.jarjaxb-core.jarjaxb-impl.jarjaxws-api.jarjaxws-rt.jarmanagement-api.jarpolicy.jarstax-ex.jarstreambuffer.jarAtivando o modo DEBUG no servidor Tomcat local

Desimplantei o arquivo WAR. Usando oApache Tomcat Monitor, Parei o serviço, excluí os logs existentes, habilitei o nível de log DEBUG e reiniciei o serviço. Em seguida, reimplantei o arquivo WAR do tutorial. Vi novamente que não foi iniciado e, em seguida, abri todos os arquivos de log. Não há sequer uma menção à falha no acesso ao serviço, mas talvez os erros 404 não estejam registrados.

Executando o serviço usando o servidor Glassfish incorporado ao Netbeans

Quando criei o aplicativo Web, o Netbeans se ofereceu para me configurar com um servidor Glassfish local. Aceitei e configurei tudo com os padrões. Quando tento executar o tutorial neste servidor, não consigo acessar o serviço. A ligação "http: // localhost: 8080 / HelloWorld / hello" detutorial ainda retorna um erro 404.

Pesquisando outras postagens e tutoriais

Aqui estão algumas outras postagens e sites do StackOverflow que revi sem encontrar uma resolução:

JAX-WS no servidor Tomcat (não se aplica)Implementando o Serviço da Web JAX-WS como Guerra no Apache Tomcat (semelhante aotutorial em recomendar copiar os arquivos JAR extras)Tempo de execução JAX-RPC / JAX-WS no Apache Tomcat (apenas informativo)como implantar um serviço jax-ws para eclipse ou tomcat? (semelhante aotutorial em recomendar copiar os arquivos JAR extras)https://myarch.com/create-jax-ws-service-in-5-minutes/ (semelhante aotutorial mas sem ajuda de implantação)Perguntas que estou pensandoHá algo de errado com o código no tutorial? (Não parece provável, uma vez que, pelos comentários de outras pessoas, houve sucesso.)Existe uma diferença significativa nas versões do Java ou Tomcat que ele está usando no tutorial? (Ele não fornece versões do Java ou Tomcat.)Devo executar o Tomcat local contra um JDK em vez de um JRE?O tutorial deve ser compilado com o mesmo JDK que o Tomcat está usando? (Espero que não, pois isso parece muito limitador ...)Posso executar o JAX-WS no Tomcat? (Com base em páginas comohttp://tomee.apache.org/apache-tomee.html, parece que o TOmcat base pode nem mesmo suportar JAX-WS? Novamente, apenas minha experiência limitada.)

Agradecemos qualquer orientação para solução de problemas que qualquer pessoa possa oferecer.Agradeço antecipadamente a ajuda!

ATUALIZAÇÃO # 1

Por solicitação de @NIKETBHANDARY, parei o serviço, excluí os logs, reiniciei o serviço e naveguei no Chrome para localhost: 1985 / helloworld / hello - ainda obtendo o erro 404. Eu então abri ocatalina.log arquivo, mas está completamente vazio. Somentejakarta_service.log possui entradas de log e todas são sobre o início do serviço. Também verifiquei que o nível de log está definido comodepurar. O que mais posso alterar para obter mensagens de log adicionais?

Também fiz uma pesquisa por "com.mkyong" em todo o diretório do Tomcat. Somente o arquivo WAR do aplicativo da web, arquivos webapps /../ META-INF / context.xml, webapps /../ WEB-INF / sun-jaxws.xml e /conf/cataline/localhost/com.mkyong.we.xml retornou todos os hits. Nada nos logs. Isso poderia indicar que este é um problema de configuração?

ATUALIZAÇÃO # 2

Aparentemente, o Tomcat não libera totalmente suas mensagens de log até que o encadeamento seja fechado quando o serviço for encerrado (provavelmente devido à configuração de log). Como tal, parei o serviço que liberou os arquivos de log. Aqui está todo o conteúdo docatalina.log arquivo (que contém uma referência a 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
ATUALIZAÇÃO # 3

Estou ficando mais convencido de que há um problema de configuração em algum lugar. Em um palpite, estudei e instaleiApache TomEE 1.7.2 para Windows, apontando para o mesmo JRE que o Tomcat comum. Depois de estudar orunning.txt e experimentando as propriedades e configurações, finalmente pude lançar uma versão local do TomEE. Implantei o mesmo arquivo WAR de antes e achei que ele não carregaria o aplicativo WAR devido ao seguinte erro:

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

A pesquisa desse erro no Google levou (novamente) ao blog do MKYong para uma correção (copie ojaxws-rt.jar arquivo para o{$ tomcat} / lib pasta. Reimplantei o arquivo WAR e o gerente carregou o aplicativo. NO ENTANTO, assim como no Tomcat comum, o URL "http: // localhost: 8080 / HelloWorld / hello" detutorial ainda retorna um erro 404. Portanto, os resultados são exatamente os mesmos.

Com falta de compilar otutorial contra outras versões do JDK, estou ficando sem ideias rapidamente ... :-)

ATUALIZAÇÃO # 4

Por outra solicitação abaixo, aqui está uma lista de todos os arquivos JAR no diretório{$ Tomcat} \ lib pasta:

annotations-api.jarcatalina.jarcatalina-ant.jarcatalina-ha.jarcatalina-tribes.jarel-api.jargmbal-api-only.jarha-api.jarjasper.jarjasper-el.jarjasper-jdt.jarjaxb-core.jarjaxb-impl.jarjaxws-api.jarjaxws-rt.jarjsp-api.jarmanagement-api.jarpolicy.jarservlet-api.jarstax-ex.jarstreambuffer.jartomcat-coyote.jartomcat-dbcp.jartomcat-i18n-es.jartomcat-i18n-fr.jartomcat-i18n-ja.jar

o{$ Tomcat} \ webapps pasta contém o seguinte:

.. \ com.mkyong.ws.. \ docs..\exemplos.. \ host-manager..\Gerente..\RAIZ.. \ com.mkyong.ws.warAtualização # 5

o{$ Tomcat} \ webapps \ com.mkyong.ws O diretório contém o seguinte:

Aqui está uma captura de tela da GUI do Tomcat Manager:

Aqui está uma captura de tela do erro HTTP 404 que estou recebendo junto com o URL:

Também confirmei que os arquivos no WAR correspondem exatamente aotutorial.

questionAnswers(2)

yourAnswerToTheQuestion