diff options
Diffstat (limited to 'java/sca/modules/databinding-xmlbeans')
-rw-r--r-- | java/sca/modules/databinding-xmlbeans/src/main/java/org/apache/tuscany/sca/databinding/xmlbeans/XMLBeansDataBinding.java | 43 |
1 files changed, 40 insertions, 3 deletions
diff --git a/java/sca/modules/databinding-xmlbeans/src/main/java/org/apache/tuscany/sca/databinding/xmlbeans/XMLBeansDataBinding.java b/java/sca/modules/databinding-xmlbeans/src/main/java/org/apache/tuscany/sca/databinding/xmlbeans/XMLBeansDataBinding.java index 94e74321c4..15616979c2 100644 --- a/java/sca/modules/databinding-xmlbeans/src/main/java/org/apache/tuscany/sca/databinding/xmlbeans/XMLBeansDataBinding.java +++ b/java/sca/modules/databinding-xmlbeans/src/main/java/org/apache/tuscany/sca/databinding/xmlbeans/XMLBeansDataBinding.java @@ -19,10 +19,18 @@ package org.apache.tuscany.sca.databinding.xmlbeans; +import java.lang.reflect.Field; + +import javax.xml.namespace.QName; + +import org.apache.tuscany.sca.databinding.WrapperHandler; import org.apache.tuscany.sca.databinding.impl.BaseDataBinding; import org.apache.tuscany.sca.interfacedef.DataType; import org.apache.tuscany.sca.interfacedef.Operation; +import org.apache.tuscany.sca.interfacedef.util.XMLType; +import org.apache.xmlbeans.SchemaType; import org.apache.xmlbeans.XmlObject; +import org.osoa.sca.ServiceRuntimeException; /** * XMLBeans DataBinding @@ -31,15 +39,44 @@ import org.apache.xmlbeans.XmlObject; */ public class XMLBeansDataBinding extends BaseDataBinding { public static final String NAME = XmlObject.class.getName(); - public static final String[] ALIASES = { "xmlbeans" }; - + public static final String[] ALIASES = {"xmlbeans"}; + public XMLBeansDataBinding() { super(NAME, XmlObject.class); } @Override + public WrapperHandler getWrapperHandler() { + return new XMLBeansWrapperHandler(); + } + + @Override + public boolean introspect(DataType type, Operation operation) { + if (XmlObject.class.isAssignableFrom(type.getPhysical())) { + Class<?> cls = type.getPhysical(); + SchemaType schemaType = null; + try { + Field f = cls.getField("type"); + schemaType = (SchemaType)f.get(null); + } catch (Throwable e) { + throw new ServiceRuntimeException(e); + } + QName typeName = schemaType.getName(); + Object logical = type.getLogical(); + QName elementName = null; + if (logical instanceof XMLType) { + elementName = ((XMLType)logical).getElementName(); + } + type.setLogical(new XMLType(elementName, typeName)); + type.setMetaData(SchemaType.class, schemaType); + return true; + } + return false; + } + + @Override public Object copy(Object object, DataType dataType, Operation operation) { - return ((XmlObject) object).copy(); + return ((XmlObject)object).copy(); } } |