| Summary: | The el-resolver tag in faces-config.xml is not supported | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | [WebTools] Java Server Faces | Reporter: | Preston Appel <preston.appel> | ||||||
| Component: | Core | Assignee: | Cameron Bateman <cameron.bateman> | ||||||
| Status: | RESOLVED FIXED | QA Contact: | |||||||
| Severity: | normal | ||||||||
| Priority: | P3 | CC: | Andrew.McCulloch, gerry.kessler, preston.appel, raghunathan.srinivasan | ||||||
| Version: | unspecified | Flags: | raghunathan.srinivasan:
pmc_approved?
(david_williams) raghunathan.srinivasan: pmc_approved? (naci.dai) raghunathan.srinivasan: pmc_approved? (deboer) raghunathan.srinivasan: pmc_approved? (neil.hauge) raghunathan.srinivasan: pmc_approved? (kaloyan) raghunathan.srinivasan: pmc_approved+ raghunathan.srinivasan: review+ |
||||||
| Target Milestone: | 3.2.2 | ||||||||
| Hardware: | PC | ||||||||
| OS: | Windows XP | ||||||||
| URL: | ORACLE_P2 | ||||||||
| See Also: |
https://git.eclipse.org/r/114243 https://git.eclipse.org/c/jsf/webtools.jsf.git/commit/?id=7b894a73c3f4c57c7e4fa9d9aa5dca08cbb2f7cd |
||||||||
| Whiteboard: | PMC_approved | ||||||||
| Attachments: |
|
||||||||
Running the code through the debugger, I found that on entering this method
public int eDerivedStructuralFeatureID(EStructuralFeature
eStructuralFeature)
{
Class<?> containerClass = eStructuralFeature.getContainerClass();
if (containerClass == null)
{
return eClass().getFeatureID(eStructuralFeature);
}
else
{
assert
eClass().getEAllStructuralFeatures().contains(eStructuralFeature) : "The
feature '" + eStructuralFeature.getName() + "' is not a valid feature";
return eDerivedStructuralFeatureID(eStructuralFeature.getFeatureID(),
containerClass);
}
}
When the containerClass was
org.eclipse.jst.jsf.facesconfig.emf.PropertyResolverType, eClass() returned
org.eclipse.jst.jsf.facesconfig.emf.ELResolverType, and the
eStructuralFeature was name "textContent", the error occurred.
Created attachment 177154 [details]
Proposed patch
Looks like just a typo or copy/paste bug. The ELResolverTranslator was grabbing the "textContext" feature from the PropertyResolverType in the faces config package instead of getting it from the ELResolverType.
Created attachment 177268 [details]
2nd Proposed Patch
Patch the ELResolvertranslator and wrap the call to the JSFAppConfigProvider#getFacesConfigModels() in a saferunner
Further investigations into this bug revealed the following information: 1) Loss of service will only occur if the user is running with assertions enabled (-ea). 2) The translator framework generally seems to ignore this issue; the assertion that gets thrown is from within EMF. This is still an important issue to fix, is not API impacting. Andrew has also added additional robustness to the app config manager so that the failure in a single locator (in this case the jar locator) won't prevent other locators from executing. I am going to add -ea to the test suite also, so that it always runs with these assertions turned on. Patch applied to HEAD (3.2.2 and 3.3). Also updated test.xml in facesconfig.test to enable assertions when running the suite. * Explain why you believe this is a stop-ship defect. Or, if it is a "hotbug" (requested by an adopter) please document it as such. Break in Faces Config Editor when run with assertions enabled. Also, failure in one locator for the config file will prevent other locators from executing. * Is there a work-around? If so, why do you believe the work-around is insufficient? Run with out assertions, but this is not desirable. * How has the fix been tested? Is there a test case attached to the bugzilla record? Has a JUnit Test been added? Junit test updated * Give a brief technical overview. Who has reviewed this fix? See comment 4 * What is the risk associated with this fix? none-low New Gerrit change created: https://git.eclipse.org/r/114243 Gerrit change https://git.eclipse.org/r/114243 was merged to [master]. Commit: http://git.eclipse.org/c/jsf/webtools.jsf.git/commit/?id=7b894a73c3f4c57c7e4fa9d9aa5dca08cbb2f7cd |
Build Identifier: I20100608-0911 The el-resolver tag in faces-config.xml is not supported. Reproducible: Always Steps to Reproduce: 1. Use a jar that has a META-INF/faces-config.xml file with an el-resolver tag on the classpath 2. An exception will be thrown: java.lang.AssertionError: The feature 'textContent' is not a valid feature at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eDerivedStructuralFeatureID(BasicEObjectImpl.java:1510) at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1018) at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1013) at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1008) at org.eclipse.wst.common.internal.emf.resource.Translator.getMOFValue(Translator.java:609) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.primUpdateMOFFeature(EMF2DOMAdapterImpl.java:1474) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.updateMOFFeature(EMF2DOMAdapterImpl.java:1840) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.primUpdateMOF(EMF2DOMAdapterImpl.java:993) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.updateMOF(EMF2DOMAdapterImpl.java:973) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.primUpdateMOFMultiFeature(EMF2DOMAdapterImpl.java:522) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.primUpdateMOFMultiFeature(EMF2DOMAdapterImpl.java:1553) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.updateMOFMultiFeature(EMF2DOMAdapterImpl.java:1767) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.updateMOFFeature(EMF2DOMAdapterImpl.java:1822) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.primUpdateMOF(EMF2DOMAdapterImpl.java:993) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.updateMOF(EMF2DOMAdapterImpl.java:973) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.primUpdateMOFMultiFeature(EMF2DOMAdapterImpl.java:522) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.primUpdateMOFMultiFeature(EMF2DOMAdapterImpl.java:1553) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.updateMOFMultiFeature(EMF2DOMAdapterImpl.java:1767) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.updateMOFFeature(EMF2DOMAdapterImpl.java:1822) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.primUpdateMOF(EMF2DOMAdapterImpl.java:993) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.updateMOF(EMF2DOMAdapterImpl.java:973) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.primUpdateMOFMultiFeature(EMF2DOMAdapterImpl.java:522) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.updateMOFRootFeature(EMF2DOMAdapterImpl.java:1014) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.primUpdateMOF(EMF2DOMAdapterImpl.java:989) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapterImpl.updateMOF(EMF2DOMAdapterImpl.java:973) at org.eclipse.wst.common.internal.emf.resource.EMF2DOMRenderer.doLoad(EMF2DOMRenderer.java:64) at org.eclipse.wst.common.internal.emf.resource.TranslatorResourceImpl.basicDoLoad(TranslatorResourceImpl.java:153) at org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResourceImpl.doLoad(CompatibilityXMIResourceImpl.java:182) at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1494) at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1282) at org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResourceImpl.load(CompatibilityXMIResourceImpl.java:272) at org.eclipse.wst.common.internal.emf.resource.TranslatorResourceImpl.load(TranslatorResourceImpl.java:423) at org.eclipse.jst.jsf.core.jsfappconfig.JARFileJSFAppConfigProvider.getFacesConfig(JARFileJSFAppConfigProvider.java:196) at org.eclipse.jst.jsf.core.jsfappconfig.JARFileJSFAppConfigProvider.getFacesConfigModel(JARFileJSFAppConfigProvider.java:86) at org.eclipse.jst.jsf.core.jsfappconfig.internal.AbstractJSFAppConfigManager.getFacesConfigModels(AbstractJSFAppConfigManager.java:223) at org.eclipse.jst.jsf.core.jsfappconfig.JSFAppConfigManager.getFacesConfigModels(JSFAppConfigManager.java:74) at org.eclipse.jst.jsf.core.jsfappconfig.internal.AbstractJSFAppConfigManager.getApplications(AbstractJSFAppConfigManager.java:384) at org.eclipse.jst.jsf.core.jsfappconfig.JSFAppConfigManager.getApplications(JSFAppConfigManager.java:98) at org.eclipse.jst.jsf.core.jsfappconfig.internal.JSFAppConfigManagerFactory.createNewInstance(JSFAppConfigManagerFactory.java:64) at org.eclipse.jst.jsf.core.jsfappconfig.internal.JSFAppConfigManagerFactory.createNewInstance(JSFAppConfigManagerFactory.java:1) at org.eclipse.jst.jsf.common.internal.resource.ResourceSingletonObjectManager.getInstance(ResourceSingletonObjectManager.java:85) at org.eclipse.jst.jsf.core.jsfappconfig.internal.JSFAppConfigManagerFactory.getJSFAppConfigManagerInstance(JSFAppConfigManagerFactory.java:39) at oracle.eclipse.tools.webtier.jsf.JsfUtil$1.run(JsfUtil.java:182) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) at oracle.eclipse.tools.webtier.jsf.JsfUtil.getJSFAppConfigManagerInSchedulingRuleSafeManner(JsfUtil.java:200) at oracle.eclipse.tools.webtier.jsf.JSFTechnologyExtension$ExternalVariableProviderForJSF.getExternalVariables(JSFTechnologyExtension.java:264) at oracle.eclipse.tools.webtier.common.services.documentservices.WebtierDocumentServicesFactory$ExternalVariableProvider.getExternalVariables(WebtierDocumentServicesFactory.java:419) at oracle.eclipse.tools.webtier.common.services.variables.VariablesIterator.addExternalVars(VariablesIterator.java:106) at oracle.eclipse.tools.webtier.common.services.variables.VariablesIterator.computeVars(VariablesIterator.java:90) at oracle.eclipse.tools.webtier.common.services.variables.VariablesIterator.<init>(VariablesIterator.java:50) at oracle.eclipse.tools.webtier.common.services.variables.VariablesIterator.<init>(VariablesIterator.java:39) at oracle.eclipse.tools.webtier.common.services.variables.VariablesController.iterator(VariablesController.java:163) at oracle.eclipse.tools.webtier.ui.internal.palette.model.variable.VariablesModel.getVariablesSynchronously(VariablesModel.java:212) at oracle.eclipse.tools.webtier.ui.internal.palette.model.variable.VariablesModel.access$2(VariablesModel.java:204) at oracle.eclipse.tools.webtier.ui.internal.palette.model.variable.VariablesModel$1.run(VariablesModel.java:153) at oracle.eclipse.tools.common.services.ui.jobs.BackgroundJobExecutor$BackgroundThread.run(BackgroundJobExecutor.java:77)