You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by dw...@apache.org on 2009/09/18 22:06:13 UTC

svn commit: r816767 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbinding...

Author: dwoods
Date: Fri Sep 18 20:06:12 2009
New Revision: 816767

URL: http://svn.apache.org/viewvc?rev=816767&view=rev
Log:
OPENJPA-1310 SQLServer requires JAXB marshalled XML to be in UTF-16 instead of UTF-8.  Also updated some of the XmlElement names to match the case used in the XmlType annotation.

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/XMLValueHandler.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLServerDictionary.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/Address.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/CANAddress.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/USAAddress.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/XMLValueHandler.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/XMLValueHandler.java?rev=816767&r1=816766&r2=816767&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/XMLValueHandler.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/XMLValueHandler.java Fri Sep 18 20:06:12 2009
@@ -69,7 +69,9 @@
                 (val.getClass().getName().endsWith(PROXY_SUFFIX))
                      ? val.getClass().getSuperclass()
                      : val.getClass());
-            Marshaller m = jc.createMarshaller();            
+            Marshaller m = jc.createMarshaller();
+            // Some DBs, like MS SQL Server, require a different encoding than the JAXB default of UTF-8
+            m.setProperty("jaxb.encoding", store.getDBDictionary().getXMLTypeEncoding());
             Writer result = new StringWriter();
             m.marshal( val, result );
             return result.toString();

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=816767&r1=816766&r2=816767&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java Fri Sep 18 20:06:12 2009
@@ -311,6 +311,7 @@
     public String varbinaryTypeName = "VARBINARY";
     public String varcharTypeName = "VARCHAR";
     public String xmlTypeName = "XML";
+    public String xmlTypeEncoding = "UTF-8";
     public String getStringVal = "";
 
     // schema metadata
@@ -5028,6 +5029,34 @@
         this.delimitIds = delimitIds;
     }
     
+    /**
+     * @return supportsXMLColumn
+     */
+    public boolean getSupportsXMLColumn() {
+        return supportsXMLColumn;
+    }
+
+    /**
+     * @param b boolean representing if XML columns are supported
+     */
+    public void setSupportsXMLColumn(boolean b) {
+        supportsXMLColumn = b;
+    }
+    
+    /**
+     * @return xmlTypeEncoding
+     */
+    public String getXMLTypeEncoding() {
+        return xmlTypeEncoding;
+    }
+
+    /**
+     * @param encoding database required JAXB encoding for the XML value
+     */
+    public void setXMLTypeEncoding(String encoding) {
+        xmlTypeEncoding = encoding;
+    }
+    
     // TODO: Should we pass in combining char, or just assume '_'?
     public String combineNames(String... names) {
         boolean delimited = false;

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLServerDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLServerDictionary.java?rev=816767&r1=816766&r2=816767&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLServerDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLServerDictionary.java Fri Sep 18 20:06:12 2009
@@ -70,7 +70,7 @@
                     driverVendor = VENDOR_MICROSOFT;
                     // serverMajorVersion of 8==2000, 9==2005, 10==2008
                     if (meta.getDatabaseMajorVersion() >= 9)
-                        supportsXMLColumn = true;
+                        setSupportsXMLColumn(true);
                     if (meta.getDriverMajorVersion() >= 2) {
                         // see http://blogs.msdn.com/jdbcteam/archive/2007/05/\
                         // 02/what-is-adaptive-response-buffering-and-why-\
@@ -104,7 +104,7 @@
                                 versionString.indexOf(" "));
                         int version = Integer.parseInt(versionString);
                         if (version >= 2005)
-                            supportsXMLColumn = true;
+                            setSupportsXMLColumn(true);
                     }
                 }
             } else {
@@ -255,6 +255,13 @@
     }
 
     @Override
+    public void setSupportsXMLColumn(boolean b) {
+        super.setSupportsXMLColumn(b);
+        // MS SQL Server requires XML data in UTF-16 or UCS-2 instead of JAXB default of UTF-8
+        super.setXMLTypeEncoding("UTF-16");
+    }
+    
+    @Override
     protected Boolean matchErrorState(int subtype, Set<String> errorStates,
         SQLException ex) {
         Boolean recoverable = null;

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/Address.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/Address.java?rev=816767&r1=816766&r2=816767&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/Address.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/Address.java Fri Sep 18 20:06:12 2009
@@ -55,11 +55,11 @@
 })
 public class Address {
 
-    @XmlElement(name = "Name")
+    @XmlElement(name = "name")
     protected String name;
-    @XmlElement(name = "Street")
+    @XmlElement(name = "street")
     protected List<String> street;
-    @XmlElement(name = "City")
+    @XmlElement(name = "city")
     protected String city;
 
     /**

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/CANAddress.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/CANAddress.java?rev=816767&r1=816766&r2=816767&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/CANAddress.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/CANAddress.java Fri Sep 18 20:06:12 2009
@@ -51,9 +51,9 @@
     extends Address
 {
 
-    @XmlElement(name = "Province")
+    @XmlElement(name = "province")
     protected String province;
-    @XmlElement(name = "PostalCode")
+    @XmlElement(name = "postalCode")
     protected String postalCode;
 
     /**

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/USAAddress.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/USAAddress.java?rev=816767&r1=816766&r2=816767&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/USAAddress.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/xmlbindings/myaddress/USAAddress.java Fri Sep 18 20:06:12 2009
@@ -50,9 +50,9 @@
     extends Address
 {
 
-    @XmlElement(name = "State")
+    @XmlElement(name = "state")
     protected String state;
-    @XmlElement(name = "ZIP")
+    @XmlElement(name = "zip")
     protected int zip;
 
     /**