ClassNotFoundException (веб-сервисы Apache CXF)

Я пытаюсь запустить веб-сервис, который я закодировал в Apache CXF. Я продолжаю получать эту ошибку:

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

person hell_storm2004    schedule 27.02.2020    source источник
comment
Файл jar не содержит никаких зависимостей.   -  person khmarbaise    schedule 27.02.2020
comment
Добавили ли вы все необходимые зависимости (cxf-rt-frontend-jaxws и cxf-rt-transports-http), перечисленные в документация?   -  person Igor Belyakov    schedule 27.02.2020
comment
@Igor Belyakov Да, они есть в моем пути к классам.   -  person hell_storm2004    schedule 27.02.2020
comment
@Christine Позвольте мне попытаться объяснить это. Приведенный выше код является суперклассом, который содержится в общем файле jar. Класс в файле войны наследует его. Так как есть упоминание о конфликтующих баночках. Возможно, мне придется сделать зависимость, как я предполагаю, в пакете jar.   -  person hell_storm2004    schedule 27.02.2020
comment
@Christine Это оказалась конфликтующая банка. Можете ли вы сделать свой ответ на этот знак решенным.   -  person hell_storm2004    schedule 06.03.2020


Ответы (1)


Как ты это делаешь? Если вы запустите файл войны, который содержит файл jar cxf, содержащий класс Message, он не должен вызывать исключение classcastException. Если у вас нет конфликтующих зависимостей. Или что-то не так с загрузчиками классов.

Проверьте наличие конфликтующих банок. В Intellij они отмечены в правой части экрана. У Eclipse есть что-то подобное.

person Christine    schedule 06.03.2020