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
This commit is contained in:
Catalina Wei 2010-06-18 00:41:16 +00:00
parent dbaf9fa67e
commit eac9c66b74
3 changed files with 122 additions and 6 deletions

View File

@ -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<Column>(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)

View File

@ -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;
}
}

View File

@ -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());
}
}