Реализация JAXB-API не найдена (при запуске java jar) - PullRequest
2 голосов
/ 08 апреля 2020

Я получаю сообщение об ошибке в строке (JAXBContext.newInstance):

    @Override
    public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException {
    SoapHeader soapHeader = ((SoapMessage)message).getSoapHeader();

    try {
        JAXBContext context = JAXBContext.newInstance(AuthHeader.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.marshal(authentication, soapHeader.getResult());

    } catch (JAXBException e) {
        System.out.println(e.getMessage());
        throw new IOException("error while marshalling authentication.");
    }
}

Хотя все работает нормально, когда это выполняется в качестве тестового примера, используя:

 mvn install

или mvn: spring: boot run

Но вызывает проблему, когда jar запускается с помощью:

java -jar target/fileName-0.0.1-SNAPSHOT.jar 

Ошибка при запуске java -jar и попадании с использованием почтальона.

Implementation of JAXB-API has not been found on module path or classpath.

java.io.IOException: error while marshalling authentication.

Информация о версии

mvn -version
Apache Maven 3.6.0
Maven home: /usr/share/maven
Java version: 11.0.7, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "4.15.0-1051-aws", arch: "amd64", family: "unix"

java -version
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-2ubuntu218.04)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-2ubuntu218.04, mixed mode, sharing)

Тот же самый jar отлично работает на сервере разработки, но не работает на промежуточном сервере. И сервер разработки, и промежуточный сервер имеют одинаковую среду (java версия, mvn, все одинаково). У меня есть эти зависимости, добавленные в pom. xml:

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.3.3</version>
    </dependency>

Если это связано с толстой флягой, то почему другие зависимости, такие как amazon s3, stripe et c. работает с обычной банкой. В чем проблема только с jaxb?

Я даже пытался создать толстый jar, используя пакет mvn со следующей конфигурацией:

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
                <configuration>
                    <mainClass>com.patracorp.patrapay.PatrapayApplication</mainClass>
                    <layout>ZIP</layout>
                </configuration>
            </execution>
        </executions>
    </plugin>

, но все еще получал ту же ошибку.

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

1) Дважды проверьте, чтобы у вас не было дублированных зависимостей, поскольку артефакты JAXB были переименованы несколько раз.

Запуск mvn dependency: tree не должен выводить связанные с JAXB артефакты более одного раза.

2) Попробуйте использовать этот артефакт:

    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.2</version>
    </dependency>
0 голосов
/ 03 мая 2020

В Java 9 и более поздних версиях Java удалил java. xml .bind из своего пути к классу по умолчанию. Итак, вам нужно явно добавить JAR-файлы в classpath.

И добавления только «jaxb-impl», я думаю, будет недостаточно.
Можете ли вы добавить зависимость ниже в POM и затем попробовать ее? out.

    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>${jaxb-api.version}</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>${jaxb-api.version}</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>${jaxb-api.version}</version>
    </dependency>

Пожалуйста, поделитесь результатами. И если это работает, пожалуйста, примите это как ответ.

...