From 5963a2d3d6860fe57afc138f095bf2d2eb5a7b80 Mon Sep 17 00:00:00 2001 From: lresende Date: Mon, 7 Oct 2013 22:23:21 +0000 Subject: Official Tuscany 2.0.1 Release git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1530096 13f79535-47bb-0310-9956-ffa450edef68 --- .../DataBindingJavaInterfaceProcessor.java | 130 -------- .../processor/WrapperJavaInterfaceProcessor.java | 175 ----------- .../transformers/Array2ArrayTransformer.java | 104 ------- .../Collection2CollectionTransformer.java | 108 ------- .../Exception2ExceptionTransformer.java | 112 ------- .../transformers/Input2InputTransformer.java | 286 ------------------ .../transformers/Map2MapTransformer.java | 108 ------- .../transformers/Output2OutputTransformer.java | 328 --------------------- .../wire/DataBindingRuntimeWireProcessor.java | 123 -------- .../wire/DataTransformationInterceptor.java | 173 ----------- .../databinding/wire/PassByValueInterceptor.java | 80 ----- 11 files changed, 1727 deletions(-) delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Array2ArrayTransformer.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Collection2CollectionTransformer.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Map2MapTransformer.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataBindingRuntimeWireProcessor.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java delete mode 100644 sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java (limited to 'sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java') diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java b/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java deleted file mode 100644 index 7c10ae45e9..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.core.databinding.processor; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.util.List; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint; -import org.apache.tuscany.sca.databinding.annotation.DataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.Operation; -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; - -/** - * The databinding annotation processor for java interfaces - * - * @version $Rev$ $Date$ - */ -public class DataBindingJavaInterfaceProcessor implements JavaInterfaceVisitor { - private DataBindingExtensionPoint dataBindingRegistry; - - public DataBindingJavaInterfaceProcessor(ExtensionPointRegistry registry) { - super(); - this.dataBindingRegistry = registry.getExtensionPoint(DataBindingExtensionPoint.class); - } - - public void visitInterface(JavaInterface javaInterface) throws InvalidInterfaceException { - // Set the data types regardless in case the - // user overrides the remotable status in the SCDL - //if (!javaInterface.isRemotable()) { - // return; - //} - List operations = javaInterface.getOperations(); - processInterface(javaInterface, operations); - } - - private void processInterface(JavaInterface javaInterface, List operations) { - Class clazz = javaInterface.getJavaClass(); - DataBinding dataBinding = clazz.getAnnotation(DataBinding.class); - String dataBindingId = null; - boolean wrapperStyle = false; - if (dataBinding != null) { - dataBindingId = dataBinding.value(); - wrapperStyle = dataBinding.wrapped(); - } - - for (Operation op : javaInterface.getOperations()) { - JavaOperation operation = (JavaOperation) op; - // In the case of @WebMethod, the method name can be different from the operation name - - if (dataBindingId != null) { - op.setDataBinding(dataBindingId); - op.setInputWrapperStyle(wrapperStyle); - op.setOutputWrapperStyle(wrapperStyle); - } - - Method method = operation.getJavaMethod(); - - DataBinding methodDataBinding = clazz.getAnnotation(DataBinding.class); - if (methodDataBinding == null) { - methodDataBinding = dataBinding; - } - dataBindingId = null; - wrapperStyle = false; - if (dataBinding != null) { - dataBindingId = dataBinding.value(); - wrapperStyle = dataBinding.wrapped(); - operation.setDataBinding(dataBindingId); - operation.setInputWrapperStyle(wrapperStyle); - operation.setOutputWrapperStyle(wrapperStyle); - } - - // FIXME: We need a better way to identify simple java types - int i = 0; - for (org.apache.tuscany.sca.interfacedef.DataType d : operation.getInputType().getLogical()) { - if (d.getDataBinding() == null) { - d.setDataBinding(dataBindingId); - } - for (Annotation a : method.getParameterAnnotations()[i]) { - if (a.annotationType() == org.apache.tuscany.sca.databinding.annotation.DataType.class) { - String value = ((org.apache.tuscany.sca.databinding.annotation.DataType)a).value(); - d.setDataBinding(value); - } - } - dataBindingRegistry.introspectType(d, operation); - i++; - } - if (operation.getOutputType() != null) { - for ( org.apache.tuscany.sca.interfacedef.DataType d : operation.getOutputType().getLogical()) { - if ( d != null ) { - // The DataType is null for void operations - if ( d.getDataBinding() == null ) { - d.setDataBinding(dataBindingId); - } - dataBindingRegistry.introspectType(d, operation); - } - } - - org.apache.tuscany.sca.databinding.annotation.DataType dt = - method.getAnnotation(org.apache.tuscany.sca.databinding.annotation.DataType.class); - if (dt != null) { - operation.getOutputType().getLogical().get(0).setDataBinding(dt.value()); - } - - } - } - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java b/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java deleted file mode 100644 index dcea53d3ae..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.core.databinding.processor; - -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.databinding.DataBinding; -import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint; -import org.apache.tuscany.sca.databinding.WrapperHandler; -import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding; -import org.apache.tuscany.sca.databinding.javabeans.SimpleJavaDataBinding; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.JavaInterface; -import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor; -import org.apache.tuscany.sca.interfacedef.util.WrapperInfo; - -/** - * The databinding annotation processor for java interfaces - * - * @version $Rev$ $Date$ - */ -public class WrapperJavaInterfaceProcessor implements JavaInterfaceVisitor { - private static final String JAXB_DATABINDING = "javax.xml.bind.JAXBElement"; - private DataBindingExtensionPoint dataBindingRegistry; - - public WrapperJavaInterfaceProcessor(ExtensionPointRegistry registry) { - super(); - this.dataBindingRegistry = registry.getExtensionPoint(DataBindingExtensionPoint.class); - } - - public void visitInterface(JavaInterface javaInterface) throws InvalidInterfaceException { - // create regardless in case the user overrides the remotable flag - // in the SCDL - //if (!javaInterface.isRemotable()) { - // return; - //} - for (Operation operation : javaInterface.getOperations()) { - WrapperInfo inputWrapperInfo = operation.getInputWrapper(); - WrapperInfo outputWrapperInfo = operation.getOutputWrapper(); - if (inputWrapperInfo == null || outputWrapperInfo == null) { - continue; - } - // TUSCANY-824 - // TUSCANY-3804 - modify the existing code to set up the input wrapper - String db = inputWrapperInfo.getDataBinding(); - if (db == null || JAXB_DATABINDING.equals(db)) { - db = assignInputDataBinding(operation); - } - - // Introspect the wrapper data type - DataBinding dbObj = dataBindingRegistry.getDataBinding(db); - WrapperHandler handler = dbObj == null ? null : dbObj.getWrapperHandler(); - if (handler != null) { - inputWrapperInfo.setWrapperType(handler.getWrapperType(operation, true)); - } - if (dbObj != null && handler == null) { - // To avoid JAXB wrapper bean generation - inputWrapperInfo.setWrapperType(null); - } - - // TUSCANY-3804 - handle output wrapper separately - db = outputWrapperInfo.getDataBinding(); - if (db == null || JAXB_DATABINDING.equals(db)) { - db = assignOutputDataBinding(operation); - } - - // Introspect the wrapper data type - dbObj = dataBindingRegistry.getDataBinding(db); - handler = dbObj == null ? null : dbObj.getWrapperHandler(); - if (handler != null) { - outputWrapperInfo.setWrapperType(handler.getWrapperType(operation, false)); - } - - if (dbObj != null && handler == null) { - // To avoid JAXB wrapper bean generation - outputWrapperInfo.setWrapperType(null); - } - } - } - - /* - * Assigns an operation DB if one of the input types has a non-default DB. - * However, if two of the input types, have two different non-default DBs - * ( e.g. SDO and JAXB), then we do nothing to the operation DB. - * - * The method logic assumes the JavaBeans DataBinding is the default - */ - private String assignInputDataBinding(Operation operation) { - - Set dbs = new HashSet(); - List opDataTypes = new LinkedList(); - - opDataTypes.addAll(operation.getInputType().getLogical()); - - for (DataType d : opDataTypes) { - if (d != null) { - String dataBinding = d.getDataBinding(); - if ("java:array".equals(dataBinding)) { - dataBinding = ((DataType)d.getLogical()).getDataBinding(); - } - if (dataBinding != null) { - dbs.add(dataBinding); - } - } - } - - dbs.remove(JavaBeansDataBinding.NAME); - dbs.remove(SimpleJavaDataBinding.NAME); - - if (dbs.size() == 1) { - String db = dbs.iterator().next(); - operation.getInputWrapper().setDataBinding(db); - return db; - } else { - return operation.getInputWrapper().getDataBinding(); - } - } - - // TUSCANY-3804: handle output wrapper separately. Ignore faults - // in this calculation, as they're not part of the output wrapper, and - // we have our own introspection/framework to deal with fault databindings. - // - private String assignOutputDataBinding(Operation operation) { - Set dbs = new HashSet(); - List opDataTypes = new LinkedList(); - - opDataTypes.addAll(operation.getOutputType().getLogical()); - - for (DataType d : opDataTypes) { - if (d != null) { - String dataBinding = d.getDataBinding(); - if ("java:array".equals(dataBinding)) { - dataBinding = ((DataType)d.getLogical()).getDataBinding(); - } - if (dataBinding != null) { - dbs.add(dataBinding); - } - } - } - - dbs.remove(JavaBeansDataBinding.NAME); - dbs.remove(SimpleJavaDataBinding.NAME); - - if (dbs.size() == 1) { - String db = dbs.iterator().next(); - operation.getOutputWrapper().setDataBinding(db); - return db; - } else { - return operation.getOutputWrapper().getDataBinding(); - } - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Array2ArrayTransformer.java b/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Array2ArrayTransformer.java deleted file mode 100644 index 4997a872ba..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Array2ArrayTransformer.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.core.databinding.transformers; - -import java.lang.reflect.Array; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.BaseTransformer; -import org.apache.tuscany.sca.interfacedef.DataType; - -/** - * This is a special transformer to transform the output from one IDL to the - * other one - * - * @version $Rev$ $Date$ - */ -public class Array2ArrayTransformer extends BaseTransformer implements PullTransformer { - - protected Mediator mediator; - - public Array2ArrayTransformer(ExtensionPointRegistry registry) { - super(); - this.mediator = registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(Mediator.class); - } - - @Override - public String getSourceDataBinding() { - return "java:array"; - } - - @Override - public String getTargetDataBinding() { - return "java:array"; - } - - /** - * @see org.apache.tuscany.sca.databinding.BaseTransformer#getSourceType() - */ - @Override - protected Class getSourceType() { - return Object.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.BaseTransformer#getTargetType() - */ - @Override - protected Class getTargetType() { - return Object.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.Transformer#getWeight() - */ - @Override - public int getWeight() { - return 10; - } - - @SuppressWarnings("unchecked") - public Object transform(Object array, TransformationContext context) { - try { - if (array == null) { - return null; - } - DataType sourceType = context.getSourceDataType(); - DataType targetType = context.getTargetDataType(); - int length = Array.getLength(array); - Object targetArray = Array.newInstance(targetType.getPhysical().getComponentType(), length); - for (int i = 0; i < length; i++) { - Object sourceItem = Array.get(array, i); - Object targetItem = - mediator.mediate(sourceItem, sourceType.getLogical(), targetType.getLogical(), context - .getMetadata()); - Array.set(targetArray, i, targetItem); - } - return targetArray; - } catch (Exception e) { - throw new TransformationException(e); - } - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Collection2CollectionTransformer.java b/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Collection2CollectionTransformer.java deleted file mode 100644 index dcd3c3fda3..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Collection2CollectionTransformer.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.core.databinding.transformers; - -import java.util.Collection; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.databinding.BaseTransformer; -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.interfacedef.DataType; - -/** - * This is a special transformer to transform the output from one IDL to the - * other one - * - * @version $Rev$ $Date$ - */ -public class Collection2CollectionTransformer extends BaseTransformer implements - PullTransformer { - - private static final String JAVA_COLLECTION = "java:collection"; - protected Mediator mediator; - - public Collection2CollectionTransformer(ExtensionPointRegistry registry) { - super(); - this.mediator = registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(Mediator.class); - } - - @Override - public String getSourceDataBinding() { - return JAVA_COLLECTION; - } - - @Override - public String getTargetDataBinding() { - return JAVA_COLLECTION; - } - - /** - * @see org.apache.tuscany.sca.databinding.BaseTransformer#getSourceType() - */ - @Override - protected Class getSourceType() { - return Collection.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.BaseTransformer#getTargetType() - */ - @Override - protected Class getTargetType() { - return Collection.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.Transformer#getWeight() - */ - @Override - public int getWeight() { - return 10; - } - - @SuppressWarnings("unchecked") - public Collection transform(Collection sourceCollection, TransformationContext context) { - try { - if (sourceCollection == null) { - return null; - } - DataType sourceType = context.getSourceDataType(); - DataType targetType = context.getTargetDataType(); - Collection targetCollection = createCollection(targetType.getPhysical()); - for (Object sourceItem : sourceCollection) { - Object targetItem = - mediator.mediate(sourceItem, sourceType.getLogical(), targetType.getLogical(), context - .getMetadata()); - targetCollection.add(targetItem); - } - return targetCollection; - } catch (Exception e) { - throw new TransformationException(e); - } - } - - private Collection createCollection(Class collectionClass) throws Exception { - return (Collection) collectionClass.newInstance(); - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java b/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java deleted file mode 100644 index f0e4a0fa10..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Exception2ExceptionTransformer.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.core.databinding.transformers; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.BaseTransformer; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.FaultExceptionMapper; -import static org.apache.tuscany.sca.interfacedef.Operation.IDL_FAULT; - -/** - * This is a special transformer to transform the exception from one IDL to the - * other one - * - * @version $Rev$ $Date$ - */ -public class Exception2ExceptionTransformer extends BaseTransformer implements - PullTransformer { - - protected Mediator mediator; - protected FaultExceptionMapper faultExceptionMapper; - - public Exception2ExceptionTransformer(ExtensionPointRegistry registry) { - super(); - UtilityExtensionPoint utilityExtensionPoint = registry.getExtensionPoint(UtilityExtensionPoint.class); - this.mediator = utilityExtensionPoint.getUtility(Mediator.class); - this.faultExceptionMapper = utilityExtensionPoint.getUtility(FaultExceptionMapper.class); - } - - protected Exception2ExceptionTransformer(Mediator mediator, FaultExceptionMapper faultExceptionMapper) { - super(); - this.mediator = mediator; - this.faultExceptionMapper = faultExceptionMapper; - } - - @Override - public String getSourceDataBinding() { - return IDL_FAULT; - } - - @Override - public String getTargetDataBinding() { - return IDL_FAULT; - } - - /** - * @see org.apache.tuscany.sca.databinding.BaseTransformer#getSourceType() - */ - @Override - protected Class getSourceType() { - return Throwable.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.BaseTransformer#getTargetType() - */ - @Override - protected Class getTargetType() { - return Throwable.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.Transformer#getWeight() - */ - @Override - public int getWeight() { - return 10000; - } - - @SuppressWarnings("unchecked") - public Throwable transform(Throwable source, TransformationContext context) { - DataType sourceType = context.getSourceDataType(); - - DataType targetType = context.getTargetDataType(); - - 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(), context.getTargetOperation()); - - // FIXME - return targetException == null ? source : targetException; - - } - - public void setFaultExceptionMapper(FaultExceptionMapper faultExceptionMapper) { - this.faultExceptionMapper = faultExceptionMapper; - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java b/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java deleted file mode 100644 index dfb6827762..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.core.databinding.transformers; - -import java.util.List; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.databinding.DataBinding; -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.databinding.WrapperHandler; -import org.apache.tuscany.sca.databinding.BaseTransformer; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import static org.apache.tuscany.sca.interfacedef.Operation.IDL_INPUT; -import org.apache.tuscany.sca.interfacedef.util.ElementInfo; -import org.apache.tuscany.sca.interfacedef.util.WrapperInfo; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * This is a special transformer to transform the input from one IDL to the - * other one - * - * @version $Rev$ $Date$ - */ -public class Input2InputTransformer extends BaseTransformer implements - PullTransformer { - protected Mediator mediator; - - public Input2InputTransformer(ExtensionPointRegistry registry) { - super(); - this.mediator = registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(Mediator.class); - } - - @Override - public String getSourceDataBinding() { - return IDL_INPUT; - } - - @Override - public String getTargetDataBinding() { - return IDL_INPUT; - } - - /** - * @see org.apache.tuscany.sca.databinding.BaseTransformer#getSourceType() - */ - @Override - protected Class getSourceType() { - return Object[].class; - } - - /** - * @see org.apache.tuscany.sca.databinding.BaseTransformer#getTargetType() - */ - @Override - protected Class getTargetType() { - return Object[].class; - } - - /** - * @see org.apache.tuscany.sca.databinding.Transformer#getWeight() - */ - @Override - public int getWeight() { - return 10000; - } - - /** - * Match the structure of the wrapper element. If it matches, then we can do - * wrapper to wrapper transformation. Otherwise, we do child to child. - * @param w1 - * @param w2 - * @return - */ - private boolean matches(WrapperInfo w1, WrapperInfo w2) { - if (w1 == null || w2 == null) { - return false; - } - if (!w1.getWrapperElement().equals(w2.getWrapperElement())) { - return false; - } - - // Compare the child elements - List list1 = w1.getChildElements(); - List list2 = w2.getChildElements(); - if (list1.size() != list2.size()) { - return false; - } - // FXIME: [rfeng] At this point, the J2W generates local elments under the namespace - // of the interface instead of "". We only compare the local parts only to work around - // the namespace mismatch - for (int i = 0; i < list1.size(); i++) { - String n1 = list1.get(i).getQName().getLocalPart(); - String n2 = list2.get(i).getQName().getLocalPart(); - // TUSCANY-3298: In the following situation: - // 1. The child is a java.util.Map type - // 2. The child's name is a Java keyword (e.g., return) - // 3. Tuscany is using a generated JAXB wrapper class for WSDL generation - // the Java to WSDL generation process results in the WSDL element name - // having a leading underscore added to the actual element name. This is - // because of a known JAXB issue that prevents the @XmlElement annotation - // being used on a java.util.Map type property field in the wrapper bean - // (see https://jaxb.dev.java.net/issues/show_bug.cgi?id=268). - // To prevent the compatibility match from failing in this situation, - // we strip any leading underscore before doing the comparison. - if (!stripLeadingUnderscore(n1).equals(stripLeadingUnderscore(n2))) { - return false; - } - } - return true; - } - - private static String stripLeadingUnderscore(String name) { - return name.startsWith("_") ? name.substring(1) : name; - } - - @SuppressWarnings("unchecked") - public Object[] transform(Object[] source, TransformationContext context) { - // Check if the source operation is wrapped - DataType> sourceType = context.getSourceDataType(); - Operation sourceOp = context.getSourceOperation(); - boolean sourceWrapped = sourceOp != null && sourceOp.isInputWrapperStyle() && sourceOp.getInputWrapper() != null; - boolean sourceNotSubjectToWrapping = sourceOp != null && sourceOp.isNotSubjectToWrapping(); - - // Find the wrapper handler for source data - WrapperHandler sourceWrapperHandler = null; - String sourceDataBinding = getDataBinding(sourceOp); - sourceWrapperHandler = getWrapperHandler(sourceDataBinding, sourceWrapped); - - // Check if the target operation is wrapped - DataType> targetType = context.getTargetDataType(); - Operation targetOp = (Operation)context.getTargetOperation(); - boolean targetWrapped = targetOp != null && targetOp.isInputWrapperStyle() && targetOp.getInputWrapper() != null; - boolean targetNotSubjectToWrapping = targetOp != null && targetOp.isNotSubjectToWrapping(); - - // Find the wrapper handler for target data - WrapperHandler targetWrapperHandler = null; - String targetDataBinding = getDataBinding(targetOp); - targetWrapperHandler = getWrapperHandler(targetDataBinding, targetWrapped); - - if ((!sourceWrapped && !sourceNotSubjectToWrapping) && targetWrapped) { - // Unwrapped --> Wrapped - WrapperInfo wrapper = targetOp.getInputWrapper(); - // ElementInfo wrapperElement = wrapper.getInputWrapperElement(); - - // Class targetWrapperClass = wrapper != null ? wrapper.getInputWrapperClass() : null; - - if (source == null) { - // Empty child elements - Object targetWrapper = targetWrapperHandler.create(targetOp, true); - return new Object[] {targetWrapper}; - } - - // If the source can be wrapped, wrapped it first - if (sourceWrapperHandler != null) { - WrapperInfo sourceWrapperInfo = sourceOp.getInputWrapper(); - DataType sourceWrapperType = sourceWrapperInfo != null ? sourceWrapperInfo.getWrapperType() : 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.getInputWrapper(), targetOp.getInputWrapper())) { - Class sourceWrapperClass = sourceWrapperType.getPhysical(); - - // Create the source wrapper - Object sourceWrapper = sourceWrapperHandler.create(sourceOp, true); - - // Populate the source wrapper - if (sourceWrapper != null) { - sourceWrapperHandler.setChildren(sourceWrapper, - source, - sourceOp, - true); - - // Transform the data from source wrapper to target wrapper - Object targetWrapper = - mediator.mediate(sourceWrapper, sourceWrapperType, targetType.getLogical().get(0), context - .getMetadata()); - return new Object[] {targetWrapper}; - } - } - } - // Fall back to child by child transformation - Object targetWrapper = targetWrapperHandler.create(targetOp, true); - List argTypes = wrapper.getUnwrappedType().getLogical(); - Object[] targetChildren = new Object[source.length]; - for (int i = 0; i < source.length; i++) { - // ElementInfo argElement = wrapper.getInputChildElements().get(i); - DataType argType = argTypes.get(i); - targetChildren[i] = - mediator.mediate(source[i], sourceType.getLogical().get(i), argType, context.getMetadata()); - } - targetWrapperHandler.setChildren(targetWrapper, - targetChildren, - targetOp, - true); - return new Object[] {targetWrapper}; - - } else if (sourceWrapped && (!targetWrapped && !targetNotSubjectToWrapping)) { - // Wrapped to Unwrapped - Object sourceWrapper = source[0]; - Object[] target = null; - - // List childElements = sourceOp.getWrapper().getInputChildElements(); - if (targetWrapperHandler != null) { - // ElementInfo wrapperElement = sourceOp.getWrapper().getInputWrapperElement(); - // 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, sourceOp, true)) { - - WrapperInfo targetWrapperInfo = targetOp.getInputWrapper(); - DataType targetWrapperType = - targetWrapperInfo != null ? targetWrapperInfo.getWrapperType() : null; - if (targetWrapperType != null && matches(sourceOp.getInputWrapper(), targetOp.getInputWrapper())) { - Object targetWrapper = - mediator.mediate(sourceWrapper, sourceType.getLogical().get(0), targetWrapperType, context - .getMetadata()); - target = targetWrapperHandler.getChildren(targetWrapper, targetOp, true).toArray(); - return target; - } - } - } - Object[] sourceChildren = sourceWrapperHandler.getChildren(sourceWrapper, sourceOp, true).toArray(); - target = new Object[sourceChildren.length]; - for (int i = 0; i < sourceChildren.length; i++) { - DataType childType = sourceOp.getInputWrapper().getUnwrappedType().getLogical().get(i); - target[i] = - mediator.mediate(sourceChildren[i], childType, targetType.getLogical().get(i), context - .getMetadata()); - } - return target; - } else { - // Assuming wrapper to wrapper conversion can be handled here as well - Object[] newArgs = new Object[source.length]; - for (int i = 0; i < source.length; i++) { - Object child = - mediator.mediate(source[i], sourceType.getLogical().get(i), targetType.getLogical().get(i), context - .getMetadata()); - newArgs[i] = child; - } - return newArgs; - } - } - - private WrapperHandler getWrapperHandler(String dataBindingId, boolean required) { - WrapperHandler wrapperHandler = null; - if (dataBindingId != null) { - DataBinding dataBinding = mediator.getDataBindings().getDataBinding(dataBindingId); - wrapperHandler = dataBinding == null ? null : dataBinding.getWrapperHandler(); - } - if (wrapperHandler == null && required) { - throw new TransformationException("No wrapper handler is provided for databinding: " + dataBindingId); - } - return wrapperHandler; - } - - private String getDataBinding(Operation operation) { - WrapperInfo wrapper = operation.getInputWrapper(); - if (wrapper != null) { - return wrapper.getDataBinding(); - } else { - return null; - } - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Map2MapTransformer.java b/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Map2MapTransformer.java deleted file mode 100644 index 5be7ba1da4..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Map2MapTransformer.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.core.databinding.transformers; - -import java.util.Map; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.databinding.BaseTransformer; -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -import org.apache.tuscany.sca.databinding.TransformationException; -import org.apache.tuscany.sca.interfacedef.DataType; - -/** - * This is a special transformer to transform the output from one IDL to the - * other one - * - * @version $Rev$ $Date$ - */ -public class Map2MapTransformer extends BaseTransformer implements PullTransformer { - - private static final String JAVA_MAP = "java:map"; - protected Mediator mediator; - - public Map2MapTransformer(ExtensionPointRegistry registry) { - super(); - this.mediator = registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(Mediator.class); - } - - @Override - public String getSourceDataBinding() { - return JAVA_MAP; - } - - @Override - public String getTargetDataBinding() { - return JAVA_MAP; - } - - /** - * @see org.apache.tuscany.sca.databinding.BaseTransformer#getSourceType() - */ - @Override - protected Class getSourceType() { - return Map.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.BaseTransformer#getTargetType() - */ - @Override - protected Class getTargetType() { - return Map.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.Transformer#getWeight() - */ - @Override - public int getWeight() { - return 10; - } - - @SuppressWarnings("unchecked") - public Map transform(Map sourceMap, TransformationContext context) { - try { - if (sourceMap == null) { - return null; - } - DataType sourceType = context.getSourceDataType(); - DataType targetType = context.getTargetDataType(); - Map targetMap = createMap(targetType.getPhysical()); - for (Object sourceItem : sourceMap.entrySet()) { - Map.Entry entry = (Map.Entry)sourceItem; - Object targetValue = - mediator.mediate(entry.getValue(), sourceType.getLogical(), targetType.getLogical(), context - .getMetadata()); - targetMap.put(entry.getKey(), targetValue); - } - return targetMap; - } catch (Exception e) { - throw new TransformationException(e); - } - } - - private Map createMap(Class collectionClass) throws Exception { - return (Map)collectionClass.newInstance(); - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java b/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java deleted file mode 100644 index b12d75e513..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.tuscany.sca.core.databinding.transformers; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.databinding.BaseTransformer; -import org.apache.tuscany.sca.databinding.DataBinding; -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.databinding.PullTransformer; -import org.apache.tuscany.sca.databinding.TransformationContext; -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.Operation; -import static org.apache.tuscany.sca.interfacedef.Operation.IDL_OUTPUT; -import org.apache.tuscany.sca.interfacedef.util.ElementInfo; -import org.apache.tuscany.sca.interfacedef.util.WrapperInfo; -import org.apache.tuscany.sca.interfacedef.util.XMLType; - -/** - * This is a special transformer to transform the output from one IDL to the - * other one - * - * @version $Rev$ $Date$ - */ -public class Output2OutputTransformer extends BaseTransformer implements - PullTransformer { - - protected Mediator mediator; - - /** - * @param wrapperHandler - */ - public Output2OutputTransformer(ExtensionPointRegistry registry) { - super(); - this.mediator = registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(Mediator.class); - } - - @Override - public String getSourceDataBinding() { - return IDL_OUTPUT; - } - - @Override - public String getTargetDataBinding() { - return IDL_OUTPUT; - } - - /** - * @see org.apache.tuscany.sca.databinding.BaseTransformer#getSourceType() - */ - @Override - protected Class getSourceType() { - return Object.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.BaseTransformer#getTargetType() - */ - @Override - protected Class getTargetType() { - return Object.class; - } - - /** - * @see org.apache.tuscany.sca.databinding.Transformer#getWeight() - */ - @Override - public int getWeight() { - return 10; - } - - private String getDataBinding(Operation operation) { - WrapperInfo wrapper = operation.getOutputWrapper(); - if (wrapper != null) { - return wrapper.getDataBinding(); - } else { - return null; - } - } - - private WrapperHandler getWrapperHandler(String dataBindingId, boolean required) { - WrapperHandler wrapperHandler = null; - if (dataBindingId != null) { - DataBinding dataBinding = mediator.getDataBindings().getDataBinding(dataBindingId); - wrapperHandler = dataBinding == null ? null : dataBinding.getWrapperHandler(); - } - if (wrapperHandler == null && required) { - throw new TransformationException("No wrapper handler is provided for databinding: " + dataBindingId); - } - return wrapperHandler; - } - - /** - * Match the structure of the wrapper element. If it matches, then we can do - * wrapper to wrapper transformation. Otherwise, we do child to child. - * @param w1 - * @param w2 - * @return - */ - private boolean matches(WrapperInfo w1, WrapperInfo w2) { - if (w1 == null || w2 == null) { - return false; - } - if (!w1.getWrapperElement().equals(w2.getWrapperElement())) { - return false; - } - - // Compare the child elements - List list1 = w1.getChildElements(); - List list2 = w2.getChildElements(); - if (list1.size() != list2.size()) { - return false; - } - // FXIME: [rfeng] At this point, the J2W generates local elments under the namespace - // of the interface instead of "". We only compare the local parts only to work around - // the namespace mismatch - for (int i = 0; i < list1.size(); i++) { - String n1 = list1.get(i).getQName().getLocalPart(); - String n2 = list2.get(i).getQName().getLocalPart(); - - // TUSCANY-3298: In the following situation: - // 1. The child is a java.util.Map type - // 2. The child's name is a Java keyword (e.g., return) - // 3. Tuscany is using a generated JAXB wrapper class for WSDL generation - // the Java to WSDL generation process results in the WSDL element name - // having a leading underscore added to the actual element name. This is - // because of a known JAXB issue that prevents the @XmlElement annotation - // being used on a java.util.Map type property field in the wrapper bean - // (see https://jaxb.dev.java.net/issues/show_bug.cgi?id=268). - // To prevent the compatibility match from failing in this situation, - // we strip any leading underscore before doing the comparison. - if (!stripLeadingUnderscore(n1).equals(stripLeadingUnderscore(n2))) { - return false; - } - } - return true; - } - - private static String stripLeadingUnderscore(String name) { - return name.startsWith("_") ? name.substring(1) : name; - } - - @SuppressWarnings("unchecked") - public Object transform(Object response, TransformationContext context) { - try { - - DataType> sourceType = context.getSourceDataType(); - Operation sourceOp = context.getSourceOperation(); - boolean sourceWrapped = sourceOp != null && sourceOp.isOutputWrapperStyle() && sourceOp.getOutputWrapper() != null; - boolean sourceNotSubjectToWrapping = sourceOp != null && sourceOp.isNotSubjectToWrapping(); - - WrapperHandler sourceWrapperHandler = null; - String sourceDataBinding = getDataBinding(sourceOp); - sourceWrapperHandler = getWrapperHandler(sourceDataBinding, sourceWrapped); - - DataType> targetType = context.getTargetDataType(); - Operation targetOp = (Operation)context.getTargetOperation(); - boolean targetWrapped = targetOp != null && targetOp.isOutputWrapperStyle() && targetOp.getOutputWrapper() != null; - boolean targetNotSubjectToWrapping = targetOp != null && targetOp.isNotSubjectToWrapping(); - - WrapperHandler targetWrapperHandler = null; - String targetDataBinding = getDataBinding(targetOp); - targetWrapperHandler = getWrapperHandler(targetDataBinding, targetWrapped); - - if ((!sourceWrapped &&!sourceNotSubjectToWrapping) && targetWrapped) { - // Unwrapped --> Wrapped - WrapperInfo wrapper = targetOp.getOutputWrapper(); - ElementInfo wrapperElement = wrapper.getWrapperElement(); - List childElements = wrapper.getChildElements(); - Class targetWrapperClass = wrapper != null ? wrapper.getWrapperClass() : null; - - Object[] outputs = null; - if ( !sourceOp.hasArrayWrappedOutput() ) { - outputs = new Object[] {response}; - } else { - outputs = (Object[])response; - } - - // If the source can be wrapped, wrapped it first - if (sourceWrapperHandler != null) { - WrapperInfo sourceWrapperInfo = sourceOp.getOutputWrapper(); - DataType sourceWrapperType = - sourceWrapperInfo != null ? sourceWrapperInfo.getWrapperType() : null; - - if (sourceWrapperType != null && matches(sourceOp.getOutputWrapper(), targetOp.getOutputWrapper())) { - Class sourceWrapperClass = sourceWrapperType.getPhysical(); - - Object sourceWrapper = sourceWrapperHandler.create(sourceOp, false); - if (sourceWrapper != null) { - if (!childElements.isEmpty()) { - // Set the return value - sourceWrapperHandler.setChildren(sourceWrapper, - outputs, - sourceOp, - false); - } - Object targetWrapper = - mediator.mediate(sourceWrapper, sourceWrapperType, targetType.getLogical().get(0), context - .getMetadata()); - return targetWrapper; - } - } - } - Object targetWrapper = targetWrapperHandler.create(targetOp, false); - - if (childElements.isEmpty()) { - // void output - return targetWrapper; - } - - // No source wrapper, so we want to transform the child and then wrap the child-level target with the - // target wrapper handler. - - Object[] targetChildren = new Object[outputs.length]; - for (int i = 0; i < outputs.length; i++) { - DataType targetOutputType = wrapper.getUnwrappedType().getLogical().get(i); - targetChildren[i] = - mediator.mediate(outputs[i], sourceType.getLogical().get(i), targetOutputType, context.getMetadata()); - } - targetWrapperHandler.setChildren(targetWrapper, - targetChildren, - targetOp, - false); - return targetWrapper; - - } else if (sourceWrapped && (!targetWrapped && !targetNotSubjectToWrapping)) { - // Wrapped to Unwrapped - Object sourceWrapper = response; - List childElements = sourceOp.getOutputWrapper().getChildElements(); - if (childElements.isEmpty()) { - // The void output - return null; - } - if (targetWrapperHandler != null) { - ElementInfo wrapperElement = sourceOp.getOutputWrapper().getWrapperElement(); - - // 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, sourceOp, false)) { - - WrapperInfo targetWrapperInfo = targetOp.getOutputWrapper(); - DataType targetWrapperType = - targetWrapperInfo != null ? targetWrapperInfo.getWrapperType() : null; - - if (targetWrapperType != null && matches(sourceOp.getOutputWrapper(), targetOp.getOutputWrapper())) { - Object targetWrapper = - mediator.mediate(sourceWrapper, sourceType.getLogical().get(0), targetWrapperType, context - .getMetadata()); - List targetChildren = targetWrapperHandler.getChildren(targetWrapper, targetOp, false); - if (targetOp.hasArrayWrappedOutput()) { - return targetChildren.toArray(); - } else { - return targetChildren.get(0); - } - } - } - } - - // Otherwise we need to unwrap on the source side, and then transform each child - Object[] sourceChildren = sourceWrapperHandler.getChildren(sourceWrapper, sourceOp, false).toArray(); - Object[] target = new Object[sourceChildren.length]; - for (int i = 0; i < sourceChildren.length; i++) { - DataType childType = sourceOp.getOutputWrapper().getUnwrappedType().getLogical().get(i); - target[i] = - mediator.mediate(sourceChildren[i], childType, targetType.getLogical().get(i), context - .getMetadata()); - } - - if (targetOp.hasArrayWrappedOutput()) { - return target; - } else { - if (target.length > 1 ) { - throw new IllegalStateException("Expecting only one output based on Operation model, found: " + - target.length + " # of outputs."); - } - return target[0]; - } - } else { - Object[] outputs = null; - if ( !sourceOp.hasArrayWrappedOutput() ) { - outputs = new Object[] {response}; - } else { - outputs = (Object[])response; - } - Object[] target = new Object[outputs.length]; - for (int i = 0; i < outputs.length; i++) { - Object child = - mediator.mediate(outputs[i], sourceType.getLogical().get(i), targetType.getLogical().get(i), context - .getMetadata()); - target[i] = child; - } - if (targetOp.hasArrayWrappedOutput()) { - return target; - } else { - if (target.length > 1 ) { - throw new IllegalStateException("Expecting only one output based on Operation model, found: " + - target.length + " # of outputs."); - } - return target[0]; - } - } - } catch (Exception e) { - throw new TransformationException(e); - } - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataBindingRuntimeWireProcessor.java b/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataBindingRuntimeWireProcessor.java deleted file mode 100644 index 29a4551a5a..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataBindingRuntimeWireProcessor.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.core.databinding.wire; - -import java.util.List; - -import org.apache.tuscany.sca.core.ExtensionPointRegistry; -import org.apache.tuscany.sca.core.UtilityExtensionPoint; -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.databinding.util.OperationDataBindingHelper; -import org.apache.tuscany.sca.interfacedef.InterfaceContract; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.InvocationChain; -import org.apache.tuscany.sca.invocation.Phase; -import org.apache.tuscany.sca.runtime.RuntimeEndpoint; -import org.apache.tuscany.sca.runtime.RuntimeEndpointReference; -import org.apache.tuscany.sca.runtime.RuntimeWireProcessor; - -/** - * This processor is responsible to add an interceptor to invocation chain if - * the source and target operations have different databinding requirements - * - * @version $Rev$ $Date$ - */ -public class DataBindingRuntimeWireProcessor implements RuntimeWireProcessor { - private Mediator mediator; - - public DataBindingRuntimeWireProcessor(ExtensionPointRegistry registry) { - super(); - this.mediator = registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(Mediator.class); - } - - public void process(RuntimeEndpoint endpoint) { - InterfaceContract sourceContract = endpoint.getBindingInterfaceContract(); - InterfaceContract targetContract = endpoint.getComponentTypeServiceInterfaceContract(); - if (targetContract == null) { - targetContract = sourceContract; - } - - if (!sourceContract.getInterface().isRemotable()) { - return; - } - List chains = endpoint.getInvocationChains(); - for (InvocationChain chain : chains) { - Operation sourceOperation = chain.getSourceOperation(); - Operation targetOperation = chain.getTargetOperation(); - - Interceptor interceptor = null; - if (isTransformationRequired(sourceContract, sourceOperation, targetContract, targetOperation)) { - // Add the interceptor to the source side because multiple - // references can be wired to the same service - interceptor = new DataTransformationInterceptor(endpoint, sourceOperation, targetOperation, mediator); - } - if (interceptor != null) { - String phase = Phase.SERVICE_INTERFACE; - chain.addInterceptor(phase, interceptor); - } - } - - } - - public void process(RuntimeEndpointReference endpointReference) { - InterfaceContract sourceContract = endpointReference.getComponentTypeReferenceInterfaceContract(); - InterfaceContract targetContract = endpointReference.getBindingInterfaceContract(); - if (targetContract == null) { - targetContract = sourceContract; - } - - if (sourceContract == null || !sourceContract.getInterface().isRemotable()) { - return; - } - List chains = endpointReference.getInvocationChains(); - for (InvocationChain chain : chains) { - Operation sourceOperation = chain.getSourceOperation(); - Operation targetOperation = chain.getTargetOperation(); - - Interceptor interceptor = null; - if (isTransformationRequired(sourceContract, sourceOperation, targetContract, targetOperation)) { - // Add the interceptor to the source side because multiple - // references can be wired to the same service - interceptor = new DataTransformationInterceptor(endpointReference, sourceOperation, targetOperation, mediator); - } - if (interceptor != null) { - String phase = Phase.REFERENCE_INTERFACE; - chain.addInterceptor(phase, interceptor); - } - } - - } - - - private boolean isTransformationRequired(InterfaceContract sourceContract, - Operation sourceOperation, - InterfaceContract targetContract, - Operation targetOperation) { - if (targetContract == null) { - targetContract = sourceContract; - } - if (sourceContract == targetContract) { - return false; - } - return OperationDataBindingHelper.isTransformationRequired(sourceOperation, targetOperation); - } - -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java b/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java deleted file mode 100644 index 8b15d616ac..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.core.databinding.wire; - -import java.lang.reflect.Method; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.tuscany.sca.core.invocation.InterceptorAsyncImpl; -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.interfacedef.DataType; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.interfacedef.java.JavaOperation; -import org.apache.tuscany.sca.invocation.Message; -import org.apache.tuscany.sca.runtime.Invocable; - -/** - * An interceptor to transform data across databindings on the wire - * - * @version $Rev$ $Date$ - */ -public class DataTransformationInterceptor extends InterceptorAsyncImpl { - - private Operation sourceOperation; - - private Operation targetOperation; - private Invocable invocable; - private Mediator mediator; - - public DataTransformationInterceptor(Invocable invocable, - Operation sourceOperation, - Operation targetOperation, - Mediator mediator) { - super(); - this.sourceOperation = sourceOperation; - this.targetOperation = targetOperation; - if ( sourceOperation instanceof JavaOperation ) { - JavaOperation javaOp = (JavaOperation) sourceOperation; - Method sourceMethod = javaOp.getJavaMethod(); - } - - this.mediator = mediator; - this.invocable = invocable; - } - - public Message processRequest(Message msg) { - Map metadata = new HashMap(); - metadata.put(Invocable.class.getName(), invocable); - Object input = mediator.mediateInput(msg.getBody(), sourceOperation, targetOperation, metadata); - msg.setBody(input); - return msg; - } - - public Message processResponse(Message msg) { - Message resultMsg = msg; - Map metadata = new HashMap(); - metadata.put(Invocable.class.getName(), invocable); - - if (sourceOperation.isNonBlocking()) { - // Not to reset the message body - return resultMsg; - } - - Object result = resultMsg.getBody(); - - if (resultMsg.isFault()) { - Object transformedFault = null; - if ((result instanceof Exception) && !(result instanceof RuntimeException)) { - transformedFault = mediator.mediateFault(result, sourceOperation, targetOperation, metadata); - if (transformedFault != result) { - resultMsg.setFaultBody(transformedFault); - } - } - // - // Leave it to another layer to actually throw the Exception which constitutes - // the message body. We don't throw it here. - // - } else { - assert !(result instanceof Throwable) : "Expected messages that are not throwable " + result; - Object newResult = mediator.mediateOutput(result, sourceOperation, targetOperation, metadata); - resultMsg.setBody(newResult); - } - - return resultMsg; - } - -/* - public Message invoke(Message msg) { - Map metadata = new HashMap(); - metadata.put(Invocable.class.getName(), invocable); - Object input = mediator.mediateInput(msg.getBody(), sourceOperation, targetOperation, metadata); - msg.setBody(input); - Message resultMsg = next.invoke(msg); - - if (sourceOperation.isNonBlocking()) { - // Not to reset the message body - return resultMsg; - } - - Object result = resultMsg.getBody(); - - if (resultMsg.isFault()) { - Object transformedFault = null; - if ((result instanceof Exception) && !(result instanceof RuntimeException)) { - transformedFault = mediator.mediateFault(result, sourceOperation, targetOperation, metadata); - if (transformedFault != result) { - resultMsg.setFaultBody(transformedFault); - } - } - // - // Leave it to another layer to actually throw the Exception which constitutes - // the message body. We don't throw it here. - // - } else { - assert !(result instanceof Throwable) : "Expected messages that are not throwable " + result; - Object newResult = mediator.mediateOutput(result, sourceOperation, targetOperation, metadata); - resultMsg.setBody(newResult); - } - - return resultMsg; - } -*/ - - - /** - * Returns return type for first Holder in input list. - * Returns null if the inputs do not contain a Holder. - */ - protected List> getHolderTypes( DataType> inputTypes ) { - ArrayList> returnTypes = new ArrayList>(); - if (inputTypes != null) { - - List logicalType = inputTypes.getLogical(); - if (logicalType != null) { - for (int i = 0; i < logicalType.size(); i++) { - DataType dataType = logicalType.get(i); - if (isHolder(dataType.getGenericType())) { - returnTypes.add(dataType); - } - } - } - } - return returnTypes; - } - - protected static boolean isHolder( Type type ) { - String typeString = type.toString(); - if ( typeString.startsWith( "javax.xml.ws.Holder" ) ) { - return true; - } - return false; - } -} diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java b/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java deleted file mode 100644 index 44e5072e61..0000000000 --- a/sca-java-2.x/tags/2.0.1-RC1/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/PassByValueInterceptor.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.tuscany.sca.core.databinding.wire; - -import org.apache.tuscany.sca.databinding.Mediator; -import org.apache.tuscany.sca.interfacedef.Operation; -import org.apache.tuscany.sca.invocation.Interceptor; -import org.apache.tuscany.sca.invocation.InvocationChain; -import org.apache.tuscany.sca.invocation.Invoker; -import org.apache.tuscany.sca.invocation.Message; - -/** - * Implementation of an interceptor that enforces pass-by-value semantics - * on operation invocations by copying the operation input and output data. - * - * @version $Rev$ $Date$ - */ -public class PassByValueInterceptor implements Interceptor { - - private Mediator mediator; - private Operation operation; - private Invoker nextInvoker; - private InvocationChain chain; - - /** - * Constructs a new PassByValueInterceptor. - * @param dataBindings databinding extension point - * @param operation the intercepted operation - */ - public PassByValueInterceptor(Mediator mediator, InvocationChain chain, Operation operation) { - this.mediator = mediator; - this.chain = chain; - this.operation = operation; - } - - public Message invoke(Message msg) { - if (chain.allowsPassByReference()) { - return nextInvoker.invoke(msg); - } - - msg.setBody(mediator.copyInput(msg.getBody(), operation)); - - Message resultMsg = nextInvoker.invoke(msg); - - if (!resultMsg.isFault() && operation.getOutputType() != null) { - resultMsg.setBody(mediator.copyOutput(resultMsg.getBody(), operation)); - } - - if (resultMsg.isFault()) { - resultMsg.setFaultBody(mediator.copyFault(resultMsg.getBody(), operation)); - } - return resultMsg; - } - - public Invoker getNext() { - return nextInvoker; - } - - public void setNext(Invoker next) { - this.nextInvoker = next; - } - -} -- cgit v1.2.3