Soap Web服务未部署在Tomcat 6中

时间:2019-03-14 19:47:44

标签: java eclipse web-services tomcat soap

我正在通过Eclipse在Tomcat 6中创建和部署SOAP Web服务。

以下是我的代码。

界面

package com.hcl.anil;

import javax.jws.WebService;

@WebService
public interface CalWebService
{
    int add(int a,int b);
}

实施课程

package com.hcl.anil;

import javax.jws.WebService;

@WebService(endpointInterface="com.hcl.anil.CalWebService", portName="calWebServicePort",serviceName="calWebService")
public class CalWebServiceImpl implements CalWebService
{

    @Override
    public int add(int a, int b)
    {
        return a+b;
    }

}

Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

<listener>
        <listener-class>
                com.sun.xml.ws.transport.http.servlet.WSServletContextListener
        </listener-class>
    </listener>
    <servlet>
        <servlet-name>CalWebService</servlet-name>
        <servlet-class>
            com.sun.xml.ws.transport.http.servlet.WSServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CalWebService</servlet-name>
        <url-pattern>/CalWebService</url-pattern>
    </servlet-mapping>

</web-app>

sun-jaxws.xml

<?xml version="1.0" encoding="UTF-8"?>
<endpoints
  xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
  version="2.0">
  <endpoint
      name="CalWebService"
      implementation="com.hcl.anil.CalWebServiceImpl"
      url-pattern="/CalWebService"/>
</endpoints>

当我尝试在tomcat6中部署Web服务时,出现以下错误。

SEVERE: Error configuring application listener of class com.sun.xml.ws.transport.http.servlet.WSServletContextListener
java.lang.NoClassDefFoundError: com/sun/istack/localization/LocalizableMessageFactory$ResourceBundleSupplier
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2854)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2854)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1159)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1647)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4150)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.ClassNotFoundException: com.sun.istack.localization.LocalizableMessageFactory$ResourceBundleSupplier
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    ... 33 more

我在我的项目lib文件夹中包含了以下Jars,而 jaxb-impl-2.2.3 jar实际上具有表示缺少的类。但是它没有 $ ResourceBundleSupplier < / strong>课程的一部分。

下面是lib文件夹中的瓶子。

仅gmbal-api,ha-api,jaxb-api-2.2.3,jaxb-core,jaxb-impl,jaxb-impl-2.2.3, jaxb-xjc-2.2.3,jaxws-api,jaxws-rt,management-api,策略,stax-ex,流缓冲区

我几乎每天都坚持这一点,我进行了彻底的搜索并尝试了许多解决方案。如果有人可以提供帮助,请非常感谢。

为了更清楚地说明,实际上我正在关注本教程。 https://www.youtube.com/watch?v=mGlPXKJo_6U

谢谢。

1 个答案:

答案 0 :(得分:1)

这肯定很麻烦,我陷入了类似的问题。您可以使用以下依赖关系来解决问题,尽管您可能还需要进行反复试验才能真正完成此工作,因为还可能存在其他依赖关系。

将这些包含在pom文件中并尝试。我使用的是Tomcat 8.5.38,但也可以使用的是Tomcat 6。

     <dependency>
        <groupId>org.glassfish.ha</groupId>
        <artifactId>ha-api</artifactId>
        <version>3.1.9</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.2.8</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>2.2.7</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.stream.buffer</groupId>
        <artifactId>streambuffer</artifactId>
        <version>1.5.3</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.2.7</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>policy</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.gmbal</groupId>
        <artifactId>gmbal-api-only</artifactId>
        <version>3.2.0-b003</version>
    </dependency>