vojtechhabarta / typescript-generator

Generates TypeScript from Java - JSON declarations, REST service client

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NoClassDefFoundError: jakarta/xml/bind/JAXBElement

viveleroi opened this issue · comments

I'm trying to use the generator class from a custom java class we execute from gradle. Using the gradle plugin with the same settings worked fine but now that I've ported things to our java class, it scans the classes but then throws the following error on java 11:

Scanning classpath
Scanning finished in 1.05 seconds. Total number of classes: 29258.
Found 3 classes matching pattern.
Exception in thread "main" java.lang.NoClassDefFoundError: jakarta/xml/bind/JAXBElement
        at cz.habarta.typescript.generator.DefaultTypeProcessor.getKnownClasses(DefaultTypeProcessor.java:236)
        at cz.habarta.typescript.generator.DefaultTypeProcessor.<init>(DefaultTypeProcessor.java:41)
        at cz.habarta.typescript.generator.TypeScriptGenerator.createTypeProcessor(TypeScriptGenerator.java:169)
        at cz.habarta.typescript.generator.TypeScriptGenerator.getCommonTypeProcessor(TypeScriptGenerator.java:156)
        at cz.habarta.typescript.generator.TypeScriptGenerator.lambda$createModelParser$1(TypeScriptGenerator.java:184)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
        at cz.habarta.typescript.generator.TypeScriptGenerator.createModelParser(TypeScriptGenerator.java:185)
        at cz.habarta.typescript.generator.TypeScriptGenerator.getModelParser(TypeScriptGenerator.java:176)
        at cz.habarta.typescript.generator.TypeScriptGenerator.generateTypeScript(TypeScriptGenerator.java:73)
        at cz.habarta.typescript.generator.TypeScriptGenerator.generateTypeScript(TypeScriptGenerator.java:68)
        at mil.navy.msc.tatsu.util.TypescriptGenerator.main(TypescriptGenerator.java:96)
Caused by: java.lang.ClassNotFoundException: jakarta.xml.bind.JAXBElement
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        ... 17 more

Here's the java I'm using:

  Settings settings = new Settings();
  settings.indentString = "  ";
  settings.jsonLibrary = JsonLibrary.jackson2;
  settings.noEslintDisable = true;
  settings.noFileComment = true;
  settings.noTslintDisable = true;
  settings.outputKind = TypeScriptOutputKind.module;

  TypeScriptGenerator generator = new TypeScriptGenerator(settings);

  Parameters tsGenParameters = new Parameters();
  tsGenParameters.classNamePatterns = new ArrayList<>();
  tsGenParameters.classNamePatterns.add("com.example.model.*");
  String definitions = generator.generateTypeScript(Input.from(tsGenParameters));

This code worked just fine when I used the gradle plugin:

generateTypeScript {
  jsonLibrary = 'jackson2'
  classPatterns = [
    'com.example.model.**'
  ]
  indentString = '  '
  noEslintDisable = true
  noFileComment = true
  noTslintDisable = true
  outputKind = 'module'
  outputFile = './app/types/api.d.ts'
}

Because the error is coming from this library and there's no clear documentation on java usage, I can't tell if I've missed something or if this is a bug.

Looking at the gradle libs, the jakarta lib has a javax package name, not jakarta like the error:

idea64_giPnpaCBNE

The problem is that we have another dependency that includes v2.3.3 of the bind-api and gradle is forcing resolution to 2.3.3