Error trying to use slf4j
Jim Laskey (Oracle)
james.laskey at oracle.com
Sun Jan 6 10:46:33 PST 2013
Bug filed : 8005777 (internal)
On 2013-01-06, at 2:07 PM, Remi Forax <forax at univ-mlv.fr> wrote:
> On 01/06/2013 05:43 PM, Bryan Castillo wrote:
>> I just ran into an error using Nashorn today with slf4j. I don't see this
>> error with Rhino.
>
> It's a bug in the FacetIntrospector of dynalink, if the class is not public, the introspector should try to find a super class or an interface that declares the method, here Object::toString.
>
> Rémi
>
>>
>> source:
>> ----------------
>>
>> package bcc;
>>
>> import javax.script.ScriptEngine;
>> import javax.script.ScriptEngineManager;
>>
>> public class UseSlf4j {
>>
>> public static void main(String[] args) throws Exception {
>> ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
>> engine.eval(
>> "var logger =
>> Packages.org.slf4j.LoggerFactory.getLogger('my_script');\n" +
>> "java.lang.System.out.println('Here is a logger: ' + logger);\n" +
>> "logger.info('From a script.');"
>> );
>> }
>>
>> }
>>
>>
>> output:
>> -----------------
>>
>> Here is a logger: org.slf4j.impl.Log4jLoggerAdapter(my_script)
>> Exception in thread "main" java.lang.IllegalAccessError: Failed to
>> unreflect method public java.lang.String
>> org.slf4j.helpers.NamedLoggerBase.getName()
>> at org.dynalang.dynalink.support.Lookup.unreflect(Lookup.java:61)
>> at
>> org.dynalang.dynalink.beans.FacetIntrospector.unreflect(FacetIntrospector.java:113)
>> at
>> org.dynalang.dynalink.beans.AbstractJavaLinker.<init>(AbstractJavaLinker.java:101)
>> at org.dynalang.dynalink.beans.BeanLinker.<init>(BeanLinker.java:44)
>> at
>> org.dynalang.dynalink.beans.BeansLinker$1.computeValue(BeansLinker.java:71)
>> at
>> org.dynalang.dynalink.beans.BeansLinker$1.computeValue(BeansLinker.java:67)
>> at java.lang.ClassValue.getFromHashMap(ClassValue.java:227)
>> at java.lang.ClassValue.getFromBackup(ClassValue.java:209)
>> at java.lang.ClassValue.get(ClassValue.java:115)
>> at
>> org.dynalang.dynalink.beans.BeansLinker.getLinkerForClass(BeansLinker.java:93)
>> at
>> org.dynalang.dynalink.beans.BeansLinker.getGuardedInvocation(BeansLinker.java:111)
>> at
>> org.dynalang.dynalink.support.CompositeGuardingDynamicLinker.getGuardedInvocation(CompositeGuardingDynamicLinker.java:58)
>> at
>> org.dynalang.dynalink.support.LinkerServicesImpl.getGuardedInvocation(LinkerServicesImpl.java:72)
>> at org.dynalang.dynalink.DynamicLinker.relink(DynamicLinker.java:163)
>> at jdk.nashorn.internal.scripts.Script$?003Ceval?003E.runScript(<eval>:3)
>> at
>> jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:359)
>> at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:310)
>> at
>> jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:438)
>> at
>> jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:423)
>> at
>> jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:150)
>> at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
>> at bcc.UseSlf4j.main(UseSlf4j.java:10)
>> Caused by: java.lang.IllegalAccessException: class is not public:
>> org.slf4j.helpers.NamedLoggerBase.getName()String/invokeVirtual, from
>> java.lang.Object/public
>> at java.lang.invoke.MemberName.makeAccessException(MemberName.java:732)
>> at
>> java.lang.invoke.MethodHandles$Lookup.checkAccess(MethodHandles.java:1135)
>> at
>> java.lang.invoke.MethodHandles$Lookup.checkMethod(MethodHandles.java:1098)
>> at
>> java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(MethodHandles.java:1209)
>> at
>> java.lang.invoke.MethodHandles$Lookup.getDirectMethod(MethodHandles.java:1199)
>> at java.lang.invoke.MethodHandles$Lookup.unreflect(MethodHandles.java:914)
>> at org.dynalang.dynalink.support.Lookup.unreflect(Lookup.java:59)
>> ... 21 more
>>
>>
>>
>> jdk:
>> -----------------
>>
>> C:\Users\bcastill>"c:\Program Files\Java\jdk1.8.0\bin\java" -version
>> java version "1.8.0-ea"
>> Java(TM) SE Runtime Environment (build 1.8.0-ea-b71)
>> Java HotSpot(TM) 64-Bit Server VM (build 25.0-b14, mixed mode)
>>
>>
>> Nashorn version:
>> ------------------------------------------
>>
>> bcastill at US-SEA-R9CMKD3 /cygdrive/c/bcastill/nashorn
>> $ hg log -l 1
>> changeset: 6:5a1b0714df0e
>> tag: tip
>> user: jlaskey
>> date: Fri Jan 04 09:58:33 2013 -0400
>> summary: 8005663: Update copyright year to 2013
>>
>>
>>
>> Slf4j related jars:
>> ----------------------------------
>> $ ls -l *slf4j*.jar log*.jar
>> ----------+ 1 bcastill Domain Users 17308 Jan 5 21:59
>> jcl-over-slf4j-1.6.1.jar
>> ----------+ 1 bcastill Domain Users 481534 Jan 5 22:00 log4j-1.2.16.jar
>> ----------+ 1 bcastill Domain Users 25496 Jan 5 21:59 slf4j-api-1.6.1.jar
>> ----------+ 1 bcastill Domain Users 9753 Jan 5 21:59
>> slf4j-log4j12-1.6.1.jar
>
More information about the nashorn-dev
mailing list