Skip to content

Jackson 3 breaks FastDoubleParser - problem with shading #1498

@m-burst

Description

@m-burst

We have a project that has FastDoubleParser (ch.randelshofer:fastdoubleparser:2.0.1) as a dependency.

After an upgrade of another dependency transitively brought in Jackson 3.0.1, we saw the following error in our application:

java.lang.NoClassDefFoundError: ch/randelshofer/fastdoubleparser/FastIntegerMath (wrong name: tools/jackson/core/internal/shaded/fdp/FastIntegerMath)
  at java.base/java.lang.ClassLoader.defineClass1(Native Method)
  at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
  at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)
  at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(Unknown Source)
  at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(Unknown Source)
  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Unknown Source)
  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
  at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
  at ch.randelshofer.fastdoubleparser.FastDoubleMath.tryDecToDoubleWithFastAlgorithm(FastDoubleMath.java:891)
  at ch.randelshofer.fastdoubleparser.FastDoubleMath.tryDecFloatToDoubleTruncated(FastDoubleMath.java:795)
  at ch.randelshofer.fastdoubleparser.JavaDoubleBitsFromCharSequence.valueOfFloatLiteral(JavaDoubleBitsFromCharSequence.java:38)
  at ch.randelshofer.fastdoubleparser.AbstractJavaFloatingPointBitsFromCharSequence.parseDecFloatLiteral(AbstractJavaFloatingPointBitsFromCharSequence.java:184)
  at ch.randelshofer.fastdoubleparser.AbstractJavaFloatingPointBitsFromCharSequence.parseFloatingPointLiteral(AbstractJavaFloatingPointBitsFromCharSequence.java:238)
  at ch.randelshofer.fastdoubleparser.JavaDoubleParser.parseDouble(JavaDoubleParser.java:190)
  at ch.randelshofer.fastdoubleparser.JavaDoubleParser.parseDouble(JavaDoubleParser.java:174)
  at (our code)

I investigated the error and found out that ch/randelshofer/fastdoubleparser/FastIntegerMath.class appears on our classpath twice:

  • the correct version inside fastdoubleparser-2.0.1.jar,
  • and another version inside jackson-core-3.0.1.jar, which apparently was intended to be shaded, but still appears in the JAR under the original qualified name.

Because of this, if the Jackson JAR appears on the classpath before the FastDoubleParser JAR, FastDoubleParser fails.

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.0Issue planned for initial 3.0 release

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions