Support complex generic type response mapping procesing
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 42/100
Rechercherichtung
Beginne mit dem in Parser.kt und MappingParser.targetType gemeldeten Mapping-Parser und untersuche anschließend MappingConverter.kt und MappingErrorListener.kt. Reproduziere das dokumentierte Mapping für Map<String, List> und verfolge den Parserfehler. Erledigt ist es, wenn das verschachtelte generische Mapping ohne den gemeldeten Verarbeitungsfehler erfolgreich geparst wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Hi @hauner!
Processing response mapping of generic types with depth 1 works fine:
FooToBar => java.util.Map<java.lang.String, java.lang.String>
FooToBar => java.util.Map<java.lang.String, java.lang.List>
But it doesn't work with a complex generic types such as:
FooToBar => java.util.Map<java.lang.String, java.lang.List<java.lang.String>>
The output of processing:
line 1:64 no viable alternative at input 'java.util.Map<java.lang.String,java.lang.List<'
processing failed!
io.openapiprocessor.core.processor.mapping.v2.parser.antlr.MappingException: failed to parse mapping: FooToBar => java.util.Map<java.lang.String, java.lang.List<java.lang.String>>
at io.openapiprocessor.core.processor.mapping.v2.parser.antlr.ParserKt.parseMapping(Parser.kt:27)
at io.openapiprocessor.core.processor.mapping.v2.MappingConverter.convertType(MappingConverter.kt:91)
at io.openapiprocessor.core.processor.mapping.v2.MappingConverter.convert(MappingConverter.kt:44)
at io.openapiprocessor.core.processor.MappingConverter.convert(MappingConverter.kt:29)
at io.openapiprocessor.core.converter.OptionsConverter.readMapping(OptionsConverter.kt:69)
at io.openapiprocessor.core.converter.OptionsConverter.convertOptions(OptionsConverter.kt:34)
at io.openapiprocessor.spring.processor.SpringProcessor.convertOptions(SpringProcessor.kt:116)
at io.openapiprocessor.spring.processor.SpringProcessor.run(SpringProcessor.kt:45)
at io.openapiprocessor.gradle.OpenApiProcessorWorker.run(OpenApiProcessorWorker.java:36)
at io.openapiprocessor.gradle.OpenApiProcessorWorker.execute(OpenApiProcessorWorker.java:25)
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:49)
at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:43)
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:97)
at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:43)
at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49)
at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30)
at org.gradle.workers.internal.IsolatedClassloaderWorkerFactory$1.lambda$execute$0(IsolatedClassloaderWorkerFactory.java:57)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
at org.gradle.workers.internal.IsolatedClassloaderWorkerFactory$1.execute(IsolatedClassloaderWorkerFactory.java:49)
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$2(DefaultWorkerExecutor.java:205)
at java.base@18.0.1.1/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:187)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:120)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:162)
at org.gradle.internal.Factories$1.create(Factories.java:31)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:270)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:119)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:124)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:157)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:126)
at java.base@18.0.1.1/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base@18.0.1.1/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.base@18.0.1.1/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base@18.0.1.1/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base@18.0.1.1/java.lang.Thread.run(Thread.java:833)
Caused by: io.openapiprocessor.core.processor.mapping.v2.parser.antlr.MappingParserException: no viable alternative at input 'java.util.Map<java.lang.String,java.lang.List<'
at io.openapiprocessor.core.processor.mapping.v2.parser.antlr.MappingErrorListener.syntaxError(MappingErrorListener.kt:22)
at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41)
at org.antlr.v4.runtime.Parser.notifyErrorListeners(Parser.java:544)
at org.antlr.v4.runtime.DefaultErrorStrategy.reportNoViableAlternative(DefaultErrorStrategy.java:310)
at org.antlr.v4.runtime.DefaultErrorStrategy.reportError(DefaultErrorStrategy.java:136)
at io.openapiprocessor.core.processor.mapping.v2.parser.antlr.MappingParser.targetType(MappingParser.java:524)
at io.openapiprocessor.core.processor.mapping.v2.parser.antlr.MappingParser.map(MappingParser.java:276)
at io.openapiprocessor.core.processor.mapping.v2.parser.antlr.MappingParser.mapping(MappingParser.java:154)
at io.openapiprocessor.core.processor.mapping.v2.parser.antlr.ParserKt.parseMapping(Parser.kt:22)
... 47 more
Caused by: org.antlr.v4.runtime.NoViableAltException
at org.antlr.v4.runtime.atn.ParserATNSimulator.noViableAlt(ParserATNSimulator.java:2031)
at org.antlr.v4.runtime.atn.ParserATNSimulator.execATN(ParserATNSimulator.java:470)
at org.antlr.v4.runtime.atn.ParserATNSimulator.adaptivePredict(ParserATNSimulator.java:396)
at io.openapiprocessor.core.processor.mapping.v2.parser.antlr.MappingParser.targetType(MappingParser.java:510)
... 50 more
Caused by: io.openapiprocessor.core.processor.mapping.v2.parser.antlr.MappingParserException: no viable alternative at input 'java.util.Map<java.lang.String,java.lang.List<'
Caused by: org.antlr.v4.runtime.NoViableAltException
Execution failed for task '...:processSpring'.
> A failure occurred while executing io.openapiprocessor.gradle.OpenApiProcessorWorker
> failed to parse mapping: FooToBar => java.util.Map<java.lang.String, java.lang.List<java.lang.String>>
It would be useful to add complex generic types support.
- Vorherrschende Sprache
- Kotlin
- Sterne
- 56
- Forks
- 11
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 8
Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus openapi-processor/openapi-processor-spring
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
openapi-processor/openapi-processor-spring#334 · 2 Kommentare ·
-
Inheritance support Offen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 20/100
openapi-processor/openapi-processor-spring#159 · 1 Kommentar ·
-
undecided
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
openapi-processor/openapi-processor-spring#101 · 1 Kommentar ·
-
log unknown options Offenenhancement undecided
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
Alle Issues in openapi-processor/openapi-processor-spring
Ähnliche Issues
-
Bug Java Platform: Java
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
getsentry/sentry-java#6138 · 1 Kommentar ·
-
Icon Requests Offensupported
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
LawnchairLauncher/lawnicons#4100 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
-
Good First Issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
ankidroid/Anki-Android#21942 ·
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
libre-tube/LibreTube#8781 · 1 Kommentar ·