From eac9c66b74a1ef21bf3f430ed84f83965bdc3a4f Mon Sep 17 00:00:00 2001 From: Catalina Wei Date: Fri, 18 Jun 2010 00:41:16 +0000 Subject: [PATCH] OPENJPA-1697: A EnumValueHandler strategy along with XmlType annotation incorrectly mapped to XmlType in create table DDL git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@955805 13f79535-47bb-0310-9956-ffa450edef68 --- .../AnnotationPersistenceMappingParser.java | 11 ++- .../persistence/jdbc/mapping/Authority.java | 79 +++++++++++++++++++ .../jdbc/mapping/TestEnumXmlTypeMapping.java | 38 +++++++++ 3 files changed, 122 insertions(+), 6 deletions(-) create mode 100644 openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/Authority.java create mode 100644 openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/TestEnumXmlTypeMapping.java diff --git a/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java b/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java index 0fde0c8a3..b8f79c6ba 100644 --- a/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java +++ b/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java @@ -1534,11 +1534,11 @@ public class AnnotationPersistenceMappingParser throw new MetaDataException(_loc.get("num-cols-mismatch", fm, String.valueOf(cols.size()), String.valueOf(pcols.length))); - // cache the JAXB XmlType class if it is present so we do not + // cache the JAXB XmlRootElement class if it is present so we do not // have a hard-wired dependency on JAXB here - Class xmlTypeClass = null; + Class xmlRootElementClass = null; try { - xmlTypeClass = Class.forName("javax.xml.bind.annotation.XmlType"); + xmlRootElementClass = Class.forName("javax.xml.bind.annotation.XmlRootElement"); } catch (Exception e) { } @@ -1552,12 +1552,11 @@ public class AnnotationPersistenceMappingParser cols = new ArrayList(pcols.length); cols.add(newColumn(pcols[i], delimit())); } - - if (xmlTypeClass != null + if (xmlRootElementClass != null && StringUtils.isEmpty(pcols[i].columnDefinition()) && (AccessController.doPrivileged(J2DoPrivHelper .isAnnotationPresentAction(fm.getDeclaredType(), - xmlTypeClass))).booleanValue()) { + xmlRootElementClass))).booleanValue()) { DBDictionary dict = ((MappingRepository) getRepository()) .getDBDictionary(); if (dict.supportsXMLColumn) diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/Authority.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/Authority.java new file mode 100644 index 000000000..d6bf8d64d --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/Authority.java @@ -0,0 +1,79 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.apache.openjpa.persistence.jdbc.mapping; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.Table; +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlType; + +import org.apache.openjpa.persistence.Persistent; +import org.apache.openjpa.persistence.jdbc.Strategy; + +@Entity +@Table(name="authority") +@NamedQueries( { + @NamedQuery(name = "AllIonAuthorities", query = "SELECT x FROM IonAuthority x") +}) +public class Authority { +@Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "ID") + private Integer id; + + @Enumerated( EnumType.STRING ) + @Column(nullable=false, length=128, updatable=true, insertable=true) + @Persistent + @Strategy("org.apache.openjpa.jdbc.meta.strats.EnumValueHandler") + private AuthorityValues authorityName; + + + @XmlType(name = "IonAuthorityValues") + @XmlEnum + public enum AuthorityValues { + + AUTH1, + AUTH2, + } + + public Authority() {} + public Authority(AuthorityValues auth) { + authorityName = auth; + } + + public Integer getId() { + return id; + } + + public void setAuthorityName(AuthorityValues auth) { + authorityName = auth; + } + + public AuthorityValues getAuthorityName() { + return authorityName; + } +} diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/TestEnumXmlTypeMapping.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/TestEnumXmlTypeMapping.java new file mode 100644 index 000000000..0aada7628 --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/mapping/TestEnumXmlTypeMapping.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ +package org.apache.openjpa.persistence.jdbc.mapping; + +import org.apache.openjpa.jdbc.meta.ClassMapping; +import org.apache.openjpa.jdbc.meta.FieldMapping; +import org.apache.openjpa.jdbc.schema.Column; +import org.apache.openjpa.persistence.test.SingleEMFTestCase; + +public class TestEnumXmlTypeMapping extends SingleEMFTestCase { + + public void setUp() { + setUp(Authority.class, DROP_TABLES); + } + + public void testEnumXmlType() { + ClassMapping mapping = getMapping(Authority.class); + FieldMapping fm = mapping.getFieldMapping("authorityName"); + Column[] cols = fm.getColumns(); + assertFalse(cols[0].isXML()); + } +}