Author: djencks Date: Thu Feb 3 22:59:48 2005 New Revision: 151327 URL: http://svn.apache.org/viewcvs?view=rev&rev=151327 Log: GERONIMO-567. Converted ejb 1.1 dds should get cmp-version 1.x for cmp entity beans
Added: geronimo/trunk/modules/j2ee-schema/src/test-data/j2ee_1_2dtd/ejb-1-11.xml geronimo/trunk/modules/j2ee-schema/src/test-data/j2ee_1_2dtd/ejb-1-21.xml Modified: geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java geronimo/trunk/modules/j2ee-schema/src/test/org/apache/geronimo/schema/SchemaConversionUtilsTest.java Modified: geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java?view=diff&r1=151326&r2=151327 ============================================================================== --- geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java (original) +++ geronimo/trunk/modules/j2ee-schema/src/java/org/apache/geronimo/schema/SchemaConversionUtils.java Thu Feb 3 22:59:48 2005 @@ -48,6 +48,7 @@ private static final QName RESOURCE_ADAPTER_VERSION = new QName(J2EE_NAMESPACE, "resourceadapter-version"); private static final QName TAGLIB = new QName(J2EE_NAMESPACE, "taglib"); + private static final QName CMP_VERSION = new QName(J2EE_NAMESPACE, "cmp-version"); private SchemaConversionUtils() { } @@ -222,13 +223,29 @@ } XmlCursor cursor = xmlObject.newCursor(); XmlCursor moveable = xmlObject.newCursor(); - String schemaLocationURL = "http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"; - String version = "2.1"; try { + cursor.toFirstChild(); + if ("http://java.sun.com/xml/ns/j2ee".equals(cursor.getName().getNamespaceURI())) { + XmlObject result = xmlObject.changeType(EjbJarDocument.type); + validateDD(result); + return (EjbJarDocument) result; + } + XmlDocumentProperties xmlDocumentProperties = cursor.documentProperties(); + String publicId = xmlDocumentProperties.getDoctypePublicId(); + String cmpVersion; + if ("-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN".equals(publicId)) { + cmpVersion = "1.x"; + } else if ("-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN".equals(publicId)) { + cmpVersion = null;//2.x is the default "2.x"; + } else { + throw new XmlException("Unrecognized document type: " + publicId); + } + String schemaLocationURL = "http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"; + String version = "2.1"; convertToSchema(cursor, J2EE_NAMESPACE, schemaLocationURL, version); //play with message-driven cursor.toStartDoc(); - convertBeans(cursor, moveable); + convertBeans(cursor, moveable, cmpVersion); } finally { cursor.dispose(); moveable.dispose(); @@ -366,8 +383,8 @@ if (cursor.isStart()) { String localName = cursor.getName().getLocalPart(); if (localName.equals("gbean") - || localName.equals("dependency") - || localName.equals("include")) { + || localName.equals("dependency") + || localName.equals("include")) { convertElementToSchema(cursor, end, GERONIMO_SERVICE_NAMESPACE); } } @@ -450,7 +467,7 @@ return true; } - public static void convertBeans(XmlCursor cursor, XmlCursor moveable) { + public static void convertBeans(XmlCursor cursor, XmlCursor moveable, String cmpVersion) { cursor.toChild(J2EE_NAMESPACE, "ejb-jar"); cursor.toChild(J2EE_NAMESPACE, "enterprise-beans"); if (cursor.toFirstChild()) { @@ -463,11 +480,17 @@ cursor.toNextSibling(); convertToJNDIEnvironmentRefsGroup(cursor, moveable); } else if ("entity".equals(type)) { + cursor.toChild(J2EE_NAMESPACE, "persistence-type"); + String persistenceType = cursor.getTextValue(); //reentrant is the last required tag before jndiEnvironmentRefsGroup - cursor.toChild(J2EE_NAMESPACE, "reentrant"); + cursor.toNextSibling(J2EE_NAMESPACE, "reentrant"); //Convert 2.0 True/False to true/false for 2.1 cursor.setTextValue(cursor.getTextValue().toLowerCase()); - cursor.toNextSibling(J2EE_NAMESPACE, "cmp-version"); + if (cmpVersion != null && !cursor.toNextSibling(CMP_VERSION) && "Container".equals(persistenceType)) { + cursor.toNextSibling(); + cursor.insertElementWithText(CMP_VERSION, cmpVersion); + } + cursor.toNextSibling(J2EE_NAMESPACE, "abstract-schema-name"); while (cursor.toNextSibling(J2EE_NAMESPACE, "cmp-field")) { ; Added: geronimo/trunk/modules/j2ee-schema/src/test-data/j2ee_1_2dtd/ejb-1-11.xml URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/j2ee-schema/src/test-data/j2ee_1_2dtd/ejb-1-11.xml?view=auto&rev=151327 ============================================================================== --- geronimo/trunk/modules/j2ee-schema/src/test-data/j2ee_1_2dtd/ejb-1-11.xml (added) +++ geronimo/trunk/modules/j2ee-schema/src/test-data/j2ee_1_2dtd/ejb-1-11.xml Thu Feb 3 22:59:48 2005 @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- + + Copyright 2003-2004 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. +--> + +<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' + 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'> + +<ejb-jar> + <description>description</description> + <display-name>My Favorite Ejb</display-name> + <enterprise-beans> + <entity> + <description>description</description> + <display-name>Favorite Bean</display-name> + <ejb-name>FavoriteBean</ejb-name> + <home>org.apache.geronimo.FavoriteBeanHome</home> + <remote>org.apache.geronimo.FavoriteBean</remote> + <ejb-class>org.apache.geronimo.FavoriteBeanEJB</ejb-class> + <persistence-type>Container</persistence-type> + <prim-key-class>java.lang.Integer</prim-key-class> + <reentrant>False</reentrant> + <cmp-field> + <field-name>id</field-name> + </cmp-field> + <cmp-field> + <field-name>preference</field-name> + </cmp-field> + <cmp-field> + <field-name>color</field-name> + </cmp-field> + <primkey-field>id</primkey-field> + </entity> + </enterprise-beans> + <assembly-descriptor> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Home</method-intf> + <method-name>remove</method-name> + <method-params> + <method-param>java.lang.Object</method-param> + </method-params> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Home</method-intf> + <method-name>create</method-name> + <method-params> + <method-param>int</method-param> + <method-param>float</method-param> + <method-param>java.lang.String</method-param> + </method-params> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Remote</method-intf> + <method-name>getPreference</method-name> + <method-params/> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Remote</method-intf> + <method-name>remove</method-name> + <method-params/> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Home</method-intf> + <method-name>remove</method-name> + <method-params> + <method-param>javax.ejb.Handle</method-param> + </method-params> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Home</method-intf> + <method-name>findByPrimaryKey</method-name> + <method-params> + <method-param>java.lang.Integer</method-param> + </method-params> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Remote</method-intf> + <method-name>updatePreference</method-name> + <method-params> + <method-param>float</method-param> + </method-params> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + </assembly-descriptor> +</ejb-jar> + Added: geronimo/trunk/modules/j2ee-schema/src/test-data/j2ee_1_2dtd/ejb-1-21.xml URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/j2ee-schema/src/test-data/j2ee_1_2dtd/ejb-1-21.xml?view=auto&rev=151327 ============================================================================== --- geronimo/trunk/modules/j2ee-schema/src/test-data/j2ee_1_2dtd/ejb-1-21.xml (added) +++ geronimo/trunk/modules/j2ee-schema/src/test-data/j2ee_1_2dtd/ejb-1-21.xml Thu Feb 3 22:59:48 2005 @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!-- + + Copyright 2003-2004 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. +--> + +<ejb-jar xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee"> + <description>description</description> + <display-name>My Favorite Ejb</display-name> + <enterprise-beans> + <entity> + <description>description</description> + <display-name>Favorite Bean</display-name> + <ejb-name>FavoriteBean</ejb-name> + <home>org.apache.geronimo.FavoriteBeanHome</home> + <remote>org.apache.geronimo.FavoriteBean</remote> + <ejb-class>org.apache.geronimo.FavoriteBeanEJB</ejb-class> + <persistence-type>Container</persistence-type> + <prim-key-class>java.lang.Integer</prim-key-class> + <reentrant>false</reentrant> + <cmp-version>1.x</cmp-version> + <cmp-field> + <field-name>id</field-name> + </cmp-field> + <cmp-field> + <field-name>preference</field-name> + </cmp-field> + <cmp-field> + <field-name>color</field-name> + </cmp-field> + <primkey-field>id</primkey-field> + </entity> + </enterprise-beans> + <assembly-descriptor> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Home</method-intf> + <method-name>remove</method-name> + <method-params> + <method-param>java.lang.Object</method-param> + </method-params> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Home</method-intf> + <method-name>create</method-name> + <method-params> + <method-param>int</method-param> + <method-param>float</method-param> + <method-param>java.lang.String</method-param> + </method-params> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Remote</method-intf> + <method-name>getPreference</method-name> + <method-params/> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Remote</method-intf> + <method-name>remove</method-name> + <method-params/> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Home</method-intf> + <method-name>remove</method-name> + <method-params> + <method-param>javax.ejb.Handle</method-param> + </method-params> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Home</method-intf> + <method-name>findByPrimaryKey</method-name> + <method-params> + <method-param>java.lang.Integer</method-param> + </method-params> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + <container-transaction> + <method> + <ejb-name>FavoriteBean</ejb-name> + <method-intf>Remote</method-intf> + <method-name>updatePreference</method-name> + <method-params> + <method-param>float</method-param> + </method-params> + </method> + <trans-attribute>Required</trans-attribute> + </container-transaction> + </assembly-descriptor> +</ejb-jar> Modified: geronimo/trunk/modules/j2ee-schema/src/test/org/apache/geronimo/schema/SchemaConversionUtilsTest.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/j2ee-schema/src/test/org/apache/geronimo/schema/SchemaConversionUtilsTest.java?view=diff&r1=151326&r2=151327 ============================================================================== --- geronimo/trunk/modules/j2ee-schema/src/test/org/apache/geronimo/schema/SchemaConversionUtilsTest.java (original) +++ geronimo/trunk/modules/j2ee-schema/src/test/org/apache/geronimo/schema/SchemaConversionUtilsTest.java Thu Feb 3 22:59:48 2005 @@ -144,6 +144,35 @@ assertTrue("Differences after reconverting to application schema: " + problems, ok3); } + public void testEJB11ToEJB21Transform() throws Exception { + File srcXml = new File(basedir, "src/test-data/j2ee_1_2dtd/ejb-1-11.xml"); + File expectedOutputXml = new File(basedir, "src/test-data/j2ee_1_2dtd/ejb-1-21.xml"); + XmlObject xmlObject = XmlObject.Factory.parse(srcXml); + XmlObject expected = XmlObject.Factory.parse(expectedOutputXml); + SchemaConversionUtils.validateDD(expected); + xmlObject = SchemaConversionUtils.convertToEJBSchema(xmlObject); +// System.out.println(xmlObject.toString()); +// System.out.println(expected.toString()); + List problems = new ArrayList(); + boolean ok = compareXmlObjects(xmlObject, expected, problems); + assertTrue("Differences: " + problems, ok); + //make sure trying to convert twice has no bad effects + XmlCursor cursor2 = xmlObject.newCursor(); + try { + String schemaLocationURL = "http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"; + String version = "2.1"; + assertFalse(SchemaConversionUtils.convertToSchema(cursor2, SchemaConversionUtils.J2EE_NAMESPACE, schemaLocationURL, version)); + } finally { + cursor2.dispose(); + } + boolean ok2 = compareXmlObjects(xmlObject, expected, problems); + assertTrue("Differences after reconverting to schema: " + problems, ok2); + //do the whole transform twice... + xmlObject = SchemaConversionUtils.convertToEJBSchema(xmlObject); + boolean ok3 = compareXmlObjects(xmlObject, expected, problems); + assertTrue("Differences after reconverting to ejb schema: " + problems, ok3); + } + public void testEJB20ToEJB21Transform() throws Exception { File srcXml = new File(basedir, "src/test-data/j2ee_1_3dtd/ejb-jar.xml"); File expectedOutputXml = new File(basedir, "src/test-data/j2ee_1_3dtd/ejb-jar-21.xml");