Uploaded image for project: 'Commons JXPath'
  1. Commons JXPath
  2. JXPATH-166

JXPathContextReferenceImpl.addNodePointerFactory not working anymore

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • Nightly Builds
    • 1.4, Nightly Builds
    • None

    Description

      I tried the following in a single test run in isolation:

      JXPathContextReferenceImpl.addNodePointerFactory(new ContainerPointerFactory());

      and got ExceptionInInitializer, I see a refactoring for JXPathContext done by ggregory in last (recent) revision 1523175. Reverting to previous 1234255 fixes the issue.

      The refactoring contains some static-init code in JXPathContext that creates an instance of a subclass of JXPathContext itself... seems to trigger one of the rare occasions in which a static final field might be null, as happens then in a JXPathContextReferenceImpl constructor where final field nodeFactories is null. My understanding is this: a call to any static method of JXPathContextReferenceImpl triggers load of JXPathContext class that executes static initialization code that creates a new JXPathContext that in turn is an other JXPathContextReferenceImpl with static final field null since the static initializer of its super class must still terminate. See something similar in http://stackoverflow.com/a/2547638/1536382 and http://stackoverflow.com/questions/2547713/why-static-fields-are-not-initialized-in-time

      My fix is either to restore the volatile lazy initializaton just for compilationContext or, perhaps (not sure), just create a new context each time in the compile(xpath) static method.

      java.lang.ExceptionInInitializerError
      	at org.apache.commons.jxpath.ri.AddNodePointerFactoryTest.testAddFactory(AddNodePointerFactoryTest.java:32)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:606)
      	at junit.framework.TestCase.runTest(TestCase.java:154)
      	at junit.framework.TestCase.runBare(TestCase.java:127)
      	at junit.framework.TestResult$1.protect(TestResult.java:106)
      	at junit.framework.TestResult.runProtected(TestResult.java:124)
      	at junit.framework.TestResult.run(TestResult.java:109)
      	at junit.framework.TestCase.run(TestCase.java:118)
      	at junit.framework.TestSuite.runTest(TestSuite.java:208)
      	at junit.framework.TestSuite.run(TestSuite.java:203)
      	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
      	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
      	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
      	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
      	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
      	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
      Caused by: java.lang.NullPointerException
      	at org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.<init>(JXPathContextReferenceImpl.java:191)
      	at org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.<init>(JXPathContextReferenceImpl.java:178)
      	at org.apache.commons.jxpath.ri.JXPathContextFactoryReferenceImpl.newContext(JXPathContextFactoryReferenceImpl.java:39)
      	at org.apache.commons.jxpath.JXPathContext.newContext(JXPathContext.java:425)
      	at org.apache.commons.jxpath.JXPathContext.<clinit>(JXPathContext.java:389)
      	... 19 more
      
      

      Attachments

        Issue Links

          Activity

            People

              ggregory Gary D. Gregory
              vivodamichele@hotmail.com Michele Vivoda
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - 5m
                  5m
                  Remaining:
                  Remaining Estimate - 5m
                  5m
                  Logged:
                  Time Spent - Not Specified
                  Not Specified