When trying to execute the Javascript that the JSF
implementation MyFaces uses for "command links", there
is a NullPointerException (see below).
I've written a small testcase, which I attached
together with HTML files that provoke the error. The
code generated by MyFaces (test.html) is invalid HTML
and uses a syntaxy to access JS DOM elements that is
unusual, but versions that remove the unnecessary page
elements and some or all of the fishy things
(especially testC.html, which I even got to the point
where it validates against HTML 4.01 Strict) have
exactly the same result.
java.lang.NullPointerException
at
com.meterware.httpunit.TextFormControl$Scriptable.set(FormControl.java:793)
at
com.meterware.httpunit.javascript.JavaScript$JavaScriptEngine.put(JavaScript.java:275)
at
org.mozilla.javascript.ScriptRuntime.setProp(ScriptRuntime.java:832)
at org.mozilla.javascript.gen.c1.call(httpunit:3)
at
org.mozilla.javascript.optimizer.OptRuntime.callSimple(OptRuntime.java:281)
at org.mozilla.javascript.gen.c2.call(httpunit:6)
at org.mozilla.javascript.gen.c2.exec(httpunit)
at
org.mozilla.javascript.Context.evaluateReader(Context.java:773)
at
org.mozilla.javascript.Context.evaluateString(Context.java:737)
at
com.meterware.httpunit.javascript.JavaScript$JavaScriptEngine.executeScript(JavaScript.java:132)
at
com.meterware.httpunit.scripting.ScriptableDelegate.runScript(ScriptableDelegate.java:65)
at
com.meterware.httpunit.parsing.ScriptFilter.getTranslatedScript(ScriptFilter.java:151)
at
com.meterware.httpunit.parsing.ScriptFilter.endElement(ScriptFilter.java:131)
at
org.cyberneko.html.filters.DefaultFilter.endElement(Unknown
Source)
at
org.cyberneko.html.filters.NamespaceBinder.endElement(Unknown
Source)
at
org.cyberneko.html.HTMLTagBalancer.callEndElement(Unknown
Source)
at
org.cyberneko.html.HTMLTagBalancer.endElement(Unknown
Source)
at
org.cyberneko.html.HTMLScanner$SpecialScanner.scan(Unknown
Source)
at org.cyberneko.html.HTMLScanner.scanDocument(Unknown
Source)
at org.cyberneko.html.HTMLConfiguration.parse(Unknown
Source)
at org.cyberneko.html.HTMLConfiguration.parse(Unknown
Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown
Source)
at org.apache.xerces.parsers.DOMParser.parse(Unknown
Source)
at
com.meterware.httpunit.parsing.NekoHTMLParser.parse(NekoHTMLParser.java:41)
at
com.meterware.httpunit.HTMLPage.parse(HTMLPage.java:255)
at
com.meterware.httpunit.WebResponse.getReceivedPage(WebResponse.java:1126)
at
com.meterware.httpunit.WebResponse$Scriptable.load(WebResponse.java:688)
at
com.meterware.httpunit.javascript.JavaScript.load(JavaScript.java:89)
at
com.meterware.httpunit.javascript.JavaScriptEngineFactory.load(JavaScriptEngineFactory.java:58)
at
com.meterware.httpunit.RequestContext.runScripts(RequestContext.java:44)
at
com.meterware.httpunit.WebWindow.getResponse(WebWindow.java:122)
at
com.meterware.httpunit.WebWindow.getResponse(WebWindow.java:102)
at
com.meterware.httpunit.WebClient.getResponse(WebClient.java:87)
at de.ovsag.cool.HttpTest.testHttpUnit(HttpTest.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
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.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
java.lang.RuntimeException: Script '//<!--
function clear_linkDummyForm() {
var f = document.forms.linkDummyForm;
f.elements.linkDummyFormhidden.value=null;
f.target='';
}
clear_linkDummyForm();
//-->' failed: java.lang.NullPointerException
at
com.meterware.httpunit.javascript.JavaScript$JavaScriptEngine.handleScriptException(JavaScript.java:199)
at
com.meterware.httpunit.javascript.JavaScript$JavaScriptEngine.executeScript(JavaScript.java:136)
at
com.meterware.httpunit.scripting.ScriptableDelegate.runScript(ScriptableDelegate.java:65)
at
com.meterware.httpunit.parsing.ScriptFilter.getTranslatedScript(ScriptFilter.java:151)
at
com.meterware.httpunit.parsing.ScriptFilter.endElement(ScriptFilter.java:131)
at
org.cyberneko.html.filters.DefaultFilter.endElement(Unknown
Source)
at
org.cyberneko.html.filters.NamespaceBinder.endElement(Unknown
Source)
at
org.cyberneko.html.HTMLTagBalancer.callEndElement(Unknown
Source)
at
org.cyberneko.html.HTMLTagBalancer.endElement(Unknown
Source)
at
org.cyberneko.html.HTMLScanner$SpecialScanner.scan(Unknown
Source)
at org.cyberneko.html.HTMLScanner.scanDocument(Unknown
Source)
at org.cyberneko.html.HTMLConfiguration.parse(Unknown
Source)
at org.cyberneko.html.HTMLConfiguration.parse(Unknown
Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown
Source)
at org.apache.xerces.parsers.DOMParser.parse(Unknown
Source)
at
com.meterware.httpunit.parsing.NekoHTMLParser.parse(NekoHTMLParser.java:41)
at
com.meterware.httpunit.HTMLPage.parse(HTMLPage.java:255)
at
com.meterware.httpunit.WebResponse.getReceivedPage(WebResponse.java:1126)
at
com.meterware.httpunit.WebResponse$Scriptable.load(WebResponse.java:688)
at
com.meterware.httpunit.javascript.JavaScript.load(JavaScript.java:89)
at
com.meterware.httpunit.javascript.JavaScriptEngineFactory.load(JavaScriptEngineFactory.java:58)
at
com.meterware.httpunit.RequestContext.runScripts(RequestContext.java:44)
at
com.meterware.httpunit.WebWindow.getResponse(WebWindow.java:122)
at
com.meterware.httpunit.WebWindow.getResponse(WebWindow.java:102)
at
com.meterware.httpunit.WebClient.getResponse(WebClient.java:87)
at de.ovsag.cool.HttpTest.testHttpUnit(HttpTest.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
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.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
Test case
Logged In: YES
user_id=37920
The change is now in cvs and will be in the next build