Bug 234404

Summary: [hotbug] web.xml is corrupted when using add new Servlet wizard
Product: [WebTools] WTP Java EE Tools Reporter: Andrew McCulloch <Andrew.McCulloch>
Component: jst.j2eeAssignee: Chuck Bridgham <cbridgha>
Status: RESOLVED FIXED QA Contact: Chuck Bridgham <cbridgha>
Severity: critical    
Priority: P3 CC: Andrew.McCulloch, ccc, danny.ju, david_williams, dimitar.giormov, hjzhang, kaloyan, konstantin, raghunathan.srinivasan, thatnitind
Version: 2.0.2Flags: david_williams: pmc_approved+
raghunathan.srinivasan: pmc_approved+
cbridgha: pmc_approved? (naci.dai)
cbridgha: pmc_approved? (deboer)
cbridgha: pmc_approved? (neil.hauge)
kaloyan: pmc_approved+
Target Milestone: 3.0 RC4   
Hardware: PC   
OS: Windows XP   
Whiteboard: PMC_approved
Bug Depends on:    
Bug Blocks: 235893    
Attachments:
Description Flags
patch none

Description Andrew McCulloch CLA 2008-05-28 11:55:21 EDT
Build ID:  M20080221-1800

Steps To Reproduce:
1. Create a new Dynamic web project with Web Module 2.5 Facet and Java 5.0
2. Add a tag-lib element to the new web.xml...  See sample below

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         id="WebApp_ID" 
         version="2.5">
  <display-name>sample</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <jsp-config>
  	<taglib>
  		<taglib-uri>myURI</taglib-uri>
  		<taglib-location>myLocation</taglib-location>
  	</taglib>
  </jsp-config>
</web-app>


3. Invoke the Add New Servlet Wizard after the wizard completes view the web.xml



More information:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>sample</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <jsp-config/>
  <servlet>
    <description></description>
    <display-name>MyServletClass</display-name>
    <servlet-name>MyServletClass</servlet-name>
    <servlet-class>mypackage.MyServletClass</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyServletClass</servlet-name>
    <url-pattern>/MyServletClass</url-pattern>
  </servlet-mapping>
</web-app>

Notice the <jsp-config/> element has replaced the previously added taglib elements and the following stack trace is visible in the error log.

eclipse.buildId=M20080221-1800
java.version=1.6.0_05
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
Command-line arguments:  -os win32 -ws win32 -arch x86 

Error
Wed May 28 09:46:01 MDT 2008
Unhandled event loop exception

