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 2008/06/05 18:54:28 UTC
svn commit: r663657 [1/2] - in /incubator/tuscany/java/sca:
itest/databindings/jaxb-bottom-up/src/test/java/org/apache/tuscany/sca/itest/databindings/jaxb/
itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/
modules/core-databinding/src/main/jav...
Author: rfeng
Date: Thu Jun 5 09:54:27 2008
New Revision: 663657
URL: http://svn.apache.org/viewvc?rev=663657&view=rev
Log:
Refactor the DataBinding introspction, wrapper processing and XMLTypeHelper for J2W
Modified:
incubator/tuscany/java/sca/itest/databindings/jaxb-bottom-up/src/test/java/org/apache/tuscany/sca/itest/databindings/jaxb/PrimitivesDatabindingTestCase.java
incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/SDOWSDLTestCase.java
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java
incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java
incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java
incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java
incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java
incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java
incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java
incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java
incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java
incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDODataBindingTestCase.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMWrapperHandler.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/StAXDataBinding.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLGroupDataBinding.java
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/XMLStringDataBinding.java
incubator/tuscany/java/sca/modules/databinding/src/test/java/org/apache/tuscany/sca/databinding/impl/DataBindingRegistryImplTestCase.java
incubator/tuscany/java/sca/modules/implementation-osgi/src/main/java/org/apache/tuscany/sca/implementation/osgi/invocation/OSGiRemotableInvoker.java
incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java
incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/FaultExceptionMapper.java
Modified: incubator/tuscany/java/sca/itest/databindings/jaxb-bottom-up/src/test/java/org/apache/tuscany/sca/itest/databindings/jaxb/PrimitivesDatabindingTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/databindings/jaxb-bottom-up/src/test/java/org/apache/tuscany/sca/itest/databindings/jaxb/PrimitivesDatabindingTestCase.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/databindings/jaxb-bottom-up/src/test/java/org/apache/tuscany/sca/itest/databindings/jaxb/PrimitivesDatabindingTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/databindings/jaxb-bottom-up/src/test/java/org/apache/tuscany/sca/itest/databindings/jaxb/PrimitivesDatabindingTestCase.java Thu Jun 5 09:54:27 2008
@@ -41,8 +41,9 @@
public void setUp() throws Exception {
try {
domain = SCADomain.newInstance("primitivesservice.composite");
- } catch(Exception e) {
+ } catch(Throwable e) {
e.printStackTrace();
+ Assert.fail();
}
}
Modified: incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/SDOWSDLTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/SDOWSDLTestCase.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/SDOWSDLTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/wsdlless/src/test/java/org/apache/tuscany/sca/itest/SDOWSDLTestCase.java Thu Jun 5 09:54:27 2008
@@ -158,7 +158,11 @@
@BeforeClass
public static void setUp() throws Exception {
+ try {
domain = SCADomain.newInstance("SDOWSDLTest.composite");
+ }catch(Throwable e) {
+ e.printStackTrace();
+ }
}
@AfterClass
Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java Thu Jun 5 09:54:27 2008
@@ -27,6 +27,7 @@
import java.util.Map;
import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
+import org.apache.tuscany.sca.databinding.WrapperHandler;
import org.apache.tuscany.sca.databinding.annotation.DataBinding;
import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding;
import org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding;
@@ -36,6 +37,7 @@
import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor;
+import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
/**
* The databinding annotation processor for java interfaces
@@ -114,7 +116,7 @@
d.setDataBinding(value);
}
}
- dataBindingRegistry.introspectType(d, method.getParameterAnnotations()[i]);
+ dataBindingRegistry.introspectType(d, operation);
i++;
}
if (operation.getOutputType() != null) {
@@ -127,14 +129,14 @@
if (dt != null) {
d.setDataBinding(dt.value());
}
- dataBindingRegistry.introspectType(d, method.getAnnotations());
+ dataBindingRegistry.introspectType(d, operation);
}
for (org.apache.tuscany.sca.interfacedef.DataType<?> d : operation.getFaultTypes()) {
if (d.getDataBinding() == null) {
d.setDataBinding(dataBindingId);
}
// TODO: Handle exceptions
- dataBindingRegistry.introspectType(d, method.getAnnotations(), true);
+ dataBindingRegistry.introspectType(d, operation);
}
// JIRA: TUSCANY-842
@@ -143,8 +145,17 @@
assignOperationDataBinding(operation);
}
- // FIXME: Do we want to heuristically check the wrapper style?
- // introspectWrapperStyle(operation);
+ // Introspect the wrapper data type
+ if (operation.getWrapper() != null) {
+ org.apache.tuscany.sca.databinding.DataBinding dbObj =
+ dataBindingRegistry.getDataBinding(operation.getDataBinding());
+ WrapperHandler handler = dbObj == null ? null : dbObj.getWrapperHandler();
+ if (handler != null) {
+ WrapperInfo wrapper = operation.getWrapper();
+ wrapper.setInputWrapperType(handler.getWrapperType(operation, true));
+ wrapper.setOutputWrapperType(handler.getWrapperType(operation, false));
+ }
+ }
}
}
@@ -173,7 +184,7 @@
String dataBinding = d.getDataBinding();
// Assumes JavaBeans DB is default
if (dataBinding != null && !dataBinding.equals(JavaBeansDataBinding.NAME)
- && !dataBinding.equals(SimpleJavaDataBinding.NAME)) {
+ && !dataBinding.equals(SimpleJavaDataBinding.NAME) && !dataBinding.startsWith("java:")) {
if (nonDefaultDataBindingName != null) {
if (!nonDefaultDataBindingName.equals(dataBinding)) {
// We've seen two different non-default DBs, e.g. SDO and JAXB
Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java Thu Jun 5 09:54:27 2008
@@ -96,12 +96,12 @@
DataType<DataType> targetType = context.getTargetDataType();
- Object sourceFaultInfo = faultExceptionMapper.getFaultInfo(source, sourceType.getLogical().getPhysical());
+ Object sourceFaultInfo = faultExceptionMapper.getFaultInfo(source, sourceType.getLogical().getPhysical(), context.getSourceOperation());
Object targetFaultInfo =
mediator.mediate(sourceFaultInfo, sourceType.getLogical(), targetType.getLogical(), context.getMetadata());
Throwable targetException =
- faultExceptionMapper.wrapFaultInfo(targetType, source.getMessage(), targetFaultInfo, source.getCause());
+ faultExceptionMapper.wrapFaultInfo(targetType, source.getMessage(), targetFaultInfo, source.getCause(), context.getTargetOperation());
// FIXME
return targetException == null ? source : targetException;
Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java Thu Jun 5 09:54:27 2008
@@ -165,14 +165,14 @@
// If the source can be wrapped, wrapped it first
if (sourceWrapperHandler != null) {
- Class<?> sourceWrapperClass =
- sourceOp.getWrapper() != null ? sourceOp.getWrapper().getInputWrapperClass() : null;
- DataType sourceWrapperType =
- sourceWrapperHandler.getWrapperType(wrapperElement, sourceWrapperClass, context);
+ WrapperInfo sourceWrapperInfo = sourceOp.getWrapper();
+ DataType sourceWrapperType = sourceWrapperInfo != null ? sourceWrapperInfo.getInputWrapperType() : null;
// We only do wrapper to wrapper transformation if the source has a wrapper and both sides
// match by XML structure
if (sourceWrapperType != null && matches(sourceOp.getWrapper(), targetOp.getWrapper())) {
+ Class<?> sourceWrapperClass = sourceWrapperType.getPhysical();
+
// Create the source wrapper
Object sourceWrapper = sourceWrapperHandler.create(wrapperElement, sourceWrapperClass, context);
@@ -215,11 +215,10 @@
// FIXME: This is a workaround for the wsdless support as it passes in child elements
// under the wrapper that only matches by position
if (sourceWrapperHandler.isInstance(sourceWrapper, wrapperElement, childElements, context)) {
- Class<?> targetWrapperClass =
- targetOp.getWrapper() != null ? targetOp.getWrapper().getInputWrapperClass() : null;
-
+
+ WrapperInfo targetWrapperInfo = targetOp.getWrapper();
DataType targetWrapperType =
- targetWrapperHandler.getWrapperType(wrapperElement, targetWrapperClass, context);
+ targetWrapperInfo != null ? targetWrapperInfo.getInputWrapperType() : null;
if (targetWrapperType != null && matches(sourceOp.getWrapper(), targetOp.getWrapper())) {
Object targetWrapper =
mediator.mediate(sourceWrapper, sourceType.getLogical().get(0), targetWrapperType, context
Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java Thu Jun 5 09:54:27 2008
@@ -176,11 +176,13 @@
// If the source can be wrapped, wrapped it first
if (sourceWrapperHandler != null) {
- Class<?> sourceWrapperClass =
- sourceOp.getWrapper() != null ? sourceOp.getWrapper().getOutputWrapperClass() : null;
+ WrapperInfo sourceWrapperInfo = sourceOp.getWrapper();
DataType sourceWrapperType =
- sourceWrapperHandler.getWrapperType(wrapperElement, sourceWrapperClass, context);
+ sourceWrapperInfo != null ? sourceWrapperInfo.getOutputWrapperType() : null;
+
if (sourceWrapperType != null && matches(sourceOp.getWrapper(), targetOp.getWrapper())) {
+ Class<?> sourceWrapperClass = sourceWrapperType.getPhysical();
+
Object sourceWrapper = sourceWrapperHandler.create(wrapperElement, sourceWrapperClass, context);
if (sourceWrapper != null) {
if (!childElements.isEmpty()) {
@@ -224,11 +226,11 @@
// FIXME: This is a workaround for the wsdless support as it passes in child elements
// under the wrapper that only matches by position
if (sourceWrapperHandler.isInstance(sourceWrapper, wrapperElement, childElements, context)) {
- Class<?> targetWrapperClass =
- targetOp.getWrapper() != null ? targetOp.getWrapper().getOutputWrapperClass() : null;
+ WrapperInfo targetWrapperInfo = targetOp.getWrapper();
DataType targetWrapperType =
- targetWrapperHandler.getWrapperType(wrapperElement, targetWrapperClass, context);
+ targetWrapperInfo != null ? targetWrapperInfo.getOutputWrapperType() : null;
+
if (targetWrapperType != null && matches(sourceOp.getWrapper(), targetOp.getWrapper())) {
Object targetWrapper =
mediator.mediate(sourceWrapper, sourceType.getLogical(), targetWrapperType, context
Modified: incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java (original)
+++ incubator/tuscany/java/sca/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java Thu Jun 5 09:54:27 2008
@@ -126,11 +126,11 @@
Throwable ex = (Throwable)fault;
DataType<DataType> exType =
new DataTypeImpl<DataType>(ex.getClass(), new DataTypeImpl<XMLType>(ex.getClass(), XMLType.UNKNOWN));
- faultExceptionMapper.introspectFaultDataType(exType, false);
+ faultExceptionMapper.introspectFaultDataType(exType, operation, false);
DataType faultType = exType.getLogical();
- Object faultInfo = faultExceptionMapper.getFaultInfo(ex, faultType.getPhysical());
+ Object faultInfo = faultExceptionMapper.getFaultInfo(ex, faultType.getPhysical(), operation);
faultInfo = copy(faultInfo, dataBindings.getDataBinding(faultType.getDataBinding()));
- fault = faultExceptionMapper.wrapFaultInfo(exType, ex.getMessage(), faultInfo, ex.getCause());
+ fault = faultExceptionMapper.wrapFaultInfo(exType, ex.getMessage(), faultInfo, ex.getCause(), operation);
return fault;
}
}
@@ -180,7 +180,7 @@
// If no databinding was specified, introspect the given arg to
// determine its databinding
if (dataBinding == null) {
- DataType<?> dataType = dataBindings.introspectType(data);
+ DataType<?> dataType = dataBindings.introspectType(data, operation);
if (dataType != null) {
String db = dataType.getDataBinding();
dataBinding = dataBindings.getDataBinding(db);
Modified: incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-axiom/src/main/java/org/apache/tuscany/sca/databinding/axiom/OMElementWrapperHandler.java Thu Jun 5 09:54:27 2008
@@ -34,9 +34,11 @@
import org.apache.tuscany.sca.databinding.TransformationContext;
import org.apache.tuscany.sca.databinding.WrapperHandler;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
+import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
/**
@@ -109,11 +111,12 @@
}
/**
- * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo, Class, org.apache.tuscany.sca.databinding.TransformationContext)
+ * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(Operation, boolean)
*/
- public DataType getWrapperType(ElementInfo element,
- Class<? extends OMElement> wrapperClass,
- TransformationContext context) {
+ public DataType getWrapperType(Operation operation,
+ boolean input) {
+ WrapperInfo wrapper = operation.getWrapper();
+ ElementInfo element = input? wrapper.getInputWrapperElement(): wrapper.getOutputWrapperElement();
DataType<XMLType> wrapperType =
new DataTypeImpl<XMLType>(AxiomDataBinding.NAME, OMElement.class, new XMLType(element));
return wrapperType;
Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java Thu Jun 5 09:54:27 2008
@@ -43,6 +43,8 @@
import org.apache.tuscany.sca.databinding.TransformationContext;
import org.apache.tuscany.sca.databinding.TransformationException;
import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl;
+import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding;
+import org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding;
import org.apache.tuscany.sca.databinding.jaxb.JAXBContextCache.LRUCache;
import org.apache.tuscany.sca.interfacedef.DataType;
import org.apache.tuscany.sca.interfacedef.Interface;
@@ -177,7 +179,7 @@
* @return
* @throws JAXBException
*/
- public static JAXBContext createJAXBContext(Interface intf) throws JAXBException {
+ public static JAXBContext createJAXBContext(Interface intf, boolean useWrapper) throws JAXBException {
synchronized (cache) {
LRUCache<Object, JAXBContext> map = cache.getCache();
Integer key = new Integer(System.identityHashCode(intf));
@@ -185,22 +187,44 @@
if (context != null) {
return context;
}
- Set<Class<?>> classes = new HashSet<Class<?>>();
- for(DataType d: getDataTypes(intf)) {
- classes.add(d.getPhysical());
- }
-
- context = createJAXBContext(classes.toArray(new Class<?>[classes.size()]));
+ List<DataType> dataTypes = getDataTypes(intf, useWrapper);
+ context = createJAXBContext(dataTypes);
map.put(key, context);
return context;
}
}
- private static List<DataType> getDataTypes(Interface intf) {
+ public static JAXBContext createJAXBContext(List<DataType> dataTypes) throws JAXBException {
+ JAXBContext context;
+ Set<Class<?>> classes = new HashSet<Class<?>>();
+ for (DataType d : dataTypes) {
+ if (JAXBDataBinding.NAME.equals(d.getDataBinding()) || JavaBeansDataBinding.NAME.equals(d
+ .getDataBinding())
+ || SimpleJavaDataBinding.NAME.equals(d.getDataBinding())) {
+ if (!d.getPhysical().isInterface()) {
+ classes.add(d.getPhysical());
+ }
+ }
+ }
+
+ context = createJAXBContext(classes.toArray(new Class<?>[classes.size()]));
+ return context;
+ }
+
+ public static JAXBContext createJAXBContext(Interface intf) throws JAXBException {
+ return createJAXBContext(intf, true);
+ }
+
+ /**
+ * @param intf
+ * @param useWrapper Use wrapper classes?
+ * @return
+ */
+ private static List<DataType> getDataTypes(Interface intf, boolean useWrapper) {
List<DataType> dataTypes = new ArrayList<DataType>();
for (Operation op : intf.getOperations()) {
WrapperInfo wrapper = op.getWrapper();
- if (wrapper != null) {
+ if (useWrapper && wrapper != null) {
DataType dt1 = wrapper.getInputWrapperType();
if (dt1 != null) {
dataTypes.add(dt1);
@@ -217,11 +241,11 @@
if (dt2 != null) {
dataTypes.add(dt2);
}
- for (DataType<DataType> dt3 : op.getFaultTypes()) {
- DataType dt4 = dt3.getLogical();
- if (dt4 != null) {
- dataTypes.add(dt4);
- }
+ }
+ for (DataType<DataType> dt3 : op.getFaultTypes()) {
+ DataType dt4 = dt3.getLogical();
+ if (dt4 != null) {
+ dataTypes.add(dt4);
}
}
}
Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBDataBinding.java Thu Jun 5 09:54:27 2008
@@ -19,7 +19,6 @@
package org.apache.tuscany.sca.databinding.jaxb;
-import java.lang.annotation.Annotation;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
@@ -32,6 +31,7 @@
import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
import org.apache.tuscany.sca.databinding.impl.DOMHelper;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
import org.w3c.dom.Document;
@@ -57,7 +57,7 @@
}
@Override
- public boolean introspect(DataType dataType, Annotation[] annotations) {
+ public boolean introspect(DataType dataType, Operation operation) {
Class javaType = dataType.getPhysical();
if (JAXBElement.class.isAssignableFrom(javaType)) {
Type type = javaType.getGenericSuperclass();
Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBTypeHelper.java Thu Jun 5 09:54:27 2008
@@ -37,13 +37,15 @@
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.databinding.XMLTypeHelper;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Interface;
import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper;
import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
import org.apache.tuscany.sca.xsd.XSDFactory;
import org.apache.tuscany.sca.xsd.XSDefinition;
-import org.apache.ws.commons.schema.XmlSchemaCollection;
import org.apache.ws.commons.schema.resolver.URIResolver;
+import org.osoa.sca.ServiceRuntimeException;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
@@ -52,7 +54,7 @@
private static final String ANYTYPE_NAME = "anyType";
private static final QName ANYTYPE_QNAME = new QName(SCHEMA_NS, ANYTYPE_NAME);
- private List<Class<?>> types = new ArrayList<Class<?>>();
+ // private List<Class<?>> types = new ArrayList<Class<?>>();
public JAXBTypeHelper() {
super();
@@ -65,7 +67,7 @@
} else if (javaType.isInterface()) {
return new TypeInfo(ANYTYPE_QNAME, true, null);
} else {
- types.add(javaType);
+ // types.add(javaType);
if (logical instanceof XMLType) {
xmlType = ((XMLType)logical).getTypeName();
}
@@ -77,11 +79,13 @@
}
}
+ /*
public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver) {
List<XSDefinition> definitions = new ArrayList<XSDefinition>();
generateJAXBSchemas(definitions, factory);
return definitions;
}
+ */
public static Map<String, String> generateSchema(JAXBContext context) throws IOException {
StringResolverImpl resolver = new StringResolverImpl();
@@ -113,6 +117,7 @@
}
+ /*
private void generateJAXBSchemas1(List<XSDefinition> definitions, XSDFactory factory) {
if (types.size() > 0) {
try {
@@ -122,12 +127,12 @@
JAXBContext context = JAXBContextHelper.createJAXBContext(typesArray);
Map<String, String> results = generateSchema(context);
collection.setSchemaResolver(new XSDResolver(results));
-
+
for (Map.Entry<String, String> entry : results.entrySet()) {
XSDefinition definition = factory.createXSDefinition();
int index = entry.getKey().lastIndexOf('#');
String ns = entry.getKey().substring(0, index);
- String file = entry.getKey().substring(index+1);
+ String file = entry.getKey().substring(index + 1);
definition.setUnresolved(true);
definition.setNamespace(ns);
definition.setSchema(collection.read(new StringReader(entry.getValue()), null));
@@ -140,6 +145,7 @@
}
}
}
+ */
private static class DOMResolverImpl extends SchemaOutputResolver {
private Map<String, DOMResult> results = new HashMap<String, DOMResult>();
@@ -156,28 +162,35 @@
return results;
}
}
-
+
+ /*
private void generateJAXBSchemas(List<XSDefinition> definitions, XSDFactory factory) {
if (types.size() > 0) {
try {
Class<?>[] typesArray = new Class<?>[types.size()];
typesArray = types.toArray(typesArray);
JAXBContext context = JAXBContext.newInstance(typesArray);
- DOMResolverImpl resolver = new DOMResolverImpl();
- context.generateSchema(resolver);
- Map<String, DOMResult> results = resolver.getResults();
- for (Map.Entry<String, DOMResult> entry: results.entrySet()) {
- XSDefinition definition = factory.createXSDefinition();
- definition.setUnresolved(true);
- definition.setDocument((Document)entry.getValue().getNode());
- definition.setNamespace(entry.getKey());
- definitions.add(definition);
- }
+ generateSchemas(definitions, factory, context);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
+ */
+
+ private void generateSchemas(List<XSDefinition> definitions, XSDFactory factory, JAXBContext context)
+ throws IOException {
+ DOMResolverImpl resolver = new DOMResolverImpl();
+ context.generateSchema(resolver);
+ Map<String, DOMResult> results = resolver.getResults();
+ for (Map.Entry<String, DOMResult> entry : results.entrySet()) {
+ XSDefinition definition = factory.createXSDefinition();
+ definition.setUnresolved(true);
+ definition.setDocument((Document)entry.getValue().getNode());
+ definition.setNamespace(entry.getKey());
+ definitions.add(definition);
+ }
+ }
private static class StringResolverImpl extends SchemaOutputResolver {
private Map<String, StreamResult> results = new HashMap<String, StreamResult>();
@@ -197,4 +210,27 @@
}
}
+ public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, Interface intf) {
+ try {
+ JAXBContext context = JAXBContextHelper.createJAXBContext(intf, false);
+ List<XSDefinition> definitions = new ArrayList<XSDefinition>();
+ generateSchemas(definitions, factory, context);
+ return definitions;
+ } catch (Throwable e) {
+ throw new ServiceRuntimeException(e);
+ }
+ }
+
+ public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, List<DataType> dataTypes) {
+ try {
+
+ JAXBContext context = JAXBContextHelper.createJAXBContext(dataTypes);
+ List<XSDefinition> definitions = new ArrayList<XSDefinition>();
+ generateSchemas(definitions, factory, context);
+ return definitions;
+ } catch (Throwable e) {
+ throw new ServiceRuntimeException(e);
+ }
+ }
+
}
Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBWrapperHandler.java Thu Jun 5 09:54:27 2008
@@ -34,9 +34,9 @@
import org.apache.tuscany.sca.databinding.TransformationException;
import org.apache.tuscany.sca.databinding.WrapperHandler;
import org.apache.tuscany.sca.interfacedef.DataType;
-import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
-import org.apache.tuscany.sca.interfacedef.util.XMLType;
+import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
/**
* JAXB WrapperHandler implementation
@@ -128,16 +128,12 @@
}
/**
- * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo, Class, org.apache.tuscany.sca.databinding.TransformationContext)
+ * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(Operation, boolean)
*/
- public DataType getWrapperType(ElementInfo element,
- Class<? extends Object> wrapperClass,
- TransformationContext context) {
- if (wrapperClass == null) {
- return null;
- } else {
- return new DataTypeImpl<XMLType>(JAXBDataBinding.NAME, wrapperClass, new XMLType(element));
- }
+ public DataType getWrapperType(Operation operation, boolean input) {
+ WrapperInfo wrapper = operation.getWrapper();
+ DataType dt = input ? wrapper.getInputWrapperType() : wrapper.getOutputWrapperType();
+ return dt;
}
/**
Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBDataBindingTestCase.java Thu Jun 5 09:54:27 2008
@@ -26,6 +26,7 @@
import org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
@@ -52,28 +53,29 @@
/**
* Test method for
- * {@link org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding#introspect(java.lang.Class, java.lang.annotation.Annotation)}.
+ * {@link org.apache.tuscany.sca.databinding.jaxb.JAXBDataBinding#introspect(java.lang.Class, Operation)}.
*/
public final void testIntrospect() {
DataType dataType = new DataTypeImpl<Class>(JAXBElement.class, null);
- boolean yes = binding.introspect(dataType, null);
+ Operation op = null;
+ boolean yes = binding.introspect(dataType, op);
assertTrue(yes);
assertTrue(dataType.getDataBinding().equals(binding.getName()));
assertTrue(dataType.getPhysical() == JAXBElement.class && dataType.getLogical() == XMLType.UNKNOWN);
dataType = new DataTypeImpl<Class>(MockJAXBElement.class, null);
- yes = binding.introspect(dataType, null);
+ yes = binding.introspect(dataType, op);
assertTrue(yes);
assertEquals(MockJAXBElement.class, dataType.getPhysical());
assertEquals(new QName("http://www.example.com/IPO", "PurchaseOrderType"), ((XMLType)dataType.getLogical())
.getTypeName());
dataType = new DataTypeImpl<Class>(USAddress.class, null);
- yes = binding.introspect(dataType, null);
+ yes = binding.introspect(dataType, op);
assertTrue(yes);
assertEquals(USAddress.class, dataType.getPhysical());
assertEquals(new QName("http://www.example.com/IPO", "USAddress"), ((XMLType)dataType.getLogical())
.getTypeName());
dataType = new DataTypeImpl<Class>(USState.class, null);
- yes = binding.introspect(dataType, null);
+ yes = binding.introspect(dataType, op);
assertTrue(yes);
assertTrue(dataType.getDataBinding().equals(binding.getName()));
assertEquals(USState.class, dataType.getPhysical());
Modified: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java Thu Jun 5 09:54:27 2008
@@ -19,12 +19,12 @@
package org.apache.tuscany.sca.databinding.json;
-import java.lang.annotation.Annotation;
import javax.xml.namespace.QName;
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.codehaus.jettison.json.JSONObject;
@@ -44,7 +44,7 @@
super(NAME, ALIASES, org.json.JSONObject.class);
}
- public boolean introspect(DataType type, Annotation[] annotations) {
+ public boolean introspect(DataType type, Operation operation) {
assert type != null;
Class cls = type.getPhysical();
if (JSONObject.class.isAssignableFrom(cls) || org.json.JSONObject.class.isAssignableFrom(cls)) {
Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonNodeDataBinding.java Thu Jun 5 09:54:27 2008
@@ -18,12 +18,12 @@
*/
package org.apache.tuscany.sca.databinding.saxon;
-import java.lang.annotation.Annotation;
import net.sf.saxon.om.NodeInfo;
import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
/**
* Represents data binding for parameters of type NodeInfo.
@@ -43,8 +43,8 @@
}
@Override
- public boolean introspect(DataType type, Annotation[] annotations) {
- if (super.introspect(type, annotations)) {
+ public boolean introspect(DataType type, Operation operation) {
+ if (super.introspect(type, operation)) {
// type.setLogical(XMLType.UNKNOWN);
return true;
} else {
Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SaxonValueDataBinding.java Thu Jun 5 09:54:27 2008
@@ -18,12 +18,12 @@
*/
package org.apache.tuscany.sca.databinding.saxon;
-import java.lang.annotation.Annotation;
import net.sf.saxon.value.Value;
import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
/**
* Represents data binding for parameters of type Value.
@@ -42,8 +42,8 @@
}
@Override
- public boolean introspect(DataType type, Annotation[] annotations) {
- if (super.introspect(type, annotations)) {
+ public boolean introspect(DataType type, Operation operation) {
+ if (super.introspect(type, operation)) {
// type.setLogical(XMLType.UNKNOWN);
return true;
} else {
Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java Thu Jun 5 09:54:27 2008
@@ -94,6 +94,32 @@
return helperContext;
}
+
+ public static HelperContext getHelperContext(Operation op) {
+ if (op == null) {
+ return getDefaultHelperContext();
+ }
+
+ HelperContext helperContext = SDOUtil.createHelperContext();
+
+ boolean found = false;
+ if (op != null) {
+ found = register(helperContext, op.getInputType()) || found;
+ found = register(helperContext, op.getOutputType()) || found;
+ WrapperInfo wrapper = op.getWrapper();
+ if (wrapper != null) {
+ found = register(helperContext, wrapper.getInputWrapperClass()) || found;
+ found = register(helperContext, wrapper.getOutputWrapperClass()) || found;
+ }
+ }
+ if (!found) {
+ helperContext = getDefaultHelperContext();
+ }
+
+ return helperContext;
+
+ }
+
/**
* @param helperContext
Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java Thu Jun 5 09:54:27 2008
@@ -19,7 +19,6 @@
package org.apache.tuscany.sca.databinding.sdo;
-import java.lang.annotation.Annotation;
import java.security.AccessController;
import java.security.PrivilegedAction;
@@ -30,6 +29,7 @@
import org.apache.tuscany.sca.databinding.XMLTypeHelper;
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 commonj.sdo.DataObject;
@@ -61,7 +61,7 @@
}
@Override
- public boolean introspect(DataType dataType, Annotation[] annotations) {
+ public boolean introspect(DataType dataType, Operation operation) {
Class javaType = dataType.getPhysical();
// Allow privileged access to read system properties. Requires PropertyPermission
// java.specification.version read in security policy.
Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java Thu Jun 5 09:54:27 2008
@@ -30,11 +30,16 @@
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.databinding.XMLTypeHelper;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Interface;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper;
import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
+import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
import org.apache.tuscany.sca.xsd.XSDFactory;
import org.apache.tuscany.sca.xsd.XSDefinition;
+import org.osoa.sca.ServiceRuntimeException;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
@@ -51,9 +56,9 @@
private TypeHelper typeHelper;
private XSDHelper xsdHelper;
- private Map<String, List<Type>> xsdTypesMap = new HashMap<String, List<Type>>();
- private Map<String, List<Type>> typesMap = new HashMap<String, List<Type>>();
-
+ // private Map<String, List<Type>> xsdTypesMap = new HashMap<String, List<Type>>();
+ // private Map<String, List<Type>> typesMap = new HashMap<String, List<Type>>();
+
public SDOTypeHelper() {
super();
typeHelper = SDOContextHelper.getDefaultHelperContext().getTypeHelper();
@@ -65,69 +70,84 @@
if (xmlType != null) {
return new TypeInfo(xmlType, true, null);
} else {
- Type type = typeHelper.getType(javaType);
- if (xsdHelper.isXSD(type)) {
- List<Type> xsdTypes = xsdTypesMap.get(type.getURI());
- if (xsdTypes == null) {
- xsdTypes = new ArrayList<Type>();
- xsdTypesMap.put(type.getURI(), xsdTypes);
- }
- if (!xsdTypes.contains(type)) {
- xsdTypes.add(type);
- }
- } else {
- List<Type> types = typesMap.get(type.getURI());
- if (types == null) {
- types = new ArrayList<Type>();
- typesMap.put(type.getURI(), types);
- }
- if (!types.contains(type)) {
- types.add(type);
- }
- }
+ // introspect(javaType, xsdTypesMap, typesMap);
if (logical instanceof XMLType) {
xmlType = ((XMLType)logical).getTypeName();
}
if (xmlType == null) {
- xmlType = new QName(JavaXMLMapper.getNamespace(javaType),
- Introspector.decapitalize(javaType.getSimpleName()));
+ xmlType =
+ new QName(JavaXMLMapper.getNamespace(javaType), Introspector.decapitalize(javaType.getSimpleName()));
}
return new TypeInfo(xmlType, false, null);
}
}
+ private void introspect(Class javaType, Map<String, List<Type>> xsdTypesMap, Map<String, List<Type>> typesMap) {
+ Type type = typeHelper.getType(javaType);
+ if (type == null) {
+ return;
+ }
+ if (xsdHelper.isXSD(type)) {
+ addToMap(xsdTypesMap, type);
+ } else {
+ addToMap(typesMap, type);
+ }
+ }
+
+ private void addToMap(Map<String, List<Type>> map, Type type) {
+ List<Type> types = map.get(type.getURI());
+ if (types == null) {
+ types = new ArrayList<Type>();
+ map.put(type.getURI(), types);
+ }
+ if (!types.contains(type)) {
+ types.add(type);
+ }
+ }
+
+ /*
public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver) {
List<XSDefinition> definitions = new ArrayList<XSDefinition>();
- generateSDOSchemas(definitions, factory);
- addResolvedXSDs(definitions, factory, resolver);
+ generateSDOSchemas(definitions, factory, typesMap);
+ addResolvedXSDs(definitions, factory, resolver, xsdTypesMap);
return definitions;
}
+ */
- private void generateSDOSchemas(List<XSDefinition> definitions, XSDFactory factory) {
- for (Map.Entry<String, List<Type>> entry: typesMap.entrySet()) {
- String schema = xsdHelper.generate(entry.getValue());
- DOMImplementationRegistry registry = null;
- try {
- registry = DOMImplementationRegistry.newInstance();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- DOMImplementation impl = registry.getDOMImplementation("XML 3.0");
- DOMImplementationLS ls = (DOMImplementationLS)impl.getFeature("LS", "3.0");
- LSParser parser = ls.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, SCHEMA_NS);
- LSInput input = ls.createLSInput();
- input.setCharacterStream(new StringReader(schema));
- Document document = parser.parse(input);
- XSDefinition definition = factory.createXSDefinition();
- definition.setUnresolved(true);
- definition.setDocument(document);
- definition.setNamespace(entry.getKey());
- definitions.add(definition);
+ private void generateSDOSchemas(List<XSDefinition> definitions, XSDFactory factory, Map<String, List<Type>> map) {
+ for (Map.Entry<String, List<Type>> entry : map.entrySet()) {
+ List<Type> types = entry.getValue();
+ String ns = entry.getKey();
+ generateSchema(definitions, factory, types, ns);
+ }
+ }
+
+ private void generateSchema(List<XSDefinition> definitions, XSDFactory factory, List<Type> types, String ns) {
+ String schema = xsdHelper.generate(types);
+ DOMImplementationRegistry registry = null;
+ try {
+ registry = DOMImplementationRegistry.newInstance();
+ } catch (Exception e) {
+ throw new ServiceRuntimeException(e);
}
+ DOMImplementation impl = registry.getDOMImplementation("XML 3.0");
+ DOMImplementationLS ls = (DOMImplementationLS)impl.getFeature("LS", "3.0");
+ LSParser parser = ls.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, SCHEMA_NS);
+ LSInput input = ls.createLSInput();
+ input.setCharacterStream(new StringReader(schema));
+ Document document = parser.parse(input);
+ XSDefinition definition = factory.createXSDefinition();
+ definition.setUnresolved(true);
+ definition.setDocument(document);
+ definition.setNamespace(ns);
+ definitions.add(definition);
}
- private void addResolvedXSDs(List<XSDefinition> definitions, XSDFactory factory, ModelResolver resolver) {
- for (Map.Entry<String, List<Type>> entry: xsdTypesMap.entrySet()) {
+ private void addResolvedXSDs(List<XSDefinition> definitions,
+ XSDFactory factory,
+ ModelResolver resolver,
+ Map<String, List<Type>> map) {
+ for (Map.Entry<String, List<Type>> entry : map.entrySet()) {
XSDefinition definition = factory.createXSDefinition();
definition.setUnresolved(true);
definition.setNamespace(entry.getKey());
@@ -138,7 +158,7 @@
throw new RuntimeException("No XSD found for namespace " + entry.getKey());
}
// make sure all the required types are defined in the resolved schema
- for (Type type: entry.getValue()) {
+ for (Type type : entry.getValue()) {
QName typeName = new QName(type.getURI(), type.getName());
if (resolved.getXmlSchemaType(typeName) == null) {
//FIXME: create a checked exception and propagate it back up to the activator
@@ -149,4 +169,54 @@
}
}
+ private static List<DataType> getDataTypes(Interface intf) {
+ List<DataType> dataTypes = new ArrayList<DataType>();
+ for (Operation op : intf.getOperations()) {
+ WrapperInfo wrapper = op.getWrapper();
+ if (wrapper != null) {
+ DataType dt1 = wrapper.getInputWrapperType();
+ if (dt1 != null) {
+ dataTypes.add(dt1);
+ }
+ DataType dt2 = wrapper.getOutputWrapperType();
+ if (dt2 != null) {
+ dataTypes.add(dt2);
+ }
+ } else {
+ for (DataType dt1 : op.getInputType().getLogical()) {
+ dataTypes.add(dt1);
+ }
+ DataType dt2 = op.getOutputType();
+ if (dt2 != null) {
+ dataTypes.add(dt2);
+ }
+ for (DataType<DataType> dt3 : op.getFaultTypes()) {
+ DataType dt4 = dt3.getLogical();
+ if (dt4 != null) {
+ dataTypes.add(dt4);
+ }
+ }
+ }
+ }
+ return dataTypes;
+ }
+
+ public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, Interface intf) {
+ return getSchemaDefinitions(factory, resolver, getDataTypes(intf));
+ }
+
+ public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, List<DataType> dataTypes) {
+ Map<String, List<Type>> xsdTypesMap = new HashMap<String, List<Type>>();
+ Map<String, List<Type>> typesMap = new HashMap<String, List<Type>>();
+ for (DataType d : dataTypes) {
+ if (SDODataBinding.NAME.equals(d.getDataBinding())) {
+ introspect(d.getPhysical(), xsdTypesMap, typesMap);
+ }
+ }
+ List<XSDefinition> definitions = new ArrayList<XSDefinition>();
+ generateSDOSchemas(definitions, factory, typesMap);
+ addResolvedXSDs(definitions, factory, resolver, xsdTypesMap);
+ return definitions;
+ }
+
}
Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOWrapperHandler.java Thu Jun 5 09:54:27 2008
@@ -28,9 +28,11 @@
import org.apache.tuscany.sca.databinding.TransformationContext;
import org.apache.tuscany.sca.databinding.WrapperHandler;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
+import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
import commonj.sdo.DataObject;
@@ -53,7 +55,6 @@
* @see org.apache.tuscany.sca.databinding.WrapperHandler#create(ElementInfo, Class, TransformationContext)
*/
public Object create(ElementInfo element, Class<? extends Object> wrapperClass, TransformationContext context) {
- DataObject wrapper = null;
HelperContext helperContext = SDOContextHelper.getHelperContext(context);
Type sdoType = getSDOType(helperContext, element);
if (sdoType != null) {
@@ -121,12 +122,13 @@
}
/**
- * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(org.apache.tuscany.sca.interfacedef.util.ElementInfo, Class, org.apache.tuscany.sca.databinding.TransformationContext)
+ * @see org.apache.tuscany.sca.databinding.WrapperHandler#getWrapperType(Operation, boolean)
*/
- public DataType getWrapperType(ElementInfo element,
- Class<? extends Object> wrapperClass,
- TransformationContext context) {
- HelperContext helperContext = SDOContextHelper.getHelperContext(context);
+ public DataType getWrapperType(Operation operation,
+ boolean input) {
+ WrapperInfo wrapper = operation.getWrapper();
+ ElementInfo element = input? wrapper.getInputWrapperElement(): wrapper.getOutputWrapperElement();
+ HelperContext helperContext = SDOContextHelper.getHelperContext(operation);
Type sdoType = getSDOType(helperContext, element);
if (sdoType != null) {
// Check if child elements matches
Modified: incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDODataBindingTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDODataBindingTestCase.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDODataBindingTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-sdo/src/test/java/org/apache/tuscany/sca/databinding/sdo/SDODataBindingTestCase.java Thu Jun 5 09:54:27 2008
@@ -24,6 +24,7 @@
import junit.framework.TestCase;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
@@ -56,19 +57,20 @@
}
public final void testIntrospect() {
+ Operation op = null;
DataType dataType = new DataTypeImpl<Class>(DataObject.class, null);
- boolean yes = binding.introspect(dataType, null);
+ boolean yes = binding.introspect(dataType, op);
assertTrue(yes);
assertTrue(dataType.getDataBinding().equals(binding.getName()));
assertTrue(dataType.getPhysical() == DataObject.class && dataType.getLogical() == XMLType.UNKNOWN);
dataType = new DataTypeImpl<Class>(PurchaseOrderType.class, null);
- yes = binding.introspect(dataType, null);
+ yes = binding.introspect(dataType, op);
assertTrue(yes);
assertEquals(PurchaseOrderType.class, dataType.getPhysical());
assertEquals(new QName("http://www.example.com/IPO", "PurchaseOrderType"), ((XMLType)dataType.getLogical())
.getTypeName());
dataType = new DataTypeImpl<Class>(USAddress.class, null);
- yes = binding.introspect(dataType, null);
+ yes = binding.introspect(dataType, op);
assertTrue(yes);
assertEquals(USAddress.class, dataType.getPhysical());
assertEquals(new QName("http://www.example.com/IPO", "USAddress"), ((XMLType)dataType.getLogical())
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java Thu Jun 5 09:54:27 2008
@@ -19,9 +19,9 @@
package org.apache.tuscany.sca.databinding;
-import java.lang.annotation.Annotation;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
/**
* DataBinding represents a data representation, for example, SDO, JAXB and AXIOM
@@ -59,10 +59,10 @@
* Introspect and populate information to a DataType model
*
* @param dataType The data type to be introspected
- * @param annotations The java annotations
+ * @param operation The operation
* @return true if the databinding has recognized the given data type
*/
- boolean introspect(DataType dataType, Annotation[] annotations);
+ boolean introspect(DataType dataType, Operation operation);
/**
* Introspect the data to figure out the corresponding data type
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java Thu Jun 5 09:54:27 2008
@@ -18,9 +18,9 @@
*/
package org.apache.tuscany.sca.databinding;
-import java.lang.annotation.Annotation;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
/**
* An extension point for data binding extensions.
@@ -56,29 +56,19 @@
* Introspect the java class to figure out what DataType supports it.
*
* @param dataType The initial data type
- * @param annotations The java annotations
+ * @param operation TODO
* @return A DataType representing the java type or null if no databinding
* recognizes the java type
*/
- boolean introspectType(DataType dataType, Annotation[] annotations);
-
- /**
- * Introspect the java class to figure out what DataType supports it.
- *
- * @param dataType The initial data type
- * @param annotations The java annotations
- * @param isFaultType Should be set to true if DataType parameter represents an Exception
- * @return A DataType representing the java type or null if no databinding
- * recognizes the java type
- */
- boolean introspectType(DataType dataType, Annotation[] annotations, boolean isFaultType);
+ boolean introspectType(DataType dataType, Operation operation);
/**
* Introspect the value to figure out the corresponding DataType
*
* @param value The object value
+ * @param operation TODO
* @return A DataType representing the value or null if no databinding
* recognizes the value
*/
- DataType introspectType(Object value);
+ DataType introspectType(Object value, Operation operation);
}
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java Thu Jun 5 09:54:27 2008
@@ -19,7 +19,6 @@
package org.apache.tuscany.sca.databinding;
import java.io.IOException;
-import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.HashMap;
@@ -34,6 +33,7 @@
import org.apache.tuscany.sca.extensibility.ServiceDeclaration;
import org.apache.tuscany.sca.extensibility.ServiceDiscovery;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
/**
@@ -191,8 +191,8 @@
return getDataBinding().getWrapperHandler();
}
- public boolean introspect(DataType dataType, Annotation[] annotations) {
- return getDataBinding().introspect(dataType, annotations);
+ public boolean introspect(DataType dataType, Operation operation) {
+ return getDataBinding().introspect(dataType, operation);
}
public DataType introspect(Object value) {
@@ -202,27 +202,7 @@
//FIXME The following methods should not be on the extension point
// they should be on a separate class
- public boolean introspectType(DataType dataType, Annotation[] annotations) {
- return introspectType(dataType, annotations, false);
- }
-
- private boolean introspectArray(DataType dataType, Annotation[] annotations) {
- Class physical = dataType.getPhysical();
- if (!physical.isArray() || physical == byte[].class) {
- return false;
- }
- Class componentType = physical.getComponentType();
- DataType logical = new DataTypeImpl(componentType, dataType.getLogical());
- introspectType(logical, annotations);
- dataType.setDataBinding("java:array");
- dataType.setLogical(logical);
- return true;
- }
-
- //
- // Leverage the DataBinding ExceptionHandler to calculate the DataType of an exception DataType
- //
- public boolean introspectType(DataType dataType, Annotation[] annotations, boolean isException) {
+ public boolean introspectType(DataType dataType, Operation operation) {
loadDataBindings();
for (DataBinding binding : databindings) {
// don't introspect for JavaBeansDatabinding as all javatypes will
@@ -230,26 +210,8 @@
// which is java.lang.Object. Default to this only if no databinding
// results
if (!binding.getName().equals(JavaBeansDataBinding.NAME)) {
- /*
- if (isException) {
- // Next look to see if the DB's exceptionHandler handles this exception
- ExceptionHandler excHandler = binding.getExceptionHandler();
- if (excHandler != null) {
- // Asymmetric to have the introspect() methods set the DataBindings themselves
- // whereas we're setting it ourselves here.
- DataType faultType = excHandler.getFaultType(dataType);
- if (faultType != null) {
- dataType.setDataBinding(binding.getName());
- dataType.setLogical(faultType);
- return true;
- }
- }
- } else
- */
- {
- if (binding.introspect(dataType, annotations)) {
- return true;
- }
+ if (binding.introspect(dataType, operation)) {
+ return true;
}
}
}
@@ -260,18 +222,30 @@
return false;
}
if (dataType.getPhysical().isArray()) {
- introspectArray(dataType, annotations);
+ introspectArray(dataType, operation);
return true;
- } else if (isException) {
+ } else if (Throwable.class.isAssignableFrom(physical)) {
dataType.setDataBinding(JavaExceptionDataBinding.NAME);
return true;
} else {
dataType.setDataBinding(JavaBeansDataBinding.NAME);
return false;
+ } }
+
+ private boolean introspectArray(DataType dataType, Operation operation) {
+ Class physical = dataType.getPhysical();
+ if (!physical.isArray() || physical == byte[].class) {
+ return false;
}
+ Class componentType = physical.getComponentType();
+ DataType logical = new DataTypeImpl(componentType, dataType.getLogical());
+ introspectType(logical, operation);
+ dataType.setDataBinding("java:array");
+ dataType.setLogical(logical);
+ return true;
}
- public DataType introspectType(Object value) {
+ public DataType introspectType(Object value, Operation operation) {
loadDataBindings();
DataType dataType = null;
for (DataBinding binding : databindings) {
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/WrapperHandler.java Thu Jun 5 09:54:27 2008
@@ -22,6 +22,7 @@
import java.util.List;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
/**
@@ -41,12 +42,11 @@
/**
* Get the data type for the wrapper
- * @param element The wrapper element
- * @param wrapperClass Wrapper class
- * @param context The transformation context
+ * @param operation The operation
+ * @param input Is it for input or output?
* @return The data type of the wrapper, null if it's not a wrapper type
*/
- DataType getWrapperType(ElementInfo element, Class<? extends T> wrapperClass, TransformationContext context);
+ DataType getWrapperType(Operation operation, boolean input);
/**
* Check if the given data is an instance of the wrapper
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/XMLTypeHelper.java Thu Jun 5 09:54:27 2008
@@ -22,15 +22,18 @@
import java.util.List;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Interface;
import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
-import org.apache.tuscany.sca.xsd.XSDefinition;
import org.apache.tuscany.sca.xsd.XSDFactory;
+import org.apache.tuscany.sca.xsd.XSDefinition;
/**
* XML and schema helper for Java types
*/
public interface XMLTypeHelper {
+ // FIXME: This method seems to require the XMLHelper instance to be stateful
/**
* Convert a Java type into XML type information
* @param javaType the physical Java class
@@ -43,6 +46,23 @@
* Get schema definitions for the Java types known to this helper
* @return A list of schema definitions
*/
- List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver);
+ // List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver);
+
+ /**
+ * Get a list of XML schemas for the given data types
+ * @param factory
+ * @param resolver
+ * @param dataTypes
+ * @return
+ */
+ List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, List<DataType> dataTypes);
+ /**
+ * Get a list of XML schemas for the given interface
+ * @param factory
+ * @param resolver
+ * @param intf
+ * @return
+ */
+ List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver, Interface intf);
}
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java Thu Jun 5 09:54:27 2008
@@ -18,13 +18,13 @@
*/
package org.apache.tuscany.sca.databinding.impl;
-import java.lang.annotation.Annotation;
import org.apache.tuscany.sca.databinding.DataBinding;
import org.apache.tuscany.sca.databinding.SimpleTypeMapper;
import org.apache.tuscany.sca.databinding.WrapperHandler;
import org.apache.tuscany.sca.databinding.XMLTypeHelper;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
@@ -77,7 +77,7 @@
}
@SuppressWarnings("unchecked")
- public boolean introspect(DataType type, Annotation[] annotations) {
+ public boolean introspect(DataType type, Operation operation) {
assert type != null;
Class cls = type.getPhysical();
if (baseType != null && baseType.isAssignableFrom(cls)) {
@@ -95,7 +95,7 @@
return null;
} else {
DataType<Class> dataType = new DataTypeImpl<Class>(value.getClass(), value.getClass());
- if (introspect(dataType, null)) {
+ if (introspect(dataType, (Operation) null)) {
return dataType;
} else {
return null;
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/GroupDataBinding.java Thu Jun 5 09:54:27 2008
@@ -19,11 +19,11 @@
package org.apache.tuscany.sca.databinding.impl;
-import java.lang.annotation.Annotation;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
/**
@@ -46,7 +46,7 @@
@SuppressWarnings("unchecked")
@Override
- public boolean introspect(DataType type, Annotation[] annotations) {
+ public boolean introspect(DataType type, Operation operation) {
if (markerTypes == null) {
return false;
}
@@ -61,9 +61,9 @@
for (Class<?> c : markerTypes) {
if (isTypeOf(c, cls)) {
type.setDataBinding(getDataBinding(c));
- Object logical = getLogical(cls, annotations);
+ Object logical = getLogical(cls, null);
if (logical != null) {
- type.setLogical(getLogical(cls, annotations));
+ type.setLogical(getLogical(cls, null));
} else {
type.setLogical(XMLType.UNKNOWN);
}
@@ -95,9 +95,9 @@
/**
* Get the logical type
* @param type The java type
- * @param annotations
+ * @param operation TODO
* @return
*/
- protected abstract Object getLogical(Class<?> type, Annotation[] annotations);
+ protected abstract Object getLogical(Class<?> type, Operation operation);
}
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java Thu Jun 5 09:54:27 2008
@@ -34,6 +34,7 @@
import org.apache.tuscany.sca.databinding.Transformer;
import org.apache.tuscany.sca.databinding.TransformerExtensionPoint;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
/**
@@ -55,7 +56,8 @@
public Object mediate(Object source, DataType sourceDataType, DataType targetDataType, Map<String, Object> metadata) {
if (sourceDataType == null || sourceDataType.getDataBinding() == null) {
if (source != null) {
- sourceDataType = dataBindings.introspectType(source);
+ Operation operation = (Operation) metadata.get("source.operation");
+ sourceDataType = dataBindings.introspectType(source, operation);
}
}
if (sourceDataType == null || targetDataType == null) {
@@ -126,7 +128,8 @@
return;
}
if (sourceDataType == null || sourceDataType.getDataBinding() == null) {
- sourceDataType = dataBindings.introspectType(source);
+ Operation operation = (Operation) metadata.get("source.operation");
+ sourceDataType = dataBindings.introspectType(source, operation);
}
if (sourceDataType == null) {
return;
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/SimpleJavaDataBinding.java Thu Jun 5 09:54:27 2008
@@ -19,7 +19,6 @@
package org.apache.tuscany.sca.databinding.javabeans;
-import java.lang.annotation.Annotation;
import javax.xml.namespace.QName;
@@ -27,6 +26,7 @@
import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl;
import org.apache.tuscany.sca.databinding.xml.XMLStringDataBinding;
import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
@@ -48,7 +48,7 @@
}
@Override
- public boolean introspect(DataType type, Annotation[] annotations) {
+ public boolean introspect(DataType type, Operation operation) {
Class<?> cls = type.getPhysical();
if (cls == Object.class) {
return false;
Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java?rev=663657&r1=663656&r2=663657&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/xml/DOMDataBinding.java Thu Jun 5 09:54:27 2008
@@ -18,13 +18,13 @@
*/
package org.apache.tuscany.sca.databinding.xml;
-import java.lang.annotation.Annotation;
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.w3c.dom.Node;
@@ -59,7 +59,7 @@
}
@Override
- public boolean introspect(DataType type, Annotation[] annotations) {
+ public boolean introspect(DataType type, Operation operation) {
if (Node.class.isAssignableFrom(type.getPhysical())) {
if (type.getLogical() == null) {
type.setLogical(new XMLType(ROOT_ELEMENT, null));