Я пытаюсь заставить пользовательский интерфейс swagger работать с моей службой. Я использую Spring boot 2.0 и Java 9. Следующие зависимости добавлены для swagger.
compile('io.springfox:springfox-swagger2:2.8.0')
compile('io.springfox:springfox-swagger-ui:2.8.0')
swagger настроено как надо
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
Компилируется хорошо, но когда я запускаю приложение с помощью команды BootRun, происходит сбой из-за:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xmlModelPlugin': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [springfox.documentation.schema.XmlModelPlugin] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@4f8e5cde]
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlType
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 25 common frames omitted
В чем может быть проблема? Не совместим с Java9? Тогда можно как-нибудь заставить его работать?
Да вот несовместимость с java 9.
Думаю, у вас есть три варианта:
compile('javax.xml.bind:jaxb-api:2.3.0')--add-modules java.xml.bind в параметры запуска jvm (это больше просто обходной путь, а не исправление по сравнению с другими параметрами, поскольку этот модуль будет удален в более поздних версиях java)Дальнейшее чтение по Spring Boot и java 9: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9-and-above
@AlanBateman спасибо за комментарий. Обновленный ответ на основе этого
версия 2.9.0 не может быть найдена в maven central. Доступные версии: 2.9.1 и 2.9.2.
https://mvnrepository.com/artifact/io.springfox/springfox-swagger2
Как предложил @eis, после обновления с 2.8.0 до 2.9.2 проблема была решена для меня.
Я не уверен в этой конкретной ошибке, но в целом Swagger 2.9.x, похоже, имеет некоторую несовместимость с SpringBoot 2.0.x
Некоторые задокументированные проблемы: https://github.com/springfox/springfox/issues/1773 (основной) https://github.com/springfox/springfox/issues/2501
Существует версия 3.0.0-SNAPSHOT, которая может быть более стабильной с этой версией Spring Boot.
Согласно документации JDK 9,
--add-modules java.xml.bindявляется временным решением, поскольку java.xml.bind устарел в Java SE для удаления. Он уже был добавлен в сборки JDK 11 EA, подробности см. В JEP 320. Лучший вариант - перейти на автономную версию JAXB, API и реализацию можно загрузить с Maven Central.