openjpa-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From wisnes...@apache.org
Subject 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/
Date Fri, 15 Jun 2007 23:41:51 GMT
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);
+        }
+    }
+}



Mime
View raw message