You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Craig L Russell <Cr...@Sun.COM> on 2007/06/16 01:57:31 UTC

Re: svn commit: r547827 - in /openjpa/trunk/openjpa-xmlmapping-5: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/openjpa/ src/main/java/org/apache/openjpa/xmlmapping/

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 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<!--
> + 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.
> +-->
> +<project xmlns="http://maven.apache.org/POM/4.0.0"
> +         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">
> +    <modelVersion>4.0.0</modelVersion>
> +    <groupId>org.apache.openjpa</groupId>
> +    <artifactId>openjpa-xmlmapping-5</artifactId>
> +    <packaging>jar</packaging>
> +    <name>OpenJPA Xmlmapping 1.5</name>
> +    <description>OpenJPA Xmlmapping 1.5</description>
> +    <url>http://incubator.apache.org/projects/openjpa</url>
> +    <parent>
> +        <groupId>org.apache.openjpa</groupId>
> +        <artifactId>openjpa-parent</artifactId>
> +        <version>1.0.0-SNAPSHOT</version>
> +    </parent>
> +    <dependencies>
> +        <dependency>
> +            <groupId>org.apache.openjpa</groupId>
> +            <artifactId>openjpa-kernel</artifactId>
> +            <version>${pom.version}</version>
> +        </dependency>
> +        <dependency>
> +            <groupId>org.apache.openjpa</groupId>
> +            <artifactId>openjpa-jdbc</artifactId>
> +            <version>${pom.version}</version>
> +        </dependency>	
> +	    <dependency>
> +		    <groupId>javax.xml.bind</groupId>
> +		    <artifactId>jaxb-api</artifactId>
> +		    <version>2.1</version>
> +	    </dependency>
> +    </dependencies>
> +    <build>
> +        <plugins>
> +            <plugin>
> +                <groupId>org.apache.maven.plugins</groupId>
> +                <artifactId>maven-compiler-plugin</artifactId>
> +                <configuration>
> +                    <source>1.5</source>
> +                    <target>1.5</target>
> +                </configuration>
> +            </plugin>
> +        </plugins>
> +    </build>
> +</project>
> \ 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!


Re: svn commit: r547827 - in /openjpa/trunk/openjpa-xmlmapping-5: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/openjpa/ src/main/java/org/apache/openjpa/xmlmapping/

Posted by catalina wei <ca...@gmail.com>.
Patrick,
Derby has no support for XML datatype.
I will add test cases for DB2 soon.

On 6/15/07, Patrick Linskey <pl...@gmail.com> wrote:
>
> Also, does anyone know if Derby has any support for XML datatypes?
>
> Regardless, it'd be really good to see some test cases. Historically,
> we used to code our test cases to automatically disable themselves
> when running against databases that they didn't support; we could
> probably move that logic to the new OpenJPA test hierarchy. If Derby
> doesn't support XML datatypes, then this could be a good moment to add
> such logic.
>
> -Patrick
>
> On 6/15/07, Patrick Linskey <pl...@gmail.com> 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.
> >
> > 3. What is the Java 5 dependency? Is it just usage of things like
> > StringWriter, or is there more to it than that?
> >
> > > > + * @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.
> >
> > Why is this called a "base class"? Are there other handler classes
> > that aren't checked in yet?
> >
> > -Patrick
> >
> > On 6/15/07, Craig L Russell <Cr...@sun.com> 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 @@
> > > > +<?xml version="1.0" encoding="UTF-8"?>
> > > > +<!--
> > > > + 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.
> > > > +-->
> > > > +<project xmlns="http://maven.apache.org/POM/4.0.0"
> > > > +         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">
> > > > +    <modelVersion>4.0.0</modelVersion>
> > > > +    <groupId>org.apache.openjpa</groupId>
> > > > +    <artifactId>openjpa-xmlmapping-5</artifactId>
> > > > +    <packaging>jar</packaging>
> > > > +    <name>OpenJPA Xmlmapping 1.5</name>
> > > > +    <description>OpenJPA Xmlmapping 1.5</description>
> > > > +    <url>http://incubator.apache.org/projects/openjpa</url>
> > > > +    <parent>
> > > > +        <groupId>org.apache.openjpa</groupId>
> > > > +        <artifactId>openjpa-parent</artifactId>
> > > > +        <version>1.0.0-SNAPSHOT</version>
> > > > +    </parent>
> > > > +    <dependencies>
> > > > +        <dependency>
> > > > +            <groupId>org.apache.openjpa</groupId>
> > > > +            <artifactId>openjpa-kernel</artifactId>
> > > > +            <version>${pom.version}</version>
> > > > +        </dependency>
> > > > +        <dependency>
> > > > +            <groupId>org.apache.openjpa</groupId>
> > > > +            <artifactId>openjpa-jdbc</artifactId>
> > > > +            <version>${pom.version}</version>
> > > > +        </dependency>
> > > > +         <dependency>
> > > > +                 <groupId>javax.xml.bind</groupId>
> > > > +                 <artifactId>jaxb-api</artifactId>
> > > > +                 <version>2.1</version>
> > > > +         </dependency>
> > > > +    </dependencies>
> > > > +    <build>
> > > > +        <plugins>
> > > > +            <plugin>
> > > > +                <groupId>org.apache.maven.plugins</groupId>
> > > > +                <artifactId>maven-compiler-plugin</artifactId>
> > > > +                <configuration>
> > > > +                    <source>1.5</source>
> > > > +                    <target>1.5</target>
> > > > +                </configuration>
> > > > +            </plugin>
> > > > +        </plugins>
> > > > +    </build>
> > > > +</project>
> > > > \ 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
>

