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;
/**