diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-30 00:04:47 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-30 00:04:47 +0000 |
commit | 8a515e9f25fc7fefa03860d1f14e4bcf47bdeb63 (patch) | |
tree | b58a349a83afd25a8a677e7c3b1058e3996b2bcd /java/sca/modules/databinding-jaxb-axiom | |
parent | 4fa2f6af33e964521800a3ad2919c2e14c6c956f (diff) |
Refactor JAXBContextCache/JAXBContextHelper to be a utility bound to the extension point registry
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@831163 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/databinding-jaxb-axiom')
6 files changed, 41 insertions, 27 deletions
diff --git a/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/JAXB2OMElement.java b/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/JAXB2OMElement.java index e0e0c08f6c..862894be09 100644 --- a/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/JAXB2OMElement.java +++ b/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/JAXB2OMElement.java @@ -25,6 +25,7 @@ import javax.xml.namespace.QName; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; +import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.databinding.PullTransformer; import org.apache.tuscany.sca.databinding.TransformationContext; import org.apache.tuscany.sca.databinding.TransformationException; @@ -38,12 +39,14 @@ import org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding; * @version $Rev$ $Date$ */ public class JAXB2OMElement extends BaseTransformer<Object, OMElement> implements PullTransformer<Object, OMElement> { - public JAXB2OMElement() { + private OMFactory factory = OMAbstractFactory.getOMFactory(); + private JAXBContextHelper contextHelper; + + public JAXB2OMElement(ExtensionPointRegistry registry) { super(); + contextHelper = JAXBContextHelper.getInstance(registry); } - private OMFactory factory = OMAbstractFactory.getOMFactory(); - @Override public String getSourceDataBinding() { return JAXBDataBinding.NAME; @@ -52,13 +55,13 @@ public class JAXB2OMElement extends BaseTransformer<Object, OMElement> implement public OMElement transform(Object source, TransformationContext context) throws TransformationException { JAXBContext jaxbContext; try { - jaxbContext = JAXBContextHelper.createJAXBContext(context, true); + jaxbContext = contextHelper.createJAXBContext(context, true); } catch (JAXBException e) { throw new TransformationException(e); } Object element = JAXBContextHelper.createJAXBElement(jaxbContext, context.getTargetDataType(), source); QName name = jaxbContext.createJAXBIntrospector().getElementName(element); - JAXBDataSource dataSource = new JAXBDataSource(element, jaxbContext); + JAXBDataSource dataSource = new JAXBDataSource(element, jaxbContext, contextHelper); OMElement omElement = AxiomHelper.createOMElement(factory, name, dataSource); return omElement; } diff --git a/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/JAXBDataSource.java b/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/JAXBDataSource.java index cc28d5e710..0dacce996f 100644 --- a/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/JAXBDataSource.java +++ b/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/JAXBDataSource.java @@ -18,9 +18,6 @@ */ package org.apache.tuscany.sca.databinding.jaxb.axiom; -import static org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper.getMarshaller; -import static org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper.releaseJAXBMarshaller; - import java.io.OutputStream; import java.io.StringReader; import java.io.StringWriter; @@ -38,6 +35,7 @@ import javax.xml.stream.XMLStreamWriter; import org.apache.axiom.om.OMDataSource; import org.apache.axiom.om.OMOutputFormat; import org.apache.axiom.om.util.StAXUtils; +import org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper; /** * @@ -46,11 +44,12 @@ import org.apache.axiom.om.util.StAXUtils; public class JAXBDataSource implements OMDataSource { private JAXBContext context; private Object element; - // private Marshaller marshaller; + private JAXBContextHelper contextHelper; - public JAXBDataSource(Object element, JAXBContext context) { + public JAXBDataSource(Object element, JAXBContext context, JAXBContextHelper contextHelper) { this.element = element; this.context = context; + this.contextHelper = contextHelper; } public XMLStreamReader getReader() throws XMLStreamException { @@ -70,10 +69,10 @@ public class JAXBDataSource implements OMDataSource { public Object run() throws Exception { Marshaller marshaller = null; try { - marshaller = getMarshaller(context); + marshaller = contextHelper.getMarshaller(context); marshaller.marshal(element, xmlWriter); } finally { - releaseJAXBMarshaller(context, marshaller); + contextHelper.releaseJAXBMarshaller(context, marshaller); } return null; } @@ -90,10 +89,10 @@ public class JAXBDataSource implements OMDataSource { public Object run() throws Exception { Marshaller marshaller = null; try { - marshaller = getMarshaller(context); + marshaller = contextHelper.getMarshaller(context); marshaller.marshal(element, output); } finally { - releaseJAXBMarshaller(context, marshaller); + contextHelper.releaseJAXBMarshaller(context, marshaller); } return null; } @@ -109,10 +108,10 @@ public class JAXBDataSource implements OMDataSource { public Object run() throws Exception { Marshaller marshaller = null; try { - marshaller = getMarshaller(context); + marshaller = contextHelper.getMarshaller(context); marshaller.marshal(element, writer); } finally { - releaseJAXBMarshaller(context, marshaller); + contextHelper.releaseJAXBMarshaller(context, marshaller); } return null; } diff --git a/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/OMElement2JAXB.java b/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/OMElement2JAXB.java index 8e9b32cfc0..aa5fc5b789 100644 --- a/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/OMElement2JAXB.java +++ b/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/OMElement2JAXB.java @@ -30,6 +30,7 @@ import javax.xml.stream.XMLStreamReader; import javax.xml.stream.util.StreamReaderDelegate; import org.apache.axiom.om.OMElement; +import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.databinding.PullTransformer; import org.apache.tuscany.sca.databinding.TransformationContext; import org.apache.tuscany.sca.databinding.TransformationException; @@ -40,7 +41,12 @@ import org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper; * @version $Rev$ $Date$ */ public class OMElement2JAXB extends BaseTransformer<OMElement, Object> implements PullTransformer<OMElement, Object> { - + private JAXBContextHelper contextHelper; + + public OMElement2JAXB(ExtensionPointRegistry registry) { + super(); + contextHelper = JAXBContextHelper.getInstance(registry); + } @Override public String getSourceDataBinding() { return org.apache.axiom.om.OMElement.class.getName(); @@ -56,9 +62,9 @@ public class OMElement2JAXB extends BaseTransformer<OMElement, Object> implement // Marshalling directly to the output stream is faster than marshalling through the // XMLStreamWriter. // Take advantage of this optimization if there is an output stream. - JAXBContext jaxbContext = JAXBContextHelper.createJAXBContext(context, false); + JAXBContext jaxbContext = contextHelper.createJAXBContext(context, false); try { - unmarshaller = JAXBContextHelper.getUnmarshaller(jaxbContext); + unmarshaller = contextHelper.getUnmarshaller(jaxbContext); reader = source.getXMLStreamReaderWithoutCaching(); // https://issues.apache.org/jira/browse/WSCOMMONS-395 reader = new StreamReaderDelegate(reader) { @@ -73,7 +79,7 @@ public class OMElement2JAXB extends BaseTransformer<OMElement, Object> implement if (reader != null) { reader.close(); } - JAXBContextHelper.releaseJAXBUnmarshaller(jaxbContext, unmarshaller); + contextHelper.releaseJAXBUnmarshaller(jaxbContext, unmarshaller); } return JAXBContextHelper.createReturnValue(jaxbContext, context.getTargetDataType(), result); } diff --git a/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/ext/JAXBDSContext.java b/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/ext/JAXBDSContext.java index 28997cd244..f6bd33864f 100644 --- a/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/ext/JAXBDSContext.java +++ b/java/sca/modules/databinding-jaxb-axiom/src/main/java/org/apache/tuscany/sca/databinding/jaxb/axiom/ext/JAXBDSContext.java @@ -51,6 +51,7 @@ public class JAXBDSContext { private static final boolean DEBUG_ENABLED = log.isLoggable(Level.FINER); private JAXBContext jaxbContext = null; // JAXBContext + private JAXBContextHelper contextHelper; /** * "Dispatch" Constructor Use this full constructor when the JAXBContent is provided by the @@ -58,8 +59,9 @@ public class JAXBDSContext { * * @param jaxbContext */ - public JAXBDSContext(JAXBContext jaxbContext) { + public JAXBDSContext(JAXBContext jaxbContext, JAXBContextHelper contextHelper) { this.jaxbContext = jaxbContext; + this.contextHelper = contextHelper; } public JAXBContext getJAXBContext() { @@ -74,7 +76,7 @@ public class JAXBDSContext { */ public Object unmarshal(XMLStreamReader reader) throws JAXBException { - Unmarshaller u = JAXBContextHelper.getUnmarshaller(getJAXBContext()); + Unmarshaller u = contextHelper.getUnmarshaller(getJAXBContext()); Object jaxb = null; @@ -101,7 +103,7 @@ public class JAXBDSContext { // Very easy, use the Context to get the Marshaller. // Use the marshaller to write the object. - Marshaller m = JAXBContextHelper.getMarshaller(getJAXBContext()); + Marshaller m = contextHelper.getMarshaller(getJAXBContext()); AttachmentMarshaller am = m.getAttachmentMarshaller(); boolean xop = am != null ? am.isXOPPackage() : false; // Marshal the object diff --git a/java/sca/modules/databinding-jaxb-axiom/src/test/java/org/apache/tuscany/databinding/jaxb/axiom/JAXB2OMTestCase.java b/java/sca/modules/databinding-jaxb-axiom/src/test/java/org/apache/tuscany/databinding/jaxb/axiom/JAXB2OMTestCase.java index 9f79eeed04..df2b6dc4e3 100644 --- a/java/sca/modules/databinding-jaxb-axiom/src/test/java/org/apache/tuscany/databinding/jaxb/axiom/JAXB2OMTestCase.java +++ b/java/sca/modules/databinding-jaxb-axiom/src/test/java/org/apache/tuscany/databinding/jaxb/axiom/JAXB2OMTestCase.java @@ -27,6 +27,7 @@ import javax.xml.stream.XMLStreamReader; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.impl.builder.StAXOMBuilder; import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; +import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.databinding.TransformationContext; import org.apache.tuscany.sca.databinding.impl.TransformationContextImpl; import org.apache.tuscany.sca.databinding.jaxb.JAXB2Node; @@ -57,11 +58,13 @@ public class JAXB2OMTestCase { tContext.setSourceDataType(sourceDataType); tContext.setTargetDataType(targetDataType); + ExtensionPointRegistry registry = new DefaultExtensionPointRegistry(); + JAXBContextHelper contextHelper = JAXBContextHelper.getInstance(registry); // Force the JAXBContext to be cached - JAXBContextHelper.createJAXBContext(tContext, true); + contextHelper.createJAXBContext(tContext, true); long start = System.currentTimeMillis(); - JAXB2OMElement t1 = new JAXB2OMElement(); + JAXB2OMElement t1 = new JAXB2OMElement(registry); OMElement om = t1.transform(po, tContext); long duration1 = System.currentTimeMillis() - start; StringWriter sw = new StringWriter(); @@ -88,7 +91,7 @@ public class JAXB2OMTestCase { TransformationContext tContext = new TransformationContextImpl(); tContext.setSourceDataType(sourceDataType); tContext.setTargetDataType(targetDataType); - OMElement om = new JAXB2OMElement().transform(po.getValue(), tContext); + OMElement om = new JAXB2OMElement(new DefaultExtensionPointRegistry()).transform(po.getValue(), tContext); StringWriter sw = new StringWriter(); om.serializeAndConsume(sw); System.out.println(sw.toString()); diff --git a/java/sca/modules/databinding-jaxb-axiom/src/test/java/org/apache/tuscany/databinding/jaxb/axiom/OMElement2JAXBTestCase.java b/java/sca/modules/databinding-jaxb-axiom/src/test/java/org/apache/tuscany/databinding/jaxb/axiom/OMElement2JAXBTestCase.java index 3c00307941..abfcf358d2 100644 --- a/java/sca/modules/databinding-jaxb-axiom/src/test/java/org/apache/tuscany/databinding/jaxb/axiom/OMElement2JAXBTestCase.java +++ b/java/sca/modules/databinding-jaxb-axiom/src/test/java/org/apache/tuscany/databinding/jaxb/axiom/OMElement2JAXBTestCase.java @@ -27,6 +27,7 @@ import junit.framework.Assert; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.impl.builder.StAXOMBuilder; +import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; import org.apache.tuscany.sca.databinding.TransformationContext; import org.apache.tuscany.sca.databinding.impl.TransformationContextImpl; import org.apache.tuscany.sca.databinding.jaxb.axiom.OMElement2JAXB; @@ -65,7 +66,7 @@ public class OMElement2JAXBTestCase { OMElement root = builder.getDocumentElement(); OMElement next = (OMElement)root.getChildElements().next(); OMElement po = (OMElement)next.getChildElements().next(); - Object jaxb = new OMElement2JAXB().transform(po, tContext); + Object jaxb = new OMElement2JAXB(new DefaultExtensionPointRegistry()).transform(po, tContext); Assert.assertTrue(jaxb instanceof PurchaseOrderType); } } |