Re: svn commit: r547827 - in /openjpa/trunk/openjpa-xmlmapping-5: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/openjpa/ src/main/java/org/apache/openjpa/xmlmapping/

Posted by Patrick Linskey <pl...@gmail.com>.
Also, does anyone know if Derby has any support for XML datatypes?

Regardless, it'd be really good to see some test cases. Historically,
we used to code our test cases to automatically disable themselves
when running against databases that they didn't support; we could
probably move that logic to the new OpenJPA test hierarchy. If Derby
doesn't support XML datatypes, then this could be a good moment to add
such logic.

-Patrick

On 6/15/07, Patrick Linskey <pl...@gmail.com> 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.
>
> 3. What is the Java 5 dependency? Is it just usage of things like
> StringWriter, or is there more to it than that?
>
> > > + * @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.
>
> Why is this called a "base class"? Are there other handler classes
> that aren't checked in yet?
>
> -Patrick
>
> On 6/15/07, Craig L Russell <Cr...@sun.com> 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 @@
> > > +<?xml version="1.0" encoding="UTF-8"?>
> > > +<!--
> > > + 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.
> > > +-->
> > > +<project xmlns="http://maven.apache.org/POM/4.0.0"
> > > +         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">
> > > +    <modelVersion>4.0.0</modelVersion>
> > > +    <groupId>org.apache.openjpa</groupId>
> > > +    <artifactId>openjpa-xmlmapping-5</artifactId>
> > > +    <packaging>jar</packaging>
> > > +    <name>OpenJPA Xmlmapping 1.5</name>
> > > +    <description>OpenJPA Xmlmapping 1.5</description>
> > > +    <url>http://incubator.apache.org/projects/openjpa</url>
> > > +    <parent>
> > > +        <groupId>org.apache.openjpa</groupId>
> > > +        <artifactId>openjpa-parent</artifactId>
> > > +        <version>1.0.0-SNAPSHOT</version>
> > > +    </parent>
> > > +    <dependencies>
> > > +        <dependency>
> > > +            <groupId>org.apache.openjpa</groupId>
> > > +            <artifactId>openjpa-kernel</artifactId>
> > > +            <version>${pom.version}</version>
> > > +        </dependency>
> > > +        <dependency>
> > > +            <groupId>org.apache.openjpa</groupId>
> > > +            <artifactId>openjpa-jdbc</artifactId>
> > > +            <version>${pom.version}</version>
> > > +        </dependency>
> > > +         <dependency>
> > > +                 <groupId>javax.xml.bind</groupId>
> > > +                 <artifactId>jaxb-api</artifactId>
> > > +                 <version>2.1</version>
> > > +         </dependency>
> > > +    </dependencies>
> > > +    <build>
> > > +        <plugins>
> > > +            <plugin>
> > > +                <groupId>org.apache.maven.plugins</groupId>
> > > +                <artifactId>maven-compiler-plugin</artifactId>
> > > +                <configuration>
> > > +                    <source>1.5</source>
> > > +                    <target>1.5</target>
> > > +                </configuration>
> > > +            </plugin>
> > > +        </plugins>
> > > +    </build>
> > > +</project>
> > > \ 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

Re: svn commit: r547827 - in /openjpa/trunk/openjpa-xmlmapping-5: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/openjpa/ src/main/java/org/apache/openjpa/xmlmapping/

