Hi experts!

It's my first time posting in this forum, I hope I'm not out of line with my question.

I have a small application that uses Nashorn and JavaScript to extend the functionality without the need to write/compile Java classes.

My JavaScript file is used to extend an abstract class and it works fine in Java 8 but when I try to run it with "Java(TM) SE Runtime Environment (build 9+181)" EA it throws an exception. This is on Windows 10 64-bit.

I'm able to pinpoint it to a specific row in my JavaScript file, if I comment out that row, then the script loads fine.

The script is available on Github, if I activate row 65 it gives me the exception:

https://github.com/idsecurity/LDIFTransform/blob/master/doc/transformer-template.js

The specific snippet is here:

function getTransformer(propertiesFile) {

    var tc = new TransformerCommon(propertiesFile,
        //Modify this function to perform all necessary processing on the LDIF entry
        { translate: function(entry, firstLineNumber) {
        //Use _super_.methodName() to call methods from the TransformerCommon class.
        var _super_ = Java.super(tc);

        //Uncomment to remove attributes specified by the 'delete-attribute' property
        entry = removeAttributes(entry, _super_.getAttributesToDelete());

        return entry;
        }});
    return tc;
};

The specific row that gives me trouble is:

entry = removeAttributes(entry, _super_.getAttributesToDelete());

That is, if I somehow try to change the "entry" variable it will throw the exception:

Exception in thread "main" java.lang.invoke.WrongMethodTypeException: cannot convert MethodHandle(ScriptFunction,Object,Object,Object)int to (ScriptFunction,Object,Object,Object)Entry     at java.base/java.lang.invoke.MethodHandle.asTypeUncached(MethodHandle.java:786)     at java.base/java.lang.invoke.MethodHandle.asType(MethodHandle.java:772)     at jdk.dynalink/jdk.dynalink.TypeConverterFactory.asType(TypeConverterFactory.java:280)     at jdk.dynalink/jdk.dynalink.LinkerServicesImpl.asType(LinkerServicesImpl.java:131)     at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction.changeReturnType(CompiledFunction.java:731)     at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction.createInvoker(CompiledFunction.java:715)     at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction.access$200(CompiledFunction.java:62)     at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction$2.get(CompiledFunction.java:677)     at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction$2.get(CompiledFunction.java:674)     at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction.getValidOptimisticInvocation(CompiledFunction.java:620)     at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.CompiledFunction.createFunctionInvocation(CompiledFunction.java:674)     at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.findCallMethod(ScriptFunction.java:949)     at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptObject.lookup(ScriptObject.java:1874)     at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.linker.NashornLinker.getGuardedInvocation(NashornLinker.java:104)     at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.linker.NashornLinker.getGuardedInvocation(NashornLinker.java:96)     at jdk.dynalink/jdk.dynalink.linker.support.CompositeTypeBasedGuardingDynamicLinker.getGuardedInvocation(CompositeTypeBasedGuardingDynamicLinker.java:184)     at jdk.dynalink/jdk.dynalink.linker.support.CompositeGuardingDynamicLinker.getGuardedInvocation(CompositeGuardingDynamicLinker.java:132)     at jdk.dynalink/jdk.dynalink.LinkerServicesImpl.lambda$getGuardedInvocation$0(LinkerServicesImpl.java:160)     at jdk.dynalink/jdk.dynalink.LinkerServicesImpl.getWithLookupInternal(LinkerServicesImpl.java:191)     at jdk.dynalink/jdk.dynalink.LinkerServicesImpl.getGuardedInvocation(LinkerServicesImpl.java:158)     at jdk.dynalink/jdk.dynalink.DynamicLinker.relink(DynamicLinker.java:265)     at jdk.nashorn.javaadapters.se_idsecurity_LDIFTransform_TransformerCommon.translate(Unknown Source)     at com.unboundid.ldif.LDIFReader.readEntryInternal(LDIFReader.java:1701)
    at com.unboundid.ldif.LDIFReader.readEntry(LDIFReader.java:1277)
    at se.idsecurity.LDIFTransform.LDIFTransform.main(LDIFTransform.java:106)

I have also tried to store the results in a temp variable "x" but as soon I try to replace entry with x, for example:

entry = x

Or if I try to "return x", I get the above exception.

I'm looking for tips on how I can troubleshoot this further, maybe I my code is written incorrectly?

The Java 8 version which I'm also testing with and that works is:

java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

Thanks,
Aleksandar


Reply via email to