[ 
https://issues.apache.org/jira/browse/MYFACES-2745?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12876256#action_12876256
 ] 

Werner Punz edited comment on MYFACES-2745 at 6/7/10 11:00 AM:
---------------------------------------------------------------

Ok I made a test setup and a small fixup and the problem seems to be the 
exmascript parser of html unit which chokes on prototypes, which means the 
entire inheritance part we are based of is invalidated by it.
I will dig further into the issue, but I think the ecmascript parser of 
htmlunit has a problem here, which the normal browsers do not have.
Not sure why htmlunit is able to cope with other libraries which do exactly the 
same as we do, in the meanwhile I will commit the first small fixup before 
going further.
This is a nasty problem.

The problem seems to be that the prototype inheritance mechanism which works 
perfectly fine in any browser supporting prototype functions fails in the 
ecmascript parts of html unit, please give me a few days to investigate the 
problem (since I have to work in my sparetime on this)

I am not sure why it fails I have to isolate the problem and if it is the core 
javascript engine, have to get in contact with the html unit guys. Have in mind 
I am doing this in my sparetime.


      was (Author: werpu):
    Ok I made a test setup and a small fixup and the problem seems to be the 
exmascript parser of html unit which chokes on prototypes, which means the 
entire inheritance part we are based of is invalidated by it.
I will dig further into the issue, but I think the ecmascript parser of 
htmlunit has a problem here, which the normal browsers do not have.
Not sure why htmlunit is able to cope with other libraries which do exactly the 
same as we do, in the meanwhile I will commit the first small fixup before 
going further.
This is a nasty problem.

  
> Cannot set property "_mfProto" of null to "null" error with new javascript
> --------------------------------------------------------------------------
>
>                 Key: MYFACES-2745
>                 URL: https://issues.apache.org/jira/browse/MYFACES-2745
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-314
>    Affects Versions: 2.0.1
>            Reporter: Michael Concini
>
> The javascript changes from 5/25 have caused a regression when using htmlunit 
> against even the simplest JSF page as long as it loads the jsf.js script.  
> The exception occurs simply executing getPage() on the webClient.
>         WebClient webClient = new WebClient();
>         HtmlPage page = 
> webClient.getPage("http://localhost:8080/JSF20AJAXTag/DisabledFalse.jsf";);
> It can be recreated by a page with nothing but this form in the body:
>  <h:form id="form1" prependId="false">
>         <h:outputText id="out1" value="This is broken"/>
>         <h:outputScript name="jsf.js" library="javax.faces" target="head" />
>     </h:form>
> Attached is the exception trace from a run this morning which includes 
> Werner's changes from MYFACES-2742 this morning so we are up to date in our 
> sandbox. 
> ======= EXCEPTION START ========
> EcmaError: lineNumber=[51] column=[0] lineSource=[<no source>] 
> name=[TypeError] 
> sourceName=[http://localhost:8080/JSF20AJAXTag/javax.faces.resource/jsf.js.jsf?ln=javax.faces]
>  message=[TypeError: Cannot set property "_mfProto" of null to "null" 
> (http://localhost:8080/JSF20AJAXTag/javax.faces.resource/jsf.js.jsf?ln=javax.faces#51)]
> com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot set property 
> "_mfProto" of null to "null" 
> (http://localhost:8080/JSF20AJAXTag/javax.faces.resource/jsf.js.jsf?ln=javax.faces#51)
>       at 
> com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:527)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
>       at 
> com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:425)
>       at 
> com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:980)
>       at 
> com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:353)
>       at 
> com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute(HtmlScript.java:215)
>       at 
> com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:235)
>       at 
> com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:718)
>       at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown 
> Source)
>       at 
> com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:676)
>       at 
> org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1136)
>       at 
> org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1038)
>       at 
> org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
>       at 
> org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:329)
>       at 
> org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:2999)
>       at 
> org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:1991)
>       at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:895)
>       at 
> org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
>       at 
> org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
>       at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
>       at 
> com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:896)
>       at 
> com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:350)
>       at 
> com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:304)
>       at 
> com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:134)
>       at 
> com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:101)
>       at 
> com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:420)
>       at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:303)
>       at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:360)
>       at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:345)
>       at com.ibm.mike.TestJS.homePage(TestJS.java:19)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
>       at java.lang.reflect.Method.invoke(Method.java:600)
>       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 
> 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: net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: 
> Cannot set property "_mfProto" of null to "null" 
> (http://localhost:8080/JSF20AJAXTag/javax.faces.resource/jsf.js.jsf?ln=javax.faces#51)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3753)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3731)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3759)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError3(ScriptRuntime.java:3785)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.undefWriteError(ScriptRuntime.java:3807)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.setObjectElem(ScriptRuntime.java:1578)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1450)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:845)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:164)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:429)
>       at 
> com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:264)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3157)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:175)
>       at 
> com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:416)
>       at 
> com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:521)
>       ... 46 more
> Enclosed exception: 
> net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot set 
> property "_mfProto" of null to "null" 
> (http://localhost:8080/JSF20AJAXTag/javax.faces.resource/jsf.js.jsf?ln=javax.faces#51)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3753)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3731)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3759)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError3(ScriptRuntime.java:3785)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.undefWriteError(ScriptRuntime.java:3807)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.setObjectElem(ScriptRuntime.java:1578)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1450)
>       at 
> script(http://localhost:8080/JSF20AJAXTag/javax.faces.resource/jsf.js.jsf?ln=javax.faces:51)
>       at 
> script(http://localhost:8080/JSF20AJAXTag/javax.faces.resource/jsf.js.jsf?ln=javax.faces:48)
>       at 
> script(http://localhost:8080/JSF20AJAXTag/javax.faces.resource/jsf.js.jsf?ln=javax.faces:65)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:845)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:164)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:429)
>       at 
> com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:264)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3157)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:175)
>       at 
> com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:416)
>       at 
> com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:521)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:537)
>       at 
> net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:538)
>       at 
> com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:425)
>       at 
> com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:980)
>       at 
> com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:353)
>       at 
> com.gargoylesoftware.htmlunit.html.HtmlScript$1.execute(HtmlScript.java:215)
>       at 
> com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:235)
>       at 
> com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:718)
>       at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown 
> Source)
>       at 
> com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.endElement(HTMLParser.java:676)
>       at 
> org.cyberneko.html.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1136)
>       at 
> org.cyberneko.html.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1038)
>       at 
> org.cyberneko.html.filters.DefaultFilter.endElement(DefaultFilter.java:206)
>       at 
> org.cyberneko.html.filters.NamespaceBinder.endElement(NamespaceBinder.java:329)
>       at 
> org.cyberneko.html.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:2999)
>       at 
> org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:1991)
>       at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:895)
>       at 
> org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
>       at 
> org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
>       at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
>       at 
> com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.parse(HTMLParser.java:896)
>       at 
> com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:350)
>       at 
> com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:304)
>       at 
> com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:134)
>       at 
> com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:101)
>       at 
> com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:420)
>       at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:303)
>       at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:360)
>       at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:345)
>       at com.ibm.mike.TestJS.homePage(TestJS.java:19)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
>       at java.lang.reflect.Method.invoke(Method.java:600)
>       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 
> 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)
> ======= EXCEPTION END ========

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to