Posted by Patrick Linskey <pl...@gmail.com>.
> 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 <mi...@gmail.com> wrote:
> On 6/18/07, catalina wei <ca...@gmail.com> 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 <pl...@gmail.com> 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 <Cr...@sun.com> 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 @@
> > > > > +<?xml version="1.0" encoding="UTF-8"?>
> > > > > +<!--
> > > > > + 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.
> > > > > +-->
> > > > > +<project xmlns="http://maven.apache.org/POM/4.0.0"
> > > > > +         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">
> > > > > +    <modelVersion>4.0.0</modelVersion>
> > > > > +    <groupId>org.apache.openjpa</groupId>
> > > > > +    <artifactId>openjpa-xmlmapping-5</artifactId>
> > > > > +    <packaging>jar</packaging>
> > > > > +    <name>OpenJPA Xmlmapping 1.5</name>
> > > > > +    <description>OpenJPA Xmlmapping 1.5</description>
> > > > > +    <url>http://incubator.apache.org/projects/openjpa</url>
> > > > > +    <parent>
> > > > > +        <groupId>org.apache.openjpa</groupId>
> > > > > +        <artifactId>openjpa-parent</artifactId>
> > > > > +        <version>1.0.0-SNAPSHOT</version>
> > > > > +    </parent>
> > > > > +    <dependencies>
> > > > > +        <dependency>
> > > > > +            <groupId>org.apache.openjpa</groupId>
> > > > > +            <artifactId>openjpa-kernel</artifactId>
> > > > > +            <version>${pom.version}</version>
> > > > > +        </dependency>
> > > > > +        <dependency>
> > > > > +            <groupId>org.apache.openjpa</groupId>
> > > > > +            <artifactId>openjpa-jdbc</artifactId>
> > > > > +            <version>${pom.version}</version>
> > > > > +        </dependency>
> > > > > +         <dependency>
> > > > > +                 <groupId>javax.xml.bind</groupId>
> > > > > +                 <artifactId>jaxb-api</artifactId>
> > > > > +                 <version>2.1</version>
> > > > > +         </dependency>
> > > > > +    </dependencies>
> > > > > +    <build>
> > > > > +        <plugins>
> > > > > +            <plugin>
> > > > > +                <groupId>org.apache.maven.plugins</groupId>
> > > > > +                <artifactId>maven-compiler-plugin</artifactId>
> > > > > +                <configuration>
> > > > > +                    <source>1.5</source>
> > > > > +                    <target>1.5</target>
> > > > > +                </configuration>
> > > > > +            </plugin>
> > > > > +        </plugins>
> > > > > +    </build>
> > > > > +</project>
> > > > > \ 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

Re: svn commit: r547827 - in /openjpa/trunk/openjpa-xmlmapping-5: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/openjpa/ src/main/java/org/apache/openjpa/xmlmapping/

Posted by catalina wei <ca...@gmail.com>.
Mike,
I am proposing the name change from "openjpa-xmlmapping-5" to
"openjpa-xmlmapping-jdbc".
This naming shall indicate that the package is for JDBC.

Catalina


On 6/18/07, Michael Dick <mi...@gmail.com> wrote:
>
> On 6/18/07, catalina wei <ca...@gmail.com> 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 <pl...@gmail.com> 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 <Cr...@sun.com> 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 @@
> > > > > +<?xml version="1.0" encoding="UTF-8"?>
> > > > > +<!--
> > > > > + 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.
> > > > > +-->
> > > > > +<project xmlns="http://maven.apache.org/POM/4.0.0"
> > > > > +         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">
> > > > > +    <modelVersion>4.0.0</modelVersion>
> > > > > +    <groupId>org.apache.openjpa</groupId>
> > > > > +    <artifactId>openjpa-xmlmapping-5</artifactId>
> > > > > +    <packaging>jar</packaging>
> > > > > +    <name>OpenJPA Xmlmapping 1.5</name>
> > > > > +    <description>OpenJPA Xmlmapping 1.5</description>
> > > > > +    <url>http://incubator.apache.org/projects/openjpa</url>
> > > > > +    <parent>
> > > > > +        <groupId>org.apache.openjpa</groupId>
> > > > > +        <artifactId>openjpa-parent</artifactId>
> > > > > +        <version>1.0.0-SNAPSHOT</version>
> > > > > +    </parent>
> > > > > +    <dependencies>
> > > > > +        <dependency>
> > > > > +            <groupId>org.apache.openjpa</groupId>
> > > > > +            <artifactId>openjpa-kernel</artifactId>
> > > > > +            <version>${pom.version}</version>
> > > > > +        </dependency>
> > > > > +        <dependency>
> > > > > +            <groupId>org.apache.openjpa</groupId>
> > > > > +            <artifactId>openjpa-jdbc</artifactId>
> > > > > +            <version>${pom.version}</version>
> > > > > +        </dependency>
> > > > > +         <dependency>
> > > > > +                 <groupId>javax.xml.bind</groupId>
> > > > > +                 <artifactId>jaxb-api</artifactId>
> > > > > +                 <version>2.1</version>
> > > > > +         </dependency>
> > > > > +    </dependencies>
> > > > > +    <build>
> > > > > +        <plugins>
> > > > > +            <plugin>
> > > > > +                <groupId>org.apache.maven.plugins</groupId>
> > > > > +                <artifactId>maven-compiler-plugin</artifactId>
> > > > > +                <configuration>
> > > > > +                    <source>1.5</source>
> > > > > +                    <target>1.5</target>
> > > > > +                </configuration>
> > > > > +            </plugin>
> > > > > +        </plugins>
> > > > > +    </build>
> > > > > +</project>
> > > > > \ 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
> > >
> >
>

