Community
Participate
Working Groups
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)
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