Bug 234404 - [hotbug] web.xml is corrupted when using add new Servlet wizard
Summary: [hotbug] web.xml is corrupted when using add new Servlet wizard
Status: RESOLVED FIXED
Alias: None
Product: WTP Java EE Tools
Classification: WebTools
Component: jst.j2ee (show other bugs)
Version: 2.0.2   Edit
Hardware: PC Windows XP
: P3 critical with 1 vote (vote)
Target Milestone: 3.0 RC4   Edit
Assignee: Chuck Bridgham CLA
QA Contact: Chuck Bridgham CLA
URL:
Whiteboard: PMC_approved
Keywords:
Depends on:
Blocks: 235893
  Show dependency tree
 
Reported: 2008-05-28 11:55 EDT by Andrew McCulloch CLA
Modified: 2008-06-07 07:33 EDT (History)
10 users (show)

See Also:
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+


Attachments
patch (1.54 KB, patch)
2008-06-04 23:37 EDT, Chuck Bridgham CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
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