Re: svn commit: r547827 - in /openjpa/trunk/openjpa-xmlmapping-5: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/openjpa/ src/main/java/org/apache/openjpa/xmlmapping/

Posted by Michael Dick <mi...@gmail.com>.
On 6/18/07, catalina wei <ca...@gmail.com> 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 <pl...@gmail.com> 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 <Cr...@sun.com> 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 @@
> > > > +<?xml version="1.0" encoding="UTF-8"?>
> > > > +<!--
> > > > + 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.
> > > > +-->
> > > > +<project xmlns="http://maven.apache.org/POM/4.0.0"
> > > > +         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">
> > > > +    <modelVersion>4.0.0</modelVersion>
> > > > +    <groupId>org.apache.openjpa</groupId>
> > > > +    <artifactId>openjpa-xmlmapping-5</artifactId>
> > > > +    <packaging>jar</packaging>
> > > > +    <name>OpenJPA Xmlmapping 1.5</name>
> > > > +    <description>OpenJPA Xmlmapping 1.5</description>
> > > > +    <url>http://incubator.apache.org/projects/openjpa</url>
> > > > +    <parent>
> > > > +        <groupId>org.apache.openjpa</groupId>
> > > > +        <artifactId>openjpa-parent</artifactId>
> > > > +        <version>1.0.0-SNAPSHOT</version>
> > > > +    </parent>
> > > > +    <dependencies>
> > > > +        <dependency>
> > > > +            <groupId>org.apache.openjpa</groupId>
> > > > +            <artifactId>openjpa-kernel</artifactId>
> > > > +            <version>${pom.version}</version>
> > > > +        </dependency>
> > > > +        <dependency>
> > > > +            <groupId>org.apache.openjpa</groupId>
> > > > +            <artifactId>openjpa-jdbc</artifactId>
> > > > +            <version>${pom.version}</version>
> > > > +        </dependency>
> > > > +         <dependency>
> > > > +                 <groupId>javax.xml.bind</groupId>
> > > > +                 <artifactId>jaxb-api</artifactId>
> > > > +                 <version>2.1</version>
> > > > +         </dependency>
> > > > +    </dependencies>
> > > > +    <build>
> > > > +        <plugins>
> > > > +            <plugin>
> > > > +                <groupId>org.apache.maven.plugins</groupId>
> > > > +                <artifactId>maven-compiler-plugin</artifactId>
> > > > +                <configuration>
> > > > +                    <source>1.5</source>
> > > > +                    <target>1.5</target>
> > > > +                </configuration>
> > > > +            </plugin>
> > > > +        </plugins>
> > > > +    </build>
> > > > +</project>
> > > > \ 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
> >
>

Re: svn commit: r547827 - in /openjpa/trunk/openjpa-xmlmapping-5: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/openjpa/ src/main/java/org/apache/openjpa/xmlmapping/

Posted by catalina wei <ca...@gmail.com>.
Patrick,
This is Catalina Wei working for David Wisneski on the XMLMapping feature
work.
see my comments below.


On 6/15/07, Patrick Linskey <pl...@gmail.com> 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.

