Hi I am preparing a demo for my computer science undergraduate students from semester 2020.1 and am having this error when adding Swagger.
Describe the bug
Fail on startup with Swagger with quarkus-smallrye-openapi
Expected behavior
Start Swagger Ui on /swagger-ui
Actual behavior
Fail on startup
To Reproduce
Steps to reproduce the behavior:
# Add your application.properties here, if applicable.
# Configuration file
# key = value
quarkus.http.port=8080
#datasource
quarkus.datasource.url=jdbc:h2:file:~/papw2019
quarkus.datasource.driver=org.h2.Driver
quarkus.datasource.username=sa
quarkus.datasource.password=
quarkus.datasource.max-size=8
quarkus.datasource.min-size=2
quarkus.hibernate-orm.database.generation=drop-and-create
#Swagger
quarkus.smallrye-openapi.path=/swagger
quarkus.swagger-ui.always-include=true
Screenshots
(If applicable, add screenshots to help explain your problem.)
Environment (please complete the following information):
uname -a
or ver
: java -version
: Additional context
Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[error]: Build step io.quarkus.smallrye.openapi.deployment.SmallRyeOpenApiProcessor#build threw an exception: java.lang.StringIndexOutOfBoundsException: St
ring index out of range: 3
at java.lang.String.charAt(String.java:658)
at io.smallrye.openapi.runtime.scanner.dataobject.TypeResolver.updateTypeResolvers(TypeResolver.java:456)
at io.smallrye.openapi.runtime.scanner.dataobject.TypeResolver.scanMethod(TypeResolver.java:426)
at io.smallrye.openapi.runtime.scanner.dataobject.TypeResolver.lambda$getAllFields$4(TypeResolver.java:355)
at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at io.smallrye.openapi.runtime.scanner.dataobject.TypeResolver.getAllFields(TypeResolver.java:355)
at io.smallrye.openapi.runtime.scanner.OpenApiDataObjectScanner.depthFirstGraphSearch(OpenApiDataObjectScanner.java:247)
at io.smallrye.openapi.runtime.scanner.OpenApiDataObjectScanner.process(OpenApiDataObjectScanner.java:221)
at io.smallrye.openapi.runtime.scanner.OpenApiDataObjectScanner.process(OpenApiDataObjectScanner.java:168)
at io.smallrye.openapi.runtime.util.SchemaFactory.typeToSchema(SchemaFactory.java:240)
at io.smallrye.openapi.runtime.scanner.OpenApiAnnotationScanner.createResponseFromJaxRsMethod(OpenApiAnnotationScanner.java:877)
at io.smallrye.openapi.runtime.scanner.OpenApiAnnotationScanner.processJaxRsMethod(OpenApiAnnotationScanner.java:685)
at io.smallrye.openapi.runtime.scanner.OpenApiAnnotationScanner.processJaxRsResourceClass(OpenApiAnnotationScanner.java:437)
at io.smallrye.openapi.runtime.scanner.OpenApiAnnotationScanner.scan(OpenApiAnnotationScanner.java:214)
at io.quarkus.smallrye.openapi.deployment.SmallRyeOpenApiProcessor.generateAnnotationModel(SmallRyeOpenApiProcessor.java:298)
at io.quarkus.smallrye.openapi.deployment.SmallRyeOpenApiProcessor.build(SmallRyeOpenApiProcessor.java:246)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at io.quarkus.deployment.ExtensionLoader$1.execute(ExtensionLoader.java:941)
at io.quarkus.builder.BuildContext.run(BuildContext.java:415)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2011)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1535)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1426)
at java.lang.Thread.run(Thread.java:748)
at org.jboss.threads.JBossThread.run(JBossThread.java:479)
at io.quarkus.builder.Execution.run(Execution.java:108)
at io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:121)
at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:130)
at io.quarkus.runner.RuntimeRunner.run(RuntimeRunner.java:111)
... 3 more
Hi @rodrigofujioka thanks for reporting this. It looks to me the same issue as
https://github.com/quarkusio/quarkus/issues/5376
Do you have an Optional param or return type? If so can you try the workaround suggested on the issue.
@EricWittmann has opened https://github.com/smallrye/smallrye-open-api/issues/210 to discuss on potential fixes on smallrye-openapi side.
Exactly that, the bug is the same. Thanks, I already made changes here. I'll be following to update my code later. After all, I will only use it at the beginning of 2020.1 for Java Web classes.
Thanks @machi1990 .
Closing as duplicate of #5376