You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2009/08/05 20:31:43 UTC
svn commit: r801350 - in /tuscany/java/sca/modules/databinding-jaxb:
META-INF/MANIFEST.MF
src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
Author: rfeng
Date: Wed Aug 5 18:31:43 2009
New Revision: 801350
URL: http://svn.apache.org/viewvc?rev=801350&view=rev
Log:
Set the thread context classloader so that JAXBContext.newInstance can find the correct factory
Modified:
tuscany/java/sca/modules/databinding-jaxb/META-INF/MANIFEST.MF
tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
Modified: tuscany/java/sca/modules/databinding-jaxb/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/databinding-jaxb/META-INF/MANIFEST.MF?rev=801350&r1=801349&r2=801350&view=diff
==============================================================================
--- tuscany/java/sca/modules/databinding-jaxb/META-INF/MANIFEST.MF (original)
+++ tuscany/java/sca/modules/databinding-jaxb/META-INF/MANIFEST.MF Wed Aug 5 18:31:43 2009
@@ -38,6 +38,7 @@
org.apache.tuscany.sca.databinding.jaxb;version="2.0.0",
org.apache.tuscany.sca.databinding.util;version="2.0.0",
org.apache.tuscany.sca.databinding.xml;version="2.0.0",
+ org.apache.tuscany.sca.extensibility;version="2.0.0",
org.apache.tuscany.sca.interfacedef;version="2.0.0",
org.apache.tuscany.sca.interfacedef.impl;version="2.0.0",
org.apache.tuscany.sca.interfacedef.util;version="2.0.0",
Modified: tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java?rev=801350&r1=801349&r2=801350&view=diff
==============================================================================
--- tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java (original)
+++ tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java Wed Aug 5 18:31:43 2009
@@ -55,6 +55,8 @@
import javax.xml.transform.Source;
import org.apache.tuscany.sca.databinding.util.LRUCache;
+import org.apache.tuscany.sca.extensibility.ServiceDeclaration;
+import org.apache.tuscany.sca.extensibility.ServiceDiscovery;
/**
* @version $Rev$ $Date$
@@ -116,12 +118,34 @@
upool = new Pool<JAXBContext, Unmarshaller>();
defaultContext = getDefaultJAXBContext();
}
-
+
private static JAXBContext newJAXBContext(final Class<?>... classesToBeBound) throws JAXBException {
try {
return AccessController.doPrivileged(new PrivilegedExceptionAction<JAXBContext>() {
public JAXBContext run() throws JAXBException {
- return JAXBContext.newInstance(classesToBeBound);
+ // Try to set up TCCL so that JAXBContext service discovery works in OSGi
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ ClassLoader newTccl = tccl;
+ try {
+ ServiceDeclaration sd =
+ ServiceDiscovery.getInstance().getServiceDeclaration(JAXBContext.class.getName());
+ if (sd != null) {
+ newTccl = sd.loadClass().getClassLoader();
+ }
+ } catch (Exception e) {
+ // Ignore
+ }
+ if (newTccl != tccl) {
+ Thread.currentThread().setContextClassLoader(newTccl);
+ }
+ try {
+ JAXBContext context = JAXBContext.newInstance(classesToBeBound);
+ return context;
+ } finally {
+ if (newTccl != tccl) {
+ Thread.currentThread().setContextClassLoader(newTccl);
+ }
+ }
}
});
} catch (PrivilegedActionException e) {
@@ -129,18 +153,6 @@
}
}
- private static JAXBContext newJAXBContext(final String contextPath, final ClassLoader classLoader)
- throws JAXBException {
- try {
- return AccessController.doPrivileged(new PrivilegedExceptionAction<JAXBContext>() {
- public JAXBContext run() throws JAXBException {
- return JAXBContext.newInstance(contextPath, classLoader);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (JAXBException)e.getException();
- }
- }
public static JAXBContext getDefaultJAXBContext() {
try {
Modified: tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java?rev=801350&r1=801349&r2=801350&view=diff
==============================================================================
--- tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java (original)
+++ tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java Wed Aug 5 18:31:43 2009
@@ -37,6 +37,7 @@
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import javax.xml.namespace.QName;
@@ -100,6 +101,15 @@
return createJAXBContext(dataType);
}
+
+ private Class<?>[] getSeeAlso(Class<?> interfaze) {
+ XmlSeeAlso seeAlso = interfaze.getAnnotation(XmlSeeAlso.class);
+ if (seeAlso == null) {
+ return null;
+ } else {
+ return seeAlso.value();
+ }
+ }
public static JAXBContext createJAXBContext(DataType dataType) throws JAXBException {
return createJAXBContext(findClasses(dataType));