> 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 <Cr...@sun.com> 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 @@
> > > +<?xml version="1.0" encoding="UTF-8"?>
> > > +<!--
> > > + 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.
> > > +-->
> > > +<project xmlns="http://maven.apache.org/POM/4.0.0"
> > > +         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">
> > > +    <modelVersion>4.0.0</modelVersion>
> > > +    <groupId>org.apache.openjpa</groupId>
> > > +    <artifactId>openjpa-xmlmapping-5</artifactId>
> > > +    <packaging>jar</packaging>
> > > +    <name>OpenJPA Xmlmapping 1.5</name>
> > > +    <description>OpenJPA Xmlmapping 1.5</description>
> > > +    <url>http://incubator.apache.org/projects/openjpa</url>
> > > +    <parent>
> > > +        <groupId>org.apache.openjpa</groupId>
> > > +        <artifactId>openjpa-parent</artifactId>
> > > +        <version>1.0.0-SNAPSHOT</version>
> > > +    </parent>
> > > +    <dependencies>
> > > +        <dependency>
> > > +            <groupId>org.apache.openjpa</groupId>
> > > +            <artifactId>openjpa-kernel</artifactId>
> > > +            <version>${pom.version}</version>
> > > +        </dependency>
> > > +        <dependency>
> > > +            <groupId>org.apache.openjpa</groupId>
> > > +            <artifactId>openjpa-jdbc</artifactId>
> > > +            <version>${pom.version}</version>
> > > +        </dependency>
> > > +         <dependency>
> > > +                 <groupId>javax.xml.bind</groupId>
> > > +                 <artifactId>jaxb-api</artifactId>
> > > +                 <version>2.1</version>
> > > +         </dependency>
> > > +    </dependencies>
> > > +    <build>
> > > +        <plugins>
> > > +            <plugin>
> > > +                <groupId>org.apache.maven.plugins</groupId>
> > > +                <artifactId>maven-compiler-plugin</artifactId>
> > > +                <configuration>
> > > +                    <source>1.5</source>
> > > +                    <target>1.5</target>
> > > +                </configuration>
> > > +            </plugin>
> > > +        </plugins>
> > > +    </build>
> > > +</project>
> > > \ 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
>

Re: svn commit: r547827 - in /openjpa/trunk/openjpa-xmlmapping-5: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/openjpa/ src/main/java/org/apache/openjpa/xmlmapping/

Posted by Patrick Linskey <pl...@gmail.com>.
> 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.

3. What is the Java 5 dependency? Is it just usage of things like
StringWriter, or is there more to it than that?

> > + * @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.

Why is this called a "base class"? Are there other handler classes
that aren't checked in yet?

-Patrick

On 6/15/07, Craig L Russell <Cr...@sun.com> 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 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<!--
> > + 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.
> > +-->
> > +<project xmlns="http://maven.apache.org/POM/4.0.0"
> > +         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">
> > +    <modelVersion>4.0.0</modelVersion>
> > +    <groupId>org.apache.openjpa</groupId>
> > +    <artifactId>openjpa-xmlmapping-5</artifactId>
> > +    <packaging>jar</packaging>
> > +    <name>OpenJPA Xmlmapping 1.5</name>
> > +    <description>OpenJPA Xmlmapping 1.5</description>
> > +    <url>http://incubator.apache.org/projects/openjpa</url>
> > +    <parent>
> > +        <groupId>org.apache.openjpa</groupId>
> > +        <artifactId>openjpa-parent</artifactId>
> > +        <version>1.0.0-SNAPSHOT</version>
> > +    </parent>
> > +    <dependencies>
> > +        <dependency>
> > +            <groupId>org.apache.openjpa</groupId>
> > +            <artifactId>openjpa-kernel</artifactId>
> > +            <version>${pom.version}</version>
> > +        </dependency>
> > +        <dependency>
> > +            <groupId>org.apache.openjpa</groupId>
> > +            <artifactId>openjpa-jdbc</artifactId>
> > +            <version>${pom.version}</version>
> > +        </dependency>
> > +         <dependency>
> > +                 <groupId>javax.xml.bind</groupId>
> > +                 <artifactId>jaxb-api</artifactId>
> > +                 <version>2.1</version>
> > +         </dependency>
> > +    </dependencies>
> > +    <build>
> > +        <plugins>
> > +            <plugin>
> > +                <groupId>org.apache.maven.plugins</groupId>
> > +                <artifactId>maven-compiler-plugin</artifactId>
> > +                <configuration>
> > +                    <source>1.5</source>
> > +                    <target>1.5</target>
> > +                </configuration>
> > +            </plugin>
> > +        </plugins>
> > +    </build>
> > +</project>
> > \ 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