【问题标题】:ClassNotFoundException (Apache CXF Webservices)ClassNotFoundException (Apache CXF Web 服务)
【发布时间】:2020-02-27 15:24:15
【问题描述】:

我正在尝试运行我在 Apache CXF 中编码的 Web 服务。我不断收到此错误:

Stacktrace:] with root cause
java.lang.ClassNotFoundException: org.apache.cxf.message.Message
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)

我已将 cxf-core 工件添加到我的 pom 文件中,并且我可以看到它包含在 WAR 文件中。还有实际上抛出异常的 JAR。抛出异常的部分代码是:

getBindingProvider().getRequestContext().put(BindingProviderProperties.CONNECT_TIMEOUT, connectTimeout);
    getBindingProvider().getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endPointUrl);
    getBindingProvider().getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 3720000);

    Map<String, List<String>> headers = new HashMap<String, List<String>>();

    headers.put("Content-Type", Collections.singletonList("application/soap+xml"));
    headers.put(Message.CONTENT_TRANSFER_ENCODING, Collections.singletonList("UTF-8"));
    headers.put(Message.ENCODING, Collections.singletonList("UTF-8"));

    getBindingProvider().getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, headers);

我做错了吗?

我正在使用 maven-jar-plugin 构建它,如下所示:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <inherited>true</inherited>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <addDefaultEntries>true</addDefaultEntries>
                        <addBuildEnvironmentEntries>true</addBuildEnvironmentEntries>
                        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                        <classpathPrefix>lib/</classpathPrefix>
                    </manifest>
                </archive>
                <attachClasses>true</attachClasses>
                <includeEmptyDirectories>true</includeEmptyDirectories>
                <outputDirectory>${project.basedir}/target/</outputDirectory>
            </configuration>
        </plugin>

【问题讨论】:

  • 一个jar文件不包含任何依赖项。
  • 您是否添加了documentation 中列出的所有必需依赖项(cxf-rt-frontend-jaxwscxf-rt-transports-http)?
  • @Igor Belyakov 是的,我的类路径中确实有它们。
  • @Christine 让我试着解释一下。上面的代码是一个超类,包含在一个通用的 jar 文件中。 war 文件中的一个类继承它。因为提到了冲突的罐子。我可能必须按照我猜的 jar 包中提供的方式进行依赖。
  • @Christine 原来是一个冲突的罐子。你能把这个标记的答案设为你的答案吗?

标签: java maven web-services cxf cxfrs


【解决方案1】:

你是如何运行它的?如果您运行包含 cxf jar 文件的 war 文件,该文件包含 Message 类,则不应引发 classcastexception。除非您有冲突的依赖项。或者类加载器出了问题。

检查是否存在冲突的 jar。在 intellij 中,它们标记在屏幕右侧。 Eclipse 也有类似的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2014-08-01
    • 2015-09-03
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多