Dropwizard с использованием Джакарта не Javax - PullRequest
0 голосов
/ 28 апреля 2020

В настоящее время я занимаюсь разработкой веб-сервиса на java с использованием фреймворка Dropwizard. Для интерфейса Rest API я использовал JAX-RS. Так как мне нужно было загружать файлы с POST-запросом, я добавил jersey-media-multipart в мои зависимости Gradle. Однако неожиданно Intellij не смог разрешить операторы javax.ws.rs.* import, но более новый jakarta.ws.rs, и поэтому я изменил интерфейс на jakarta. Теперь проблема в том, что Dropwizard, по-видимому, все еще требуется JAX-RS, и поэтому я получаю следующую ошибку с помощью stacktrace:

java.lang.NoClassDefFoundError: javax/ws/rs/QueryParam
    at io.dropwizard.jersey.validation.JerseyParameterNameProvider.getParameterNameFromAnnotations(JerseyParameterNameProvider.java:46)
    at io.dropwizard.jersey.validation.JerseyParameterNameProvider.getParameterNames(JerseyParameterNameProvider.java:35)
    at org.hibernate.validator.internal.util.ExecutableParameterNameProvider.getParameterNames(ExecutableParameterNameProvider.java:37)
    at org.hibernate.validator.internal.properties.javabean.JavaBeanExecutable.getParameterName(JavaBeanExecutable.java:86)
    at org.hibernate.validator.internal.metadata.aggregated.ParameterMetaData$Builder.build(ParameterMetaData.java:165)
    at org.hibernate.validator.internal.metadata.aggregated.ExecutableMetaData$Builder.findParameterMetaData(ExecutableMetaData.java:436)
    at org.hibernate.validator.internal.metadata.aggregated.ExecutableMetaData$Builder.build(ExecutableMetaData.java:391)
    at org.hibernate.validator.internal.metadata.aggregated.BeanMetaDataBuilder$BuilderDelegate.build(BeanMetaDataBuilder.java:260)
    at org.hibernate.validator.internal.metadata.aggregated.BeanMetaDataBuilder.build(BeanMetaDataBuilder.java:133)
    at org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.createBeanMetaData(BeanMetaDataManagerImpl.java:206)
    at org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.getBeanMetaData(BeanMetaDataManagerImpl.java:165)
    at org.hibernate.validator.internal.engine.ValidatorImpl.buildNewLocalExecutionContext(ValidatorImpl.java:772)
    at org.hibernate.validator.internal.engine.ValidatorImpl.access$200(ValidatorImpl.java:84)
    at org.hibernate.validator.internal.engine.ValidatorImpl$CascadingValueReceiver.doValidate(ValidatorImpl.java:707)
    at org.hibernate.validator.internal.engine.ValidatorImpl$CascadingValueReceiver.indexedValue(ValidatorImpl.java:681)
    at org.hibernate.validator.internal.engine.valueextraction.ListValueExtractor.extractValues(ListValueExtractor.java:26)
    at org.hibernate.validator.internal.engine.valueextraction.ListValueExtractor.extractValues(ListValueExtractor.java:16)
    at org.hibernate.validator.internal.engine.valueextraction.ValueExtractorHelper.extractValues(ValueExtractorHelper.java:42)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedContainerElementsForCurrentGroup(ValidatorImpl.java:651)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedConstraints(ValidatorImpl.java:598)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:409)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedAnnotatedObjectForCurrentGroup(ValidatorImpl.java:629)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedConstraints(ValidatorImpl.java:590)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:409)
    at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:172)
    at io.dropwizard.configuration.BaseConfigurationFactory.validate(BaseConfigurationFactory.java:238)
    at io.dropwizard.configuration.BaseConfigurationFactory.build(BaseConfigurationFactory.java:127)
    at io.dropwizard.configuration.BaseConfigurationFactory.build(BaseConfigurationFactory.java:108)
    at io.dropwizard.cli.ConfiguredCommand.parseConfiguration(ConfiguredCommand.java:128)
    at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:74)
    at io.dropwizard.cli.Cli.run(Cli.java:78)
    at io.dropwizard.Application.run(Application.java:94)
    at Application.main(Application.java:10)
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.QueryParam

Caused by: java.lang.ClassNotFoundException: javax.ws.rs.QueryParam
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 33 more

Execution failed for task ':Application.main()'.
> Process 'command '/usr/lib/jvm/java-13-openjdk/bin/java'' finished with non-zero exit value 1

Я не знаю, помогает ли мой build.gradle решить мою проблему, но вот это с моими зависимостями :

version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

apply plugin: 'java'
apply plugin: 'application'

dependencies {
    compile 'io.dropwizard:dropwizard-core:2.0.8'
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.glassfish.jersey.media', name: 'jersey-media-multipart', version: '3.0.0-M1'
}

mainClassName = 'Application'

run {
    args = ['server']
}

Я довольно беспомощен, много гуглюл насчет dropwizard и обнаружил, что они, очевидно, должны поддерживать Джакарту начиная с версии 2.0.0 . В настоящее время я использую версию 2.0.8, но все еще получаю эту внутреннюю ошибку.

1 Ответ

0 голосов
/ 30 апреля 2020

Я исправил это, используя собственную библиотеку dropwizard dropwizard-forms , а не jersey-media-multipart. Мои новые зависимости gradle теперь выглядят так:

dependencies {
    compile group: 'io.dropwizard', name: 'dropwizard-core', version: '2.0.8'
    compile 'io.dropwizard:dropwizard-forms:2.0.8'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

Теперь я могу снова использовать javax и не нужно переключаться на Джакарту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...