> Are you planning on moving the code to openjpa-jdbc? > > The openjpa-xmlmapping module is used to store entities to xml instead of a > relational database. It wouldn't make sense to add this code to the > xmlmapping module. >From what I can tell, this code is for storing fields in entities to XML columns in a RDB, so really belongs as part of the JDBC back-end. This patch seems to add a new supported field type to OpenJPA, not a new back-end capability. Or am I missing something? -Patrick On 6/18/07, Michael Dick wrote: > On 6/18/07, catalina wei wrote: > > > > Patrick, > > This is Catalina Wei working for David Wisneski on the XMLMapping feature > > work. > > see my comments below. > > > > > > On 6/15/07, Patrick Linskey wrote: > > > > > > > Cool feature. > > > > > > +1 > > > > > > However, some comments: > > > > > > 1. I don't think that we need a new top-level module for this. This > > > seems to be only useful in the context of the JDBC back-end; IOW, > > > this seems to be an extension of the JDBC back-end to support XML data > > > types. So, IMO, it should just be part of the openjpa-jdbc-5 package. > > > > > > 2. If we did need a new module, I think that it is safe to leave off > > > the '-5' suffix. Currently, we only use the '-5' suffix for cases > > > where the module is duplicating another module that already exists but > > > only requires JDK1.4. For example, we don't have > > > 'openjpa-persistence-5', since there is no 1.4 support for the JPA > > > spec. > > > > > > I will drop the '-5' suffix. > > > Are you planning on moving the code to openjpa-jdbc? > > The openjpa-xmlmapping module is used to store entities to xml instead of a > relational database. It wouldn't make sense to add this code to the > xmlmapping module. > > > 3. What is the Java 5 dependency? Is it just usage of things like > > > StringWriter, or is there more to it than that? > > > > > > The Java 5 dependency is due to JAXB XML marshall/unmarshal > > dependendies. > > > > > > + * @since 1.0 > > > > > > Nice... I'm always happy to see @since tags. I wish there were some > > > way to enforce them for new classes / visible methods, or to > > > auto-generate them during javac builds and be done with it. > > > > > > > > + * Base class for xml value handlers. > > > > > > You may extend this class and override the following method, passing > > Marshaller's property such as: > > > > *public* Object toDataStoreValue(ValueMapping vm, Object val, JDBCStore > > store) { > > > > Marshaller m = jc.createMarshaller(); > > > > m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); > > > > Why is this called a "base class"? Are there other handler classes > > > that aren't checked in yet? > > > > > > see previous comment. > > > > -Patrick > > > > > > On 6/15/07, Craig L Russell wrote: > > > > Hi Dave, > > > > > > > > Cool feature. > > > > > > > > The standard for .xml and .java files in OpenJPA is to mark them in > > > > svn as eolstyle:native. > > > > > > > > Can you update your environment so future new files are automatically > > > > marked, and fix these recent files? > > > > > > > > Thanks, > > > > > > > > Craig > > > > > > > > On Jun 15, 2007, at 4:41 PM, wisneskid@apache.org wrote: > > > > > > > > > Author: wisneskid > > > > > Date: Fri Jun 15 16:41:50 2007 > > > > > New Revision: 547827 > > > > > > > > > > URL: http://svn.apache.org/viewvc?view=rev&rev=547827 > > > > > Log: > > > > > OPENJPA-240 Feature:Persistent field mapping support for XML column > > > > > type. > > > > > > > > > > Added: > > > > > openjpa/trunk/openjpa-xmlmapping-5/ > > > > > openjpa/trunk/openjpa-xmlmapping-5/pom.xml > > > > > openjpa/trunk/openjpa-xmlmapping-5/src/ > > > > > openjpa/trunk/openjpa-xmlmapping-5/src/main/ > > > > > openjpa/trunk/openjpa-xmlmapping-5/src/main/java/ > > > > > openjpa/trunk/openjpa-xmlmapping-5/src/main/java/org/ > > > > > openjpa/trunk/openjpa-xmlmapping-5/src/main/java/org/apache/ > > > > > openjpa/trunk/openjpa-xmlmapping-5/src/main/java/org/apache/ > > > > > openjpa/ > > > > > openjpa/trunk/openjpa-xmlmapping-5/src/main/java/org/apache/ > > > > > openjpa/xmlmapping/ > > > > > openjpa/trunk/openjpa-xmlmapping-5/src/main/java/org/apache/ > > > > > openjpa/xmlmapping/XmlValueHandler.java > > > > > > > > > > Added: openjpa/trunk/openjpa-xmlmapping-5/pom.xml > > > > > URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa- > > > > > xmlmapping-5/pom.xml?view=auto&rev=547827 > > > > > > > ====================================================================== > > > > > ======== > > > > > --- openjpa/trunk/openjpa-xmlmapping-5/pom.xml (added) > > > > > +++ openjpa/trunk/openjpa-xmlmapping-5/pom.xml Fri Jun 15 16:41:50 > > > > > 2007 > > > > > @@ -0,0 +1,64 @@ > > > > > + > > > > > + > > > > > + > > > > + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > > > > + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 > > > > > http://maven.apache.org/maven-v4_0_0.xsd"> > > > > > + 4.0.0 > > > > > + org.apache.openjpa > > > > > + openjpa-xmlmapping-5 > > > > > + jar > > > > > + OpenJPA Xmlmapping 1.5 > > > > > + OpenJPA Xmlmapping 1.5 > > > > > + http://incubator.apache.org/projects/openjpa > > > > > + > > > > > + org.apache.openjpa > > > > > + openjpa-parent > > > > > + 1.0.0-SNAPSHOT > > > > > + > > > > > + > > > > > + > > > > > + org.apache.openjpa > > > > > + openjpa-kernel > > > > > + ${pom.version} > > > > > + > > > > > + > > > > > + org.apache.openjpa > > > > > + openjpa-jdbc > > > > > + ${pom.version} > > > > > + > > > > > + > > > > > + javax.xml.bind > > > > > + jaxb-api > > > > > + 2.1 > > > > > + > > > > > + > > > > > + > > > > > + > > > > > + > > > > > + org.apache.maven.plugins > > > > > + maven-compiler-plugin > > > > > + > > > > > + 1.5 > > > > > + 1.5 > > > > > + > > > > > + > > > > > + > > > > > + > > > > > + > > > > > \ No newline at end of file > > > > > > > > > > Added: openjpa/trunk/openjpa-xmlmapping-5/src/main/java/org/apache/ > > > > > openjpa/xmlmapping/XmlValueHandler.java > > > > > URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa- > > > > > xmlmapping-5/src/main/java/org/apache/openjpa/xmlmapping/ > > > > > XmlValueHandler.java?view=auto&rev=547827 > > > > > > > ====================================================================== > > > > > ======== > > > > > --- openjpa/trunk/openjpa-xmlmapping-5/src/main/java/org/apache/ > > > > > openjpa/xmlmapping/XmlValueHandler.java (added) > > > > > +++ openjpa/trunk/openjpa-xmlmapping-5/src/main/java/org/apache/ > > > > > openjpa/xmlmapping/XmlValueHandler.java Fri Jun 15 16:41:50 2007 > > > > > @@ -0,0 +1,97 @@ > > > > > +/* > > > > > + * 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.xmlmapping; > > > > > + > > > > > +import java.io.StringReader; > > > > > +import java.io.StringWriter; > > > > > +import java.io.Writer; > > > > > + > > > > > +import javax.xml.bind.JAXBContext; > > > > > +import javax.xml.bind.JAXBException; > > > > > +import javax.xml.bind.Marshaller; > > > > > +import javax.xml.bind.Unmarshaller; > > > > > +import javax.xml.transform.stream.StreamSource; > > > > > + > > > > > +import org.apache.openjpa.jdbc.kernel.JDBCStore; > > > > > +import org.apache.openjpa.jdbc.meta.ValueMapping; > > > > > +import org.apache.openjpa.jdbc.meta.strats.AbstractValueHandler; > > > > > +import org.apache.openjpa.jdbc.schema.Column; > > > > > +import org.apache.openjpa.jdbc.schema.ColumnIO; > > > > > +import org.apache.openjpa.meta.JavaTypes; > > > > > +import org.apache.openjpa.util.InternalException; > > > > > + > > > > > +/** > > > > > + * Base class for xml value handlers. > > > > > + * > > > > > + * @author Catalina Wei > > > > > + * @since 1.0 > > > > > + */ > > > > > +public class XmlValueHandler > > > > > + extends AbstractValueHandler { > > > > > + private static final String PROXY_SUFFIX = "$proxy"; > > > > > + > > > > > + public Column[] map(ValueMapping vm, String name, ColumnIO io, > > > > > + boolean adapt) { > > > > > + Column col = new Column(); > > > > > + col.setName(name); > > > > > + col.setJavaType(JavaTypes.STRING); > > > > > + col.setSize(-1); > > > > > + col.setTypeName(vm.getMappingRepository().getDBDictionary() > > > > > + .xmlTypeName); > > > > > + return new Column[]{ col }; > > > > > + } > > > > > + > > > > > + public Object toDataStoreValue(ValueMapping vm, Object val, > > > > > + JDBCStore store) { > > > > > + // check for null value. > > > > > + if (val == null) > > > > > + return null; > > > > > + try { > > > > > + JAXBContext jc = JAXBContext.newInstance( > > > > > + // on update val is a proxy, that can not be > > > > > marshalled. > > > > > + // so we get original type if val is a proxy. > > > > > + (val.getClass().getName().endsWith(PROXY_SUFFIX)) > > > > > + ? val.getClass().getSuperclass() > > > > > + : val.getClass()); > > > > > + Marshaller m = jc.createMarshaller(); > > > > > + Writer result = new StringWriter(); > > > > > + m.marshal( val, result ); > > > > > + return result.toString(); > > > > > + } > > > > > + catch(JAXBException je) { > > > > > + throw new InternalException(je); > > > > > + } > > > > > + } > > > > > + > > > > > + public Object toObjectValue(ValueMapping vm, Object val) { > > > > > + // check for null value. > > > > > + if (val == null) > > > > > + return null; > > > > > + try { > > > > > + String packageName = vm.getDeclaredType().getPackage > > > > > ().getName(); > > > > > + JAXBContext jc = JAXBContext.newInstance(packageName); > > > > > + Unmarshaller u = jc.createUnmarshaller(); > > > > > + return u.unmarshal(new StreamSource(new StringReader > > > > > + (val.toString()))); > > > > > + } > > > > > + catch(JAXBException je) { > > > > > + throw new InternalException(je); > > > > > + } > > > > > + } > > > > > +} > > > > > > > > > > > > > > > > > > Craig Russell > > > > Architect, Sun Java Enterprise System http://java.sun.com/products/jdo > > > > 408 276-5638 mailto:Craig.Russell@sun.com > > > > P.S. A good JDO? O, Gasp! > > > > > > > > > > > > > > > > > > > > > -- > > > Patrick Linskey > > > 202 669 5907 > > > > > > -- Patrick Linskey 202 669 5907