org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$1DiagnosticWrappedException: org.eclipse.emf.ecore.xmi.FeatureNotFoundException: Feature 'taglib' not found. (platform:/resource/sample/WebContent/WEB-INF/web.xml, 13, 12)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:316)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:275)
at org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl.getResource(ProjectResourceSetImpl.java:337)
at org.eclipse.jst.jee.model.internal.JEE5ModelProvider.getModelResource(JEE5ModelProvider.java:143)
at org.eclipse.jst.jee.model.internal.Web25ModelProvider.getModelObject(Web25ModelProvider.java:42)
at org.eclipse.jst.jee.model.internal.JEE5ModelProvider.getModelObject(JEE5ModelProvider.java:198)
at org.eclipse.jst.j2ee.internal.web.operations.NewServletClassDataModelProvider.validateDisplayName(NewServletClassDataModelProvider.java:522)
at org.eclipse.jst.j2ee.internal.web.operations.NewServletClassDataModelProvider.validate(NewServletClassDataModelProvider.java:352)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelImpl.validate(DataModelImpl.java:376)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelImpl.isValid(DataModelImpl.java:422)
at org.eclipse.jst.servlet.ui.internal.wizard.AddServletWizard.canFinish(AddServletWizard.java:90)
at org.eclipse.jface.wizard.WizardDialog.updateButtons(WizardDialog.java:1245)
at org.eclipse.jface.wizard.WizardPage.setPageComplete(WizardPage.java:299)
at org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage.validatePage(DataModelWizardPage.java:326)
at org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage.propertyChanged(DataModelWizardPage.java:433)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelImpl.notifyListeners(DataModelImpl.java:346)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelImpl.notifyPropertyChange(DataModelImpl.java:337)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelImpl.internalSetProperty(DataModelImpl.java:183)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelImpl.setProperty(DataModelImpl.java:172)
at org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelSynchHelper.setProperty(DataModelSynchHelper.java:189)
at org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelSynchHelper$ModifyTextListener.modifyText(DataModelSynchHelper.java:74)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:166)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:962)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:943)
at org.eclipse.swt.widgets.Text.wmCommandChild(Text.java:2366)
at org.eclipse.swt.widgets.Control.WM_COMMAND(Control.java:3801)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3675)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4351)
at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:2179)
at org.eclipse.swt.widgets.Text.callWindowProc(Text.java:133)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:3760)
at org.eclipse.swt.widgets.Text.windowProc(Text.java:2013)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4351)
at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2265)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3291)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:820)
at org.eclipse.jface.window.Window.open(Window.java:796)
at org.eclipse.ui.actions.NewWizardAction.run(NewWizardAction.java:182)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:546)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:490)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:402)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
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:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:508)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
at org.eclipse.equinox.launcher.Main.main(Main.java:1148)
Caused by: org.eclipse.emf.ecore.xmi.FeatureNotFoundException: Feature 'taglib' not found. (platform:/resource/sample/WebContent/WEB-INF/web.xml, 13, 12)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.reportUnknownFeature(XMLHandler.java:1867)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleUnknownFeature(XMLHandler.java:1831)
at org.eclipse.emf.ecore.xmi.impl.XMIHandler.handleUnknownFeature(XMIHandler.java:149)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.handleFeature(XMLHandler.java:1775)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.processElement(XMLHandler.java:985)
at org.eclipse.emf.ecore.xmi.impl.XMIHandler.processElement(XMIHandler.java:87)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:964)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:695)
at org.eclipse.emf.ecore.xmi.impl.XMIHandler.startElement(XMIHandler.java:167)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2740)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:647)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(XMLLoadImpl.java:179)
at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(XMLResourceImpl.java:180)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1354)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1155)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetImpl.java:256)
at org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl.demandLoad(ProjectResourceSetImpl.java:149)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:271)
... 69 more
Comment 1 Danny Ju CLA 2008-05-28 14:15:40 EDT
The behavior can also be reproduced in Ganymede
Version: 3.4.0
Build id: I20080516-1333

This bug is blocking several features in our product.
Can we have a fix/patch ASAP?
Comment 2 Kaloyan Raev CLA 2008-05-28 14:41:52 EDT
I confirm I can reproduce it with RC2. 
Comment 3 Dimitar Giormov CLA 2008-05-29 07:00:19 EDT
this is not a regression in 3.0 It is a problem in the Java EE 5 models and it should be fixed in 2.0.x also. 
It occurs even on simple editing the web.xml using xml editor.
The models fails to load tag libs and therefore on its next save it corrupts the xml.
Comment 4 Konstantin Komissarchik CLA 2008-06-04 12:39:06 EDT
Requesting "hot" treatment of this bug. We need an official 2.0.2 patch for this. A 3.0 fix is less important from our perspective.
Comment 5 Chuck Bridgham CLA 2008-06-04 23:37:47 EDT
Created attachment 103688 [details]
patch
Comment 6 Chuck Bridgham CLA 2008-06-04 23:40:29 EDT
JSP package feature elements were not being found from the XML Helper class (used to map XML to EMF)   I added an extra call if not found in the web app namespace

This patch should work for both 3.0 and 202 versions

submitting for PMC
Comment 7 Konstantin Komissarchik CLA 2008-06-05 14:10:47 EDT
Bug 235893 tracks getting this fix as a patch for the 2.0.2 release.
Comment 8 David Williams CLA 2008-06-05 14:16:03 EDT
I approve, but would like it spelled out more about "how to test" for teams like JSF, Webservices, etc, to be sure no accidental side effects. 

Comment 9 Raghunathan Srinivasan CLA 2008-06-06 11:22:01 EDT
We have verified this in the smoke test build. 
Comment 10 Carl Anderson CLA 2008-06-07 07:33:35 EDT
Committed to HEAD