0
votes

I am trying to deploy a bean that is ejb 3 on websphere 8. Bean implementation is in src/main/java and ejb-jar.xml is in src/main/resources/META-INF. This is packaged in a jar and the jar is included in ear that also has other ejb jar with ejb 2. So ear contains both ejb 2 and ejb 3 jars. During deployment of this ear in websphere, I am getting below error:

org.eclipse.emf.common.util.WrappedException: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ejb-jar'.

If I remove ejb-jar.xml from ejb 3 jar, deployment is successful. If I deploy an ear containing only ejb 3 jar, it is successful. If I deploy ejb 3 jar directly from ibm console, it gets deployed successfully.

But trying to deploy an ear containing both ejb 2 and ejb 3 jar is failing. Below is full stacktrace:

 [echo] Error executing deployment: org.eclipse.emf.common.util.WrappedException. Error is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ejb-jar'..
 [echo] org.eclipse.emf.common.util.WrappedException: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ejb-jar'.
 [echo]     at org.eclipse.wst.common.internal.emf.resource.EMF2DOMRenderer.loadDocument(EMF2DOMRenderer.java:81)
 [echo]     at org.eclipse.wst.common.internal.emf.resource.EMF2DOMRenderer.doLoad(EMF2DOMRenderer.java:62)
 [echo]     at org.eclipse.wst.common.internal.emf.resource.TranslatorResourceImpl.basicDoLoad(TranslatorResourceImpl.java:153)
 [echo]     at org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResourceImpl.doLoad(CompatibilityXMIResourceImpl.java:182)
 [echo]     at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1494)
 [echo]     at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1282)
 [echo]     at org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResourceImpl.load(CompatibilityXMIResourceImpl.java:272)
 [echo]     at org.eclipse.wst.common.internal.emf.resource.TranslatorResourceImpl.load(TranslatorResourceImpl.java:423)
 [echo]     at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetImpl.java:255)
 [echo]     at org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl.demandLoad(ProjectResourceSetImpl.java:815)
 [echo]     at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:270)
 [echo]     at org.eclipse.jem.internal.util.emf.workbench.ProjectResourceSetImpl.getResource(ProjectResourceSetImpl.java:1068)
 [echo]     at org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper.getOrCreateResource(WorkbenchResourceHelper.java:380)
 [echo]     at org.eclipse.wst.common.internal.emfworkbench.integration.EditModel.getResource(EditModel.java:685)
 [echo]     at org.eclipse.wst.common.componentcore.internal.ArtifactEditModel.getResource(ArtifactEditModel.java:199)
 [echo]     at org.eclipse.jst.j2ee.ejb.componentcore.util.EJBArtifactEdit.getDeploymentDescriptorResource(EJBArtifactEdit.java:296)
 [echo]     at org.eclipse.jst.j2ee.ejb.componentcore.util.EJBArtifactEdit.getDeploymentDescriptorRoot(EJBArtifactEdit.java:322)
 [echo]     at org.eclipse.jst.j2ee.ejb.componentcore.util.EJBArtifactEdit.getEJBJar(EJBArtifactEdit.java:306)
 [echo]     at org.eclipse.jst.j2ee.ejb.componentcore.util.EJBArtifactEdit.getEJBClientJarModule(EJBArtifactEdit.java:252)
 [echo]     at org.eclipse.jst.j2ee.ejb.internal.plugin.EjbModuleExtensionImpl.getDefinedEJBClientJARProject(EjbModuleExtensionImpl.java:91)
 [echo]     at com.ibm.etools.ejbdeploy.batch.plugin.BatchExtension.runEarDeploy(BatchExtension.java:482)
 [echo]     at com.ibm.etools.ejbdeploy.batch.plugin.BatchExtension$RunDeploy.run(BatchExtension.java:356)
 [echo]     at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
 [echo]     at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957)
 [echo]     at com.ibm.etools.ejbdeploy.batch.plugin.BatchExtension$RunDeploy.execute(BatchExtension.java:321)
 [echo]     at com.ibm.etools.ejbdeploy.batch.plugin.BatchExtension.run(BatchExtension.java:284)
 [echo]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 [echo]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
 [echo]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
 [echo]     at java.lang.reflect.Method.invoke(Method.java:611)
 [echo]     at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
 [echo]     at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
 [echo]     at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
 [echo]     at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
 [echo]     at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
 [echo]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 [echo]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
 [echo]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
 [echo]     at java.lang.reflect.Method.invoke(Method.java:611)
 [echo]     at com.ibm.etools.ejbdeploy.batch.impl.BootLoaderLoader.run(BootLoaderLoader.java:494)
 [echo]     at com.ibm.etools.ejbdeploy.batch.impl.BatchDeploy.execute(BatchDeploy.java:114)
 [echo]     at com.ibm.etools.ejbdeploy.EJBDeploy.execute(EJBDeploy.java:106)
 [echo]     at com.ibm.etools.ejbdeploy.EJBDeploy.deploy(EJBDeploy.java:348)
 [echo]     at com.ibm.etools.ejbdeploy.EJBDeploy.main(EJBDeploy.java:309)
 [echo] Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ejb-jar'.
 [echo]     at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
 [echo]     at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
 [echo]     at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
 [echo]     at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
 [echo]     at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
 [echo]     at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
 [echo]     at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
 [echo]     at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source)
 [echo]     at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
 [echo]     at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
 [echo]     at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
 [echo]     at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
 [echo]     at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
 [echo]     at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
 [echo]     at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
 [echo]     at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
 [echo]     at org.eclipse.wst.common.internal.emf.utilities.DOMUtilities.loadDocument(DOMUtilities.java:554)
 [echo]     at org.eclipse.wst.common.internal.emf.resource.EMF2DOMRenderer.loadDocument(EMF2DOMRenderer.java:74)
 [echo]     ... 43 more
 [echo] EJBDeploy level: @build@

ejb-jar.xml <ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0"> <description><![CDATA[]]></description> <display-name></display-name> <enterprise-beans> <session id=""> <description><![CDATA[]]></description> <ejb-name></ejb-name> <env-entry> <env-entry-name></env-entry-name> <env-entry-type></env-entry-type> <env-entry-value><![CDATA[]]></env-entry-value> </env-entry>

I believe deployment is failing because ear has both ejb 2 and ejb 2 jars.

Any suggestions on how to fix this?

1
just to be clear, you don't have src/main/java/ or src/main/resources in your ear do you? - Andy Guibert
Correct. EJB is packaged in jar. and jar content looks like: com/.../.../*.java.. META-INF/ejb-jar.xml - Vaidehi Patel
According to this Oracle's community thread you can mix both EJB2.x and EJB3.x as long as the EJB's are in separate modules. Furthermore, refer to this JBoss document in order to validate your ejb-jar.xml DTD references. - aribeiro
Does the EAR containing the EJB 2 JAR only deploy successfully? I suspect one or the other EJB JARs has a malformed ejb-jar.xml. If you can show the first few lines of each of the ejb-jar.xml, perhaps someone here can identify the issue (the xmlns and DOCTYPE requirements change with each release, so perhaps there is a mistake). Otherwise, you could consider opening a PMR with IBM; the error message should be improved to at least include more context. - Brett Kail
I updated question with ejb-jar.xml content above - Vaidehi Patel

1 Answers

1
votes

Your XML header is using incompatible xmlns and version attributes. Try this:

<ejb-jar version="3.0"
      xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">

(Your EJB 2.x ejb-jar.xml might also have a mismatch, so showing that might also be useful.)