You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ek...@apache.org on 2005/09/15 22:04:36 UTC
svn commit: r289303 - in /beehive/trunk/system-controls/src/ejb: build.xml
org/apache/beehive/controls/system/ejb/DOMUtils.java
org/apache/beehive/controls/system/ejb/DomUtils.java
org/apache/beehive/controls/system/ejb/EJBControlAssembler.java schema/
Author: ekoneil
Date: Thu Sep 15 13:04:30 2005
New Revision: 289303
URL: http://svn.apache.org/viewcvs?rev=289303&view=rev
Log:
Remove EJB control dependence on XMLBeans at assembly time. DOM is now used to modify the EJB DD.
Contribution from Chad Schoettger.
BB: self
Test: manual
Added:
beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/DOMUtils.java (with props)
beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/DomUtils.java (with props)
Removed:
beehive/trunk/system-controls/src/ejb/schema/
Modified:
beehive/trunk/system-controls/src/ejb/build.xml
beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EJBControlAssembler.java
Modified: beehive/trunk/system-controls/src/ejb/build.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/ejb/build.xml?rev=289303&r1=289302&r2=289303&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/ejb/build.xml (original)
+++ beehive/trunk/system-controls/src/ejb/build.xml Thu Sep 15 13:04:30 2005
@@ -7,27 +7,12 @@
<property name="module.dir" location="${src.dir}/ejb"/>
<path id="module.classpath">
- <pathelement path="${classes.dir}/${module.name}-xbean"/>
<path refid="controls.dependency.path"/>
<path refid="ejb.dependency.path"/>
<path refid="velocity.dependency.path"/>
- <path refid="xbean.dependency.path"/>
<path refid="tools.dependency.path"/>
</path>
- <!-- =================================================================== -->
- <!-- clean - cleans the EJB Control -->
- <!-- =================================================================== -->
- <target name="clean" description="Deletes all generated files.">
- <delete dir="${classes.dir}/${module.name}"/>
- <delete dir="${classes.dir}/${module.name}-xbean"/>
- <delete dir="${gen.src.dir}/${module.name}"/>
- <delete file="${build.lib.dir}/${ejbcontrol.jar.name}"/>
- </target>
-
- <!-- =================================================================== -->
- <!-- build - build the EJB Control -->
- <!-- =================================================================== -->
<target name="build" description="Builds EJB control sources">
<echo>compile module: ${module.name}</echo>
@@ -36,12 +21,9 @@
<echo>debug: ${compile.debug}</echo>
<mkdir dir="${classes.dir}/${module.name}"/>
- <mkdir dir="${classes.dir}/${module.name}-xbean"/>
<mkdir dir="${gen.src.dir}/${module.name}"/>
- <build-schemas srcdir="${module.dir}/schema" destdir="${classes.dir}/${module.name}-xbean"/>
-
- <build-controls srcdir="${module.dir}"
+ <build-controls srcdir="${module.dir}"
destdir="${classes.dir}/${module.name}"
tempdir="${gen.src.dir}/${module.name}"
classpathref="module.classpath"/>
@@ -58,7 +40,12 @@
<attribute name="Web-Service-Control-Version" value="${beehive.version}"/>
</manifest>
</control-jar>
- <control-jar destfile="${build.lib.dir}/${ejbcontrol.jar.name}" basedir="${classes.dir}/${module.name}-xbean" update="true"/>
+ </target>
+
+ <target name="clean" description="Deletes all generated files.">
+ <delete dir="${classes.dir}/${module.name}"/>
+ <delete dir="${gen.src.dir}/${module.name}"/>
+ <delete file="${build.lib.dir}/${ejbcontrol.jar.name}"/>
</target>
</project>
Added: beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/DOMUtils.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/DOMUtils.java?rev=289303&view=auto
==============================================================================
--- beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/DOMUtils.java (added)
+++ beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/DOMUtils.java Thu Sep 15 13:04:30 2005
@@ -0,0 +1,192 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.controls.system.ejb;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+
+/**
+ * Some simple DOM utility methods.
+ */
+final class DomUtils {
+
+ /**
+ * <p>Returns the first child element with the given name. Returns
+ * <code>null</code> if not found.</p>
+ *
+ * @param parent parent element
+ * @param name name of the child element
+ * @return child element
+ */
+ static Element getChildElementByName(Element parent, String name) {
+ NodeList children = parent.getChildNodes();
+
+ for (int i = 0; i < children.getLength(); i++) {
+ Node node = children.item(i);
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ Element element = (Element) node;
+ if (element.getTagName().equals(name)) {
+ return element;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * <p>Returns a list of child elements with the given
+ * name. Returns an empty list if there are no such child
+ * elements.</p>
+ *
+ * @param parent parent element
+ * @param name name of the child element
+ * @return child elements
+ */
+ static List getChildElementsByName(Element parent, String name) {
+ List elements = new ArrayList();
+
+ NodeList children = parent.getChildNodes();
+
+ for (int i = 0; i < children.getLength(); i++) {
+ Node node = children.item(i);
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ Element element = (Element) node;
+ if (element.getTagName().equals(name)) {
+ elements.add(element);
+ }
+ }
+ }
+
+ return elements;
+ }
+
+ /**
+ * <p>Returns the text value of a child element. Returns
+ * <code>null</code> if there is no child element found.</p>
+ *
+ * @param parent parent element
+ * @param name name of the child element
+ * @return text value
+ */
+ static String getChildElementText(Element parent, String name) {
+ // Get children
+ List list = DomUtils.getChildElementsByName(parent, name);
+
+ if (list.size() == 1) {
+ Element child = (Element) list.get(0);
+
+ StringBuffer buf = new StringBuffer();
+
+ NodeList children = child.getChildNodes();
+ for (int i = 0; i < children.getLength(); i++) {
+ Node node = children.item(i);
+ if (node.getNodeType() == Node.TEXT_NODE ||
+ node.getNodeType() == Node.CDATA_SECTION_NODE) {
+ Text text = (Text) node;
+ buf.append(text.getData().trim());
+ }
+ }
+
+ return buf.toString();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * <p>Returns the text value of a child element. Returns
+ * <code>null</code> if there is no child element found.</p>
+ *
+ * @param element element
+ * @return text value
+ */
+ static String getElementText(Element element) {
+ StringBuffer buf = new StringBuffer();
+
+ NodeList children = element.getChildNodes();
+ for (int i = 0; i < children.getLength(); i++) {
+ Node node = children.item(i);
+ if (node.getNodeType() == Node.TEXT_NODE ||
+ node.getNodeType() == Node.CDATA_SECTION_NODE) {
+ Text text = (Text) node;
+ buf.append(text.getData().trim());
+ }
+ }
+
+ return buf.toString();
+ }
+
+ /**
+ * <p>Returns an array of text values of a child element. Returns
+ * <code>null</code> if there is no child element found.</p>
+ *
+ * @param parent parent element
+ * @param name name of the child element
+ * @return text value
+ */
+ static String[] getChildElementTextArr(Element parent, String name) {
+ // Get all the elements
+ List children = getChildElementsByName(parent, name);
+
+ String str[] = new String[children.size()];
+
+ for (int i = 0; i < children.size(); i++) {
+ Node child = (Node) children.get(i);
+
+ StringBuffer buf = new StringBuffer();
+
+ NodeList nodes = child.getChildNodes();
+ for (int j = 0; j < nodes.getLength(); j++) {
+ Node node = nodes.item(j);
+ if (node.getNodeType() == Node.TEXT_NODE ||
+ node.getNodeType() == Node.CDATA_SECTION_NODE) {
+ Text text = (Text) node;
+ buf.append(text.getData().trim());
+ }
+ }
+
+ str[i] = buf.toString();
+ }
+
+ return str;
+ }
+
+ /**
+ * <p>Retutns the value of the named attribute of the given
+ * element. If there is no such attribute, returns null.</p>
+ *
+ * @param element element
+ * @param name name
+ * @return value
+ */
+ static String getAttributeValue(Element element, String name) {
+ Attr attribute = element.getAttributeNode(name);
+ if (attribute == null) {
+ return null;
+ } else {
+ return attribute.getValue();
+ }
+ }
+}
Propchange: beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/DOMUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/DomUtils.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/DomUtils.java?rev=289303&view=auto
==============================================================================
--- beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/DomUtils.java (added)
+++ beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/DomUtils.java Thu Sep 15 13:04:30 2005
@@ -0,0 +1,192 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.controls.system.ejb;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+
+/**
+ * Some simple DOM utility methods.
+ */
+final class DomUtils {
+
+ /**
+ * <p>Returns the first child element with the given name. Returns
+ * <code>null</code> if not found.</p>
+ *
+ * @param parent parent element
+ * @param name name of the child element
+ * @return child element
+ */
+ static Element getChildElementByName(Element parent, String name) {
+ NodeList children = parent.getChildNodes();
+
+ for (int i = 0; i < children.getLength(); i++) {
+ Node node = children.item(i);
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ Element element = (Element) node;
+ if (element.getTagName().equals(name)) {
+ return element;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * <p>Returns a list of child elements with the given
+ * name. Returns an empty list if there are no such child
+ * elements.</p>
+ *
+ * @param parent parent element
+ * @param name name of the child element
+ * @return child elements
+ */
+ static List getChildElementsByName(Element parent, String name) {
+ List elements = new ArrayList();
+
+ NodeList children = parent.getChildNodes();
+
+ for (int i = 0; i < children.getLength(); i++) {
+ Node node = children.item(i);
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ Element element = (Element) node;
+ if (element.getTagName().equals(name)) {
+ elements.add(element);
+ }
+ }
+ }
+
+ return elements;
+ }
+
+ /**
+ * <p>Returns the text value of a child element. Returns
+ * <code>null</code> if there is no child element found.</p>
+ *
+ * @param parent parent element
+ * @param name name of the child element
+ * @return text value
+ */
+ static String getChildElementText(Element parent, String name) {
+ // Get children
+ List list = DomUtils.getChildElementsByName(parent, name);
+
+ if (list.size() == 1) {
+ Element child = (Element) list.get(0);
+
+ StringBuffer buf = new StringBuffer();
+
+ NodeList children = child.getChildNodes();
+ for (int i = 0; i < children.getLength(); i++) {
+ Node node = children.item(i);
+ if (node.getNodeType() == Node.TEXT_NODE ||
+ node.getNodeType() == Node.CDATA_SECTION_NODE) {
+ Text text = (Text) node;
+ buf.append(text.getData().trim());
+ }
+ }
+
+ return buf.toString();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * <p>Returns the text value of a child element. Returns
+ * <code>null</code> if there is no child element found.</p>
+ *
+ * @param element element
+ * @return text value
+ */
+ static String getElementText(Element element) {
+ StringBuffer buf = new StringBuffer();
+
+ NodeList children = element.getChildNodes();
+ for (int i = 0; i < children.getLength(); i++) {
+ Node node = children.item(i);
+ if (node.getNodeType() == Node.TEXT_NODE ||
+ node.getNodeType() == Node.CDATA_SECTION_NODE) {
+ Text text = (Text) node;
+ buf.append(text.getData().trim());
+ }
+ }
+
+ return buf.toString();
+ }
+
+ /**
+ * <p>Returns an array of text values of a child element. Returns
+ * <code>null</code> if there is no child element found.</p>
+ *
+ * @param parent parent element
+ * @param name name of the child element
+ * @return text value
+ */
+ static String[] getChildElementTextArr(Element parent, String name) {
+ // Get all the elements
+ List children = getChildElementsByName(parent, name);
+
+ String str[] = new String[children.size()];
+
+ for (int i = 0; i < children.size(); i++) {
+ Node child = (Node) children.get(i);
+
+ StringBuffer buf = new StringBuffer();
+
+ NodeList nodes = child.getChildNodes();
+ for (int j = 0; j < nodes.getLength(); j++) {
+ Node node = nodes.item(j);
+ if (node.getNodeType() == Node.TEXT_NODE ||
+ node.getNodeType() == Node.CDATA_SECTION_NODE) {
+ Text text = (Text) node;
+ buf.append(text.getData().trim());
+ }
+ }
+
+ str[i] = buf.toString();
+ }
+
+ return str;
+ }
+
+ /**
+ * <p>Retutns the value of the named attribute of the given
+ * element. If there is no such attribute, returns null.</p>
+ *
+ * @param element element
+ * @param name name
+ * @return value
+ */
+ static String getAttributeValue(Element element, String name) {
+ Attr attribute = element.getAttributeNode(name);
+ if (attribute == null) {
+ return null;
+ } else {
+ return attribute.getValue();
+ }
+ }
+}
Propchange: beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/DomUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EJBControlAssembler.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EJBControlAssembler.java?rev=289303&r1=289302&r2=289303&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EJBControlAssembler.java (original)
+++ beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EJBControlAssembler.java Thu Sep 15 13:04:30 2005
@@ -17,20 +17,30 @@
*/
package org.apache.beehive.controls.system.ejb;
-import java.io.IOException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
-import java.lang.String;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
import org.apache.beehive.controls.api.assembly.ControlAssembler;
-import org.apache.beehive.controls.api.assembly.ControlAssemblyException;
import org.apache.beehive.controls.api.assembly.ControlAssemblyContext;
-import org.apache.xmlbeans.XmlCursor;
-import org.apache.xmlbeans.XmlException;
-import org.apache.xmlbeans.XmlOptions;
-
-import org.apache.beehive.controls.system.ejb.schemas.j2ee.*;
+import org.apache.beehive.controls.api.assembly.ControlAssemblyException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
/**
* The EJBControl needs to inject EJB reference entries into the
@@ -84,7 +94,7 @@
System.err.println(" ejbLinkValue=" + ejbLinkValue );
File ejbJarFile = ejbCtx.getEjbJarXml();
- FileInputStream ejbJarStream = null;
+ FileInputStream ejbJarStream;
try
{
ejbJarStream = new FileInputStream( ejbJarFile );
@@ -100,34 +110,35 @@
try
{
- // get name of EJB reference to be inserted
- String insertedEjbRefName = ei._refName;
-
// get the existing <ejb-jar> XBean from the stream
- EjbJarDocument ejbDoc = EjbJarDocument.Factory.parse(ejbJarStream);
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ dbf.setValidating(false);
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ Document ejbDoc = db.parse(ejbJarStream);
- // copy ejbDoc XmlObject so can makes changes to it
- ejbDoc = (EjbJarDocument)ejbDoc.copy();
- EjbJarType ejbJarType = ejbDoc.getEjbJar();
- EnterpriseBeansType entBeansType = ejbJarType.getEnterpriseBeans();
+ ejbJarStream.close();
+ ejbJarStream = null;
+
+
+ Element ejbJarType = ejbDoc.getDocumentElement();
+ Element entBeansType = DomUtils.getChildElementByName(ejbJarType, "enterprise-beans");
// TODO: support Entity & other bean types
- SessionBeanType[] sessionArray = entBeansType.getSessionArray();
- for (int i=0; i<sessionArray.length; i++)
+ List sessionArray = DomUtils.getChildElementsByName(entBeansType, "session");
+ for ( Object e : sessionArray )
{
- SessionBeanType sessionBean = sessionArray[i];
-
- if (ei._isLocal)
- insertEJBLocalRefInEJBJar(sessionBean, ei, ejbLinkValue);
- else
- insertEJBRefInEJBJar(sessionBean, ei, ejbLinkValue);
+ Element sessionBean = (Element)e;
+ if (ei._isLocal) {
+ insertEJBLocalRefInEJBJar(sessionBean, ei, ejbLinkValue, ejbDoc);
+ }
+ else {
+ insertEJBRefInEJBJar(sessionBean, ei, ejbLinkValue, ejbDoc);
+ }
}
// overwrite existing ejb-jar.xml file with new document
- XmlOptions xmlOpts = new XmlOptions();
- xmlOpts.setSavePrettyPrint();
- ejbDoc.save(ejbJarFile, xmlOpts);
+ writeXML(ejbDoc, ejbJarFile);
}
catch(IOException ioe)
{
@@ -135,13 +146,15 @@
"attempting to write to file " + ejbJarFile.getAbsolutePath() +
". Message: " + ioe.getMessage());
}
- catch(XmlException xe)
- {
- System.err.println("EJBControlAssembler: caught XmlException " +
- "attempting xml manipulations. Message: " +
- xe.getMessage());
- }
- finally
+ catch (ParserConfigurationException e) {
+ System.err.println("EJBControlAssembler: caught ParserConfigurationException " +
+ "attempting to read to file " + ejbJarFile.getAbsolutePath() +
+ ". Message: " + e.getMessage());
+ } catch (SAXException e) {
+ System.err.println("EJBControlAssembler: caught SAXException " +
+ "attempting to read to file " + ejbJarFile.getAbsolutePath() +
+ ". Message: " + e.getMessage());
+ } finally
{
try
{
@@ -157,109 +170,97 @@
}
}
- protected void insertEJBRefInEJBJar(SessionBeanType sessionBean, EJBInfo ei, String ejbLinkValue)
+ protected void insertEJBRefInEJBJar(Element sessionBean, EJBInfo ei, String ejbLinkValue, Document ejbDoc)
{
System.err.println("EJBControlAssembler.insertEJBRefInEJBJar() called");
- System.err.println("ejbLinkValue =" + ejbLinkValue );
- EjbRefType[] ejbRefArray = sessionBean.getEjbRefArray();
+ System.err.println("ejbLinkValue =" + ejbLinkValue);
+ List ejbRefArray = DomUtils.getChildElementsByName(sessionBean, "ejb-ref");
String insertedEjbRefName = ei._refName;
- XmlCursor ejbJarXmlCursor = null;
- try {
- for (int j=ejbRefArray.length-1; j>=0; j--)
- {
- EjbRefType ejbRef = ejbRefArray[j];
- ejbJarXmlCursor = ejbRef.newCursor();
- String ejbRefName = ejbRef.getEjbRefName().getStringValue();
- if (insertedEjbRefName.equals(ejbRefName))
- {
- sessionBean.removeEjbRef(j);
- break;
- }
- }
- // insert a new <ejb-ref> entry and fill in the values
- EjbRefType insertedEjbRef = sessionBean.insertNewEjbRef(0);
-
- EjbRefNameType ejbRefName = insertedEjbRef.addNewEjbRefName();
- ejbRefName.setStringValue(insertedEjbRefName);
-
- EjbRefTypeType ejbRefType = insertedEjbRef.addNewEjbRefType();
- ejbRefType.setStringValue(ei._beanType);
-
- HomeType homeType = insertedEjbRef.addNewHome();
- homeType.setStringValue(ei._homeInterface.getName());
- RemoteType remoteType = insertedEjbRef.addNewRemote();
- remoteType.setStringValue(ei._beanInterface.getName());
-
- EjbLinkType ejbLink = insertedEjbRef.addNewEjbLink();
- ejbLink.setStringValue(ejbLinkValue);
- }
- finally
- {
- if (ejbJarXmlCursor != null)
- {
- ejbJarXmlCursor.dispose();
+ for (int j = ejbRefArray.size() - 1; j >= 0; j--) {
+ Element ejbRef = (Element) ejbRefArray.get(j);
+ String ejbRefName = DomUtils.getChildElementText(ejbRef, "ejb-ref-name");
+ if (insertedEjbRefName.equals(ejbRefName)) {
+ sessionBean.removeChild(ejbRef);
+ break;
}
}
+ // insert a new <ejb-ref> entry and fill in the values
+ Element insertedEjbRef = ejbDoc.createElement("ejb-ref");
+ sessionBean.insertBefore(insertedEjbRef, null);
+
+ Element ejbRefName = ejbDoc.createElement("ejb-ref-name");
+ ejbRefName.setTextContent(insertedEjbRefName);
+ insertedEjbRef.appendChild(ejbRefName);
+
+ Element ejbRefType = ejbDoc.createElement("ejb-ref-type");
+ ejbRefType.setTextContent(ei._beanType);
+ insertedEjbRef.appendChild(ejbRefType);
+
+ Element homeType = ejbDoc.createElement("home");
+ homeType.setTextContent(ei._homeInterface.getName());
+ insertedEjbRef.appendChild(homeType);
+
+ Element remoteType = ejbDoc.createElement("remote");
+ remoteType.setTextContent(ei._beanInterface.getName());
+ insertedEjbRef.appendChild(remoteType);
+
+ Element ejbLink = ejbDoc.createElement("ejb-link");
+ ejbLink.setTextContent(ejbLinkValue);
+ insertedEjbRef.appendChild(ejbLink);
}
- protected void insertEJBLocalRefInEJBJar(SessionBeanType sessionBean, EJBInfo ei, String ejbLinkValue)
+ protected void insertEJBLocalRefInEJBJar(Element sessionBean, EJBInfo ei, String ejbLinkValue, Document ejbDoc)
{
System.err.println("EJBControlAssembler.insertEJBLocalRefInEJBJar() called");
- System.err.println("ejbLinkValue =" + ejbLinkValue );
- EjbLocalRefType[] ejbLocalRefArray = sessionBean.getEjbLocalRefArray();
+ System.err.println("ejbLinkValue =" + ejbLinkValue);
+ List ejbLocalRefArray = DomUtils.getChildElementsByName(sessionBean, "ejb-local-ref");
String insertedEjbRefName = ei._refName;
- XmlCursor ejbJarXmlCursor = null;
- try {
- for (int j=ejbLocalRefArray.length-1; j>=0; j--)
- {
- EjbLocalRefType ejbLocalRef = ejbLocalRefArray[j];
- ejbJarXmlCursor = ejbLocalRef.newCursor();
- String ejbRefName = ejbLocalRef.getEjbRefName().getStringValue();
- if (insertedEjbRefName.equals(ejbRefName))
- {
- sessionBean.removeEjbLocalRef(j);
- break;
- }
- }
- // insert a new <ejb-local-ref> entry and fill in the values
- EjbLocalRefType insertedEJBLocalRef = sessionBean.insertNewEjbLocalRef(0);
-
- EjbRefNameType ejbRefName = insertedEJBLocalRef.addNewEjbRefName();
- ejbRefName.setStringValue(insertedEjbRefName);
-
- EjbRefTypeType ejbRefType = insertedEJBLocalRef.addNewEjbRefType();
- ejbRefType.setStringValue(ei._beanType);
-
- LocalHomeType homeType = insertedEJBLocalRef.addNewLocalHome();
- homeType.setStringValue(ei._homeInterface.getName());
- LocalType localType = insertedEJBLocalRef.addNewLocal();
- localType.setStringValue(ei._beanInterface.getName());
-
- EjbLinkType ejbLink = insertedEJBLocalRef.addNewEjbLink();
- ejbLink.setStringValue(ejbLinkValue);
- }
- finally
- {
- if (ejbJarXmlCursor != null)
- {
- ejbJarXmlCursor.dispose();
+ for (int j = ejbLocalRefArray.size() - 1; j >= 0; j--) {
+ Element ejbLocalRef = (Element) ejbLocalRefArray.get(j);
+ String ejbRefName = DomUtils.getChildElementText(ejbLocalRef, "ejb-ref-name");
+ if (insertedEjbRefName.equals(ejbRefName)) {
+ sessionBean.removeChild(ejbLocalRef);
+ break;
}
}
+ // insert a new <ejb-local-ref> entry and fill in the values
+ Element insertedEjbLocalRef = ejbDoc.createElement("ejb-local-ref");
+ sessionBean.insertBefore(insertedEjbLocalRef, null);
+
+ Element ejbRefName = ejbDoc.createElement("ejb-ref-name");
+ ejbRefName.setTextContent(insertedEjbRefName);
+ insertedEjbLocalRef.appendChild(ejbRefName);
+
+ Element ejbRefType = ejbDoc.createElement("ejb-ref-type");
+ ejbRefType.setTextContent(ei._beanType);
+ insertedEjbLocalRef.appendChild(ejbRefType);
+
+ Element homeType = ejbDoc.createElement("local-home");
+ homeType.setTextContent(ei._homeInterface.getName());
+ insertedEjbLocalRef.appendChild(homeType);
+
+ Element localType = ejbDoc.createElement("local");
+ localType.setTextContent(ei._beanInterface.getName());
+ insertedEjbLocalRef.appendChild(localType);
+
+ Element ejbLink = ejbDoc.createElement("ejb-link");
+ ejbLink.setTextContent(ejbLinkValue);
+ insertedEjbLocalRef.appendChild(ejbLink);
}
protected void updateWebApp( ControlAssemblyContext.WebAppModule webAppCcc,
- EJBInfo ei, String ejbLinkValue )
+ EJBInfo ei, String ejbLinkValue )
throws ControlAssemblyException
- {
+ {
System.err.println("EJBControlAssembler.updateWebApp() called");
System.err.println("ei =" + ei);
System.err.println("ejbLinkValue =" + ejbLinkValue );
File webXmlFile = webAppCcc.getWebXml();
- FileInputStream webXmlStream = null;
+ FileInputStream webXmlStream;
try
{
webXmlStream = new FileInputStream( webXmlFile );
@@ -275,22 +276,24 @@
try
{
- // get the existing <web-app> XBean from the stream
- WebAppDocument webAppDoc = WebAppDocument.Factory.parse(webXmlStream);
+ // parse the web.xml file
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ dbf.setValidating(false);
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ Document webAppDoc = db.parse(webXmlStream);
+
+ webXmlStream.close();
+ webXmlStream = null;
- // copy webAppDoc XmlObject so can makes changes to it
- webAppDoc = (WebAppDocument)webAppDoc.copy();
- WebAppType webAppType = webAppDoc.getWebApp();
+ Element webAppType = webAppDoc.getDocumentElement();
if (ei._isLocal)
- insertEJBLocalRefInWebApp(webAppType, ei, ejbLinkValue);
+ insertEJBLocalRefInWebApp(webAppType, ei, ejbLinkValue, webAppDoc);
else
- insertEJBRefInWebApp(webAppType, ei, ejbLinkValue);
+ insertEJBRefInWebApp(webAppType, ei, ejbLinkValue, webAppDoc);
// overwrite existing web.xml file with new document
- XmlOptions xmlOpts = new XmlOptions();
- xmlOpts.setSavePrettyPrint();
- webAppDoc.save(webXmlFile, xmlOpts);
+ writeXML(webAppDoc, webXmlFile);
}
catch(IOException ioe)
{
@@ -298,13 +301,15 @@
"attempting to write to file " + webXmlFile.getAbsolutePath() +
". Message: " + ioe.getMessage());
}
- catch(XmlException xe)
- {
- System.err.println("ServiceControlAssembler: caught XmlException " +
- "attempting xml manipulations. Message: " +
- xe.getMessage());
- }
- finally
+ catch (ParserConfigurationException e) {
+ System.err.println("ServiceControlAssembler: caught ParserConfigurationException " +
+ "attempting to read to file " + webXmlFile.getAbsolutePath() +
+ ". Message: " + e.getMessage());
+ } catch (SAXException e) {
+ System.err.println("ServiceControlAssembler: caught SAXException " +
+ "attempting to read to file " + webXmlFile.getAbsolutePath() +
+ ". Message: " + e.getMessage());
+ } finally
{
try
{
@@ -321,99 +326,145 @@
}
- protected void insertEJBRefInWebApp(WebAppType webAppType, EJBInfo ei, String ejbLinkValue)
- {
+ protected void insertEJBRefInWebApp(Element webAppType, EJBInfo ei, String ejbLinkValue, Document webAppDoc) {
System.err.println("EJBControlAssembler.insertEJBRefInWebApp() called");
- System.err.println("ejbLinkValue =" + ejbLinkValue );
+ System.err.println("ejbLinkValue =" + ejbLinkValue);
- EjbRefType[] ejbRefArray = webAppType.getEjbRefArray();
- String insertedEjbRefName = ei._refName;
- XmlCursor webXmlCursor = null;
+ List ejbRefArray = DomUtils.getChildElementsByName(webAppType, "ejb-ref");
- try {
- for (int j=ejbRefArray.length-1; j>=0; j--)
- {
- EjbRefType ejbRef = ejbRefArray[j];
- webXmlCursor = ejbRef.newCursor();
- String ejbRefName = ejbRef.getEjbRefName().getStringValue();
- if (insertedEjbRefName.equals(ejbRefName))
- {
- webAppType.removeEjbRef(j);
- break;
- }
- }
- // insert a new <ejb-ref> entry and fill in the values
- EjbRefType insertedEjbRef = webAppType.insertNewEjbRef(0);
-
- EjbRefNameType ejbRefName = insertedEjbRef.addNewEjbRefName();
- ejbRefName.setStringValue(insertedEjbRefName);
-
- EjbRefTypeType ejbRefType = insertedEjbRef.addNewEjbRefType();
- ejbRefType.setStringValue(ei._beanType);
-
- HomeType homeType = insertedEjbRef.addNewHome();
- homeType.setStringValue(ei._homeInterface.getName());
- RemoteType remoteType = insertedEjbRef.addNewRemote();
- remoteType.setStringValue(ei._beanInterface.getName());
-
- EjbLinkType ejbLink = insertedEjbRef.addNewEjbLink();
- ejbLink.setStringValue(ejbLinkValue);
- }
- finally
- {
- if (webXmlCursor != null)
- {
- webXmlCursor.dispose();
+ String insertedEjbRefName = ei._refName;
+ for (int j = ejbRefArray.size() - 1; j >= 0; j--) {
+ Element ejbRef = (Element) ejbRefArray.get(j);
+ String ejbRefName = DomUtils.getChildElementText(ejbRef, "ejb-ref-name");
+ if (insertedEjbRefName.equals(ejbRefName)) {
+ webAppType.removeChild(ejbRef);
+ break;
}
}
+ // insert a new <ejb-ref> entry and fill in the values
+ Element insertedEjbRef = webAppDoc.createElement("ejb-ref");
+ webAppType.insertBefore(insertedEjbRef, null);
+
+ Element ejbRefName = webAppDoc.createElement("ejb-ref-name");
+ ejbRefName.setTextContent(insertedEjbRefName);
+ insertedEjbRef.appendChild(ejbRefName);
+
+ Element ejbRefType = webAppDoc.createElement("ejb-ref-type");
+ ejbRefType.setTextContent(ei._beanType);
+ insertedEjbRef.appendChild(ejbRefType);
+
+ Element homeType = webAppDoc.createElement("home");
+ homeType.setTextContent(ei._homeInterface.getName());
+ insertedEjbRef.appendChild(homeType);
+
+ Element remoteType = webAppDoc.createElement("remote");
+ remoteType.setTextContent(ei._beanInterface.getName());
+ insertedEjbRef.appendChild(remoteType);
+
+ Element ejbLink = webAppDoc.createElement("ejb-link");
+ ejbLink.setTextContent(ejbLinkValue);
+ insertedEjbRef.appendChild(ejbLink);
}
- protected void insertEJBLocalRefInWebApp(WebAppType webAppType, EJBInfo ei, String ejbLinkValue)
+ protected void insertEJBLocalRefInWebApp(Element webAppType, EJBInfo ei, String ejbLinkValue, Document webAppDoc)
{
System.err.println("EJBControlAssembler.insertEJBLocalRefInWebApp() called");
- System.err.println("ejbLinkValue =" + ejbLinkValue );
+ System.err.println("ejbLinkValue =" + ejbLinkValue);
- EjbLocalRefType[] ejbLocalRefArray = webAppType.getEjbLocalRefArray();
+ List ejbLocalRefArray = DomUtils.getChildElementsByName(webAppType, "ejb-local-ref");
String insertedEjbRefName = ei._refName;
- XmlCursor webXmlCursor = null;
- try {
- for (int j=ejbLocalRefArray.length-1; j>=0; j--)
- {
- EjbLocalRefType ejbLocalRef = ejbLocalRefArray[j];
- webXmlCursor = ejbLocalRef.newCursor();
- String ejbRefName = ejbLocalRef.getEjbRefName().getStringValue();
- if (insertedEjbRefName.equals(ejbRefName))
- {
- webAppType.removeEjbLocalRef(j);
- break;
- }
- }
- // insert a new <ejb-local-ref> entry and fill in the values
- EjbLocalRefType insertedEJBLocalRef = webAppType.insertNewEjbLocalRef(0);
-
- EjbRefNameType ejbRefName = insertedEJBLocalRef.addNewEjbRefName();
- ejbRefName.setStringValue(insertedEjbRefName);
-
- EjbRefTypeType ejbRefType = insertedEJBLocalRef.addNewEjbRefType();
- ejbRefType.setStringValue(ei._beanType);
-
- LocalHomeType homeType = insertedEJBLocalRef.addNewLocalHome();
- homeType.setStringValue(ei._homeInterface.getName());
- LocalType localType = insertedEJBLocalRef.addNewLocal();
- localType.setStringValue(ei._beanInterface.getName());
-
- EjbLinkType ejbLink = insertedEJBLocalRef.addNewEjbLink();
- ejbLink.setStringValue(ejbLinkValue);
- }
- finally
- {
- if (webXmlCursor != null)
- {
- webXmlCursor.dispose();
+ for (int j = ejbLocalRefArray.size() - 1; j >= 0; j--) {
+ Element ejbLocalRef = (Element) ejbLocalRefArray.get(j);
+ String ejbRefName = DomUtils.getChildElementText(ejbLocalRef, "ejb-ref-name");
+ if (insertedEjbRefName.equals(ejbRefName)) {
+ webAppType.removeChild(ejbLocalRef);
+ break;
}
}
+ // insert a new <ejb-local-ref> entry and fill in the values
+ Element insertedEjbLocalRef = webAppDoc.createElement("ejb-local-ref");
+ webAppType.insertBefore(insertedEjbLocalRef, null);
+
+ Element ejbRefName = webAppDoc.createElement("ejb-ref-name");
+ ejbRefName.setTextContent(insertedEjbRefName);
+ insertedEjbLocalRef.appendChild(ejbRefName);
+
+ Element ejbRefType = webAppDoc.createElement("ejb-ref-type");
+ ejbRefType.setTextContent(ei._beanType);
+ insertedEjbLocalRef.appendChild(ejbRefType);
+
+ Element homeType = webAppDoc.createElement("local-home");
+ homeType.setTextContent(ei._homeInterface.getName());
+ insertedEjbLocalRef.appendChild(homeType);
+
+ Element localType = webAppDoc.createElement("local");
+ localType.setTextContent(ei._beanInterface.getName());
+ insertedEjbLocalRef.appendChild(localType);
+
+ Element ejbLink = webAppDoc.createElement("ejb-link");
+ ejbLink.setTextContent(ejbLinkValue);
+ insertedEjbLocalRef.appendChild(ejbLink);
+ }
+
+ private void writeXML(Document doc, File outputFile)
+ {
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
+
+ try {
+ transformerFactory.setAttribute("indent-number", 2);
+ } catch (IllegalArgumentException e) {
+ // not a fatal error, just means underlying parser implementation does not support indent-number.
+ System.err.println("ServiceControlAssembler: Warning -- Caught IllegalArgumentException " +
+ "attempting to set transformer factory attribute: 'indent-number'. Message: " + e.getMessage());
+ }
+
+ Transformer transformer;
+ FileOutputStream fos = null;
+ try {
+
+ transformer= transformerFactory.newTransformer();
+
+ try {
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+ transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doc.getDoctype().getPublicId());
+ transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doc.getDoctype().getSystemId());
+ } catch (IllegalArgumentException e) {
+ // just keep going not a fatal error, just means underlying parser implementation
+ // does not support one of these options.
+ System.err.println("ServiceControlAssembler: Warning -- Caught IllegalArgumentException " +
+ "attempting to set transformer option. Message: " + e.getMessage());
+ }
+
+ DOMSource source = new DOMSource(doc);
+ fos = new FileOutputStream(outputFile);
+ StreamResult stream = new StreamResult(fos);
+ transformer.transform(source, stream);
+
+ } catch (TransformerConfigurationException e) {
+ System.err.println("ServiceControlAssembler: caught TransformerConfigurationException " +
+ "attempting to write to file " + outputFile.getAbsolutePath() +
+ ". Message: " + e.getMessage());
+ } catch (FileNotFoundException e) {
+ System.err.println("*** Warning *** EJBControlAssembler aborted: " +
+ "caught FileNotFoundException attempting to write file " +
+ outputFile.getAbsolutePath() + ". Message: " +
+ e.getMessage());
+ } catch (TransformerException e) {
+ System.err.println("ServiceControlAssembler: caught TransformerException " +
+ "attempting to write to file " + outputFile.getAbsolutePath() +
+ ". Message: " + e.getMessage());
+ } finally {
+
+ if (fos != null) {
+ try {
+ fos.close();
+ } catch (IOException e) {
+ // do nothing
+ }
+ }
+ }
}
}