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 2007/03/20 19:26:11 UTC
svn commit: r520509 [2/2] - in
/incubator/tuscany/java/sca/kernel/databinding: ./ src/ src/main/
src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/tuscany/ src/main/java/org/apache/tuscany/core/
src/main/java/org/apac...
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingInteceptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingInteceptor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessor.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessor.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessor.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,111 @@
+/*
+ * 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.core.databinding.wire;
+
+import java.util.Map;
+
+import org.apache.tuscany.spi.component.ComponentManager;
+import org.apache.tuscany.spi.databinding.Mediator;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.wire.InvocationChain;
+import org.apache.tuscany.spi.wire.Wire;
+import org.apache.tuscany.spi.wire.WirePostProcessorExtension;
+import org.osoa.sca.annotations.Constructor;
+import org.osoa.sca.annotations.Reference;
+
+/**
+ * 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 DataBindingWirePostProcessor extends WirePostProcessorExtension {
+ private Mediator mediator;
+ private ComponentManager componentManager;
+
+ @Constructor({"componentManager", "mediator"})
+ public DataBindingWirePostProcessor(@Reference ComponentManager componentManager,
+ @Reference Mediator mediator) {
+ super();
+ this.componentManager = componentManager;
+ this.mediator = mediator;
+ }
+
+ public void process(Wire wire) {
+ ServiceContract<?> sourceContract = wire.getSourceContract();
+ ServiceContract<?> targetContract = wire.getTargetContract();
+ if (targetContract == null) {
+ targetContract = sourceContract;
+ }
+ if (sourceContract == targetContract) {
+ return;
+ }
+ Map<Operation<?>, InvocationChain> chains = wire.getInvocationChains();
+ for (Map.Entry<Operation<?>, InvocationChain> entry : chains.entrySet()) {
+ String opName = entry.getKey().getName();
+ Operation<?> sourceOperation = sourceContract.getOperation(opName);
+ Operation<?> targetOperation = targetContract.getOperation(opName);
+ String sourceDataBinding = sourceOperation.getDataBinding();
+ String targetDataBinding = targetOperation.getDataBinding();
+ if (sourceDataBinding == null && targetDataBinding == null) {
+ continue;
+ }
+ if (sourceDataBinding == null || targetDataBinding == null
+ || !sourceDataBinding.equals(targetDataBinding)) {
+ // Add the interceptor to the source side because multiple
+ // references can be wired
+ // to the same service
+ DataBindingInteceptor interceptor =
+ new DataBindingInteceptor(componentManager, wire, sourceOperation, targetOperation);
+ interceptor.setMediator(mediator);
+ entry.getValue().addInterceptor(0, interceptor);
+ }
+ }
+
+ // Object targetAddress = UriHelper.getBaseName(source.getUri());
+ Map<Operation<?>, InvocationChain> callbackChains = wire.getCallbackInvocationChains();
+ if (callbackChains == null) {
+ // callback chains could be null
+ return;
+ }
+
+ for (Map.Entry<Operation<?>, InvocationChain> entry : callbackChains.entrySet()) {
+ String opName = entry.getKey().getName();
+ Operation<?> sourceOperation = sourceContract.getCallbackOperations().get(opName);
+ Operation<?> targetOperation = targetContract.getCallbackOperations().get(opName);
+ String sourceDataBinding = sourceOperation.getDataBinding();
+ String targetDataBinding = targetOperation.getDataBinding();
+ if (sourceDataBinding == null && targetDataBinding == null) {
+ continue;
+ }
+ if (sourceDataBinding == null || targetDataBinding == null || !sourceDataBinding.equals(targetDataBinding)) {
+ // Add the interceptor to the source side because multiple
+ // references can be wired
+ // to the same service
+ DataBindingInteceptor interceptor =
+ new DataBindingInteceptor(componentManager, wire, sourceOperation, targetOperation);
+ interceptor.setMediator(mediator);
+ entry.getValue().addInterceptor(0, interceptor);
+ }
+ }
+ }
+
+}
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/main/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/databinding/src/main/resources/org/apache/tuscany/core/databinding.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/main/resources/org/apache/tuscany/core/databinding.scdl?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/main/resources/org/apache/tuscany/core/databinding.scdl (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/main/resources/org/apache/tuscany/core/databinding.scdl Tue Mar 20 11:26:09 2007
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:system="http://tuscany.apache.org/xmlns/sca/system/2.0-alpha"
+ name="org.apache.tuscany.core.DataBinding" autowire="true">
+
+ <component name="databinding.wirePostProcessor" initLevel="50">
+ <system:implementation.system class="org.apache.tuscany.core.databinding.wire.DataBindingWirePostProcessor" />
+ </component>
+
+ <component name="databinding.javaInterfaceProcessor">
+ <system:implementation.system class="org.apache.tuscany.core.databinding.processor.DataBindingJavaInterfaceProcessor" />
+ </component>
+
+ <!-- [rfeng] HACK: Make sure the passByValue interceptor is added before the databinding interceptor -->
+ <!--
+ <component name="databinding.passByValueWirePostProcessor" initLevel="80">
+ <system:implementation.system class="org.apache.tuscany.databinding.impl.PassByValueWirePostProcessor" />
+ </component>
+ -->
+
+ <!-- DataBinding registry -->
+ <component name="databinding.registry">
+ <system:implementation.system class="org.apache.tuscany.databinding.impl.DataBindingRegistryImpl" />
+ </component>
+
+ <!-- DataBinding registry -->
+ <component name="databinding.mediator">
+ <system:implementation.system class="org.apache.tuscany.databinding.impl.MediatorImpl" />
+ </component>
+
+ <!-- Transformer registry -->
+ <component name="databinding.transformerRegistry" initLevel="90">
+ <system:implementation.system class="org.apache.tuscany.databinding.impl.TransformerRegistryImpl" />
+ </component>
+
+ <component name="dataType.loader">
+ <system:implementation.system class="org.apache.tuscany.core.databinding.loader.DataTypeLoader" />
+ </component>
+
+ <component name="databinding.dom">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.DOMDataBinding" />
+ </component>
+
+ <component name="databinding.xmlString">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.XMLStringDataBinding" />
+ </component>
+
+ <!-- Group databindings -->
+ <component name="databinding.group.xml">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.XMLGroupDataBinding" />
+ </component>
+
+ <!-- Comment out the stax databinding as it's covered in the databinding.group.xml -->
+ <!--
+ <component name="databinding.stax">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.StAXDataBinding" />
+ </component>
+ -->
+ <component name="databinding.javabeans">
+ <system:implementation.system class="org.apache.tuscany.databinding.javabeans.JavaBeansDataBinding" />
+ </component>
+
+ <!-- Transformers -->
+
+ <component name="transformer.Input2InputTransformer">
+ <system:implementation.system class="org.apache.tuscany.core.databinding.transformers.Input2InputTransformer" />
+ </component>
+
+ <component name="transformer.Exception2ExceptionTransformer">
+ <system:implementation.system class="org.apache.tuscany.core.databinding.transformers.Exception2ExceptionTransformer" />
+ </component>
+
+ <component name="transformer.Output2OutputTransformer">
+ <system:implementation.system class="org.apache.tuscany.core.databinding.transformers.Output2OutputTransformer" />
+ </component>
+
+ <component name="transformer.Group2GroupTransformer">
+ <system:implementation.system class="org.apache.tuscany.databinding.impl.Group2GroupTransformer" />
+ </component>
+
+ <component name="transformer.InputSource2Node">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.InputSource2Node" />
+ </component>
+
+ <component name="transformer.InputSource2SAX">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.InputSource2SAX" />
+ </component>
+
+ <component name="transformer.InputStream2Node">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.InputStream2Node" />
+ </component>
+
+ <component name="transformer.InputStream2SAX">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.InputStream2SAX" />
+ </component>
+
+ <component name="transformer.DOMNode2JavaBean">
+ <system:implementation.system class="org.apache.tuscany.databinding.javabeans.DOMNode2JavaBeanTransformer" />
+ </component>
+
+ <component name="transformer.Node2OutputStream">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.Node2OutputStream" />
+ </component>
+
+ <component name="transformer.Node2String">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.Node2String" />
+ </component>
+
+ <component name="transformer.Node2Writer">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.Node2Writer" />
+ </component>
+
+ <component name="transformer.Node2XMLStreamReader">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.Node2XMLStreamReader" />
+ </component>
+
+ <component name="transformer.JavaBean2DOMNode">
+ <system:implementation.system class="org.apache.tuscany.databinding.javabeans.JavaBean2DOMNodeTransformer" />
+ </component>
+
+ <component name="transformer.Reader2Node">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.Reader2Node" />
+ </component>
+
+ <component name="transformer.Reader2SAX">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.Reader2SAX" />
+ </component>
+
+ <component name="transformer.SAX2DOMPipe">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.SAX2DOMPipe" />
+ </component>
+
+ <component name="transformer.Source2ResultTransformer">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.Source2ResultTransformer" />
+ </component>
+
+ <component name="transformer.StreamDataPipe">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.StreamDataPipe" />
+ </component>
+
+ <component name="transformer.String2Node">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.String2Node" />
+ </component>
+
+ <component name="transformer.String2SAX">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.String2SAX" />
+ </component>
+
+ <component name="transformer.String2XMLStreamReader">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.String2XMLStreamReader" />
+ </component>
+
+ <component name="transformer.Writer2ReaderDataPipe">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.Writer2ReaderDataPipe" />
+ </component>
+
+ <component name="transformer.XMLStreamReader2Node">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.XMLStreamReader2Node" />
+ </component>
+
+ <component name="transformer.XMLStreamReader2SAX">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.XMLStreamReader2SAX" />
+ </component>
+
+ <component name="transformer.XMLStreamReader2String">
+ <system:implementation.system class="org.apache.tuscany.databinding.xml.XMLStreamReader2String" />
+ </component>
+</composite>
\ No newline at end of file
Added: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/loader/DataBindingLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/loader/DataBindingLoaderTestCase.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/loader/DataBindingLoaderTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/loader/DataBindingLoaderTestCase.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,80 @@
+/*
+ * 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.core.databinding.loader;
+
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.databinding.loader.DataTypeLoader;
+import org.apache.tuscany.spi.loader.InvalidValueException;
+import org.apache.tuscany.spi.loader.LoaderException;
+import org.apache.tuscany.spi.model.DataType;
+import org.apache.tuscany.spi.model.ModelObject;
+import org.easymock.EasyMock;
+
+/**
+ * Testcase for DataBindingLoader
+ */
+public class DataBindingLoaderTestCase extends TestCase {
+ private XMLStreamReader reader;
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public final void testLoad() throws LoaderException, XMLStreamException {
+ reader = EasyMock.createMock(XMLStreamReader.class);
+ // EasyMock.expect(reader.getEventType()).andReturn(XMLStreamConstants.START_ELEMENT);
+ EasyMock.expect(reader.hasNext()).andReturn(true).anyTimes();
+ EasyMock.expect(reader.getName()).andReturn(DataTypeLoader.DATA_BINDING);
+ EasyMock.expect(reader.getAttributeValue(null, "name")).andReturn("ABC");
+ EasyMock.expect(reader.next()).andReturn(XMLStreamConstants.END_ELEMENT);
+ EasyMock.replay(reader);
+
+ ModelObject mo = new DataTypeLoader(null).load(null, reader, null);
+ Assert.assertTrue(mo instanceof DataType);
+ Assert.assertEquals("ABC", ((DataType<?>)mo).getDataBinding());
+ EasyMock.verify(reader);
+
+ EasyMock.reset(reader);
+
+ // EasyMock.expect(reader.getEventType()).andReturn(XMLStreamConstants.START_ELEMENT);
+ EasyMock.expect(reader.hasNext()).andReturn(true).anyTimes();
+ EasyMock.expect(reader.getName()).andReturn(DataTypeLoader.DATA_BINDING);
+ EasyMock.expect(reader.getAttributeValue(null, "name")).andReturn(null);
+ EasyMock.expect(reader.next()).andReturn(XMLStreamConstants.END_ELEMENT);
+ EasyMock.replay(reader);
+ try {
+ mo = new DataTypeLoader(null).load(null, reader, null);
+ Assert.fail("InvalidValueException should have been thrown");
+ } catch (InvalidValueException e) {
+ Assert.assertTrue(true);
+ }
+ EasyMock.verify(reader);
+ }
+
+}
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/loader/DataBindingLoaderTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/loader/DataBindingLoaderTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/processor/DataBindingJavaInterfaceProcessorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/processor/DataBindingJavaInterfaceProcessorTestCase.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/processor/DataBindingJavaInterfaceProcessorTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/processor/DataBindingJavaInterfaceProcessorTestCase.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,82 @@
+/*
+ * 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.core.databinding.processor;
+
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
+
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.tuscany.api.annotation.DataType;
+import org.apache.tuscany.core.databinding.processor.DataBindingJavaInterfaceProcessor;
+import org.apache.tuscany.databinding.impl.DataBindingRegistryImpl;
+import org.apache.tuscany.spi.databinding.DataBindingRegistry;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
+import org.apache.tuscany.spi.idl.java.JavaServiceContract;
+import org.apache.tuscany.spi.model.Operation;
+import org.osoa.sca.annotations.Remotable;
+import org.w3c.dom.Node;
+
+/**
+ *
+ */
+public class DataBindingJavaInterfaceProcessorTestCase extends TestCase {
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ /**
+ * @throws InvalidServiceContractException
+ */
+ public final void testVisitInterface() throws InvalidServiceContractException {
+ DataBindingRegistry registry = new DataBindingRegistryImpl();
+ DataBindingJavaInterfaceProcessor processor = new DataBindingJavaInterfaceProcessor(registry);
+ JavaServiceContract<?> contract = new JavaServiceContract(MockInterface.class);
+ Map<String, Operation<Type>> operations = new HashMap<String, Operation<Type>>();
+ Operation<Type> operation = new Operation<Type>("call", null, null, null, false, null, NO_CONVERSATION);
+ Operation<Type> operation1 = new Operation<Type>("call1", null, null, null, false, null, NO_CONVERSATION);
+ operations.put("call", operation);
+ operations.put("call1", operation1);
+ contract.setOperations(operations);
+ contract.setRemotable(true);
+ processor.visitInterface(MockInterface.class, null, contract);
+ Assert.assertEquals("org.w3c.dom.Node", contract.getDataBinding());
+ Assert.assertEquals("org.w3c.dom.Node", contract.getOperations().get("call").getDataBinding());
+ Assert.assertEquals("xml:string", contract.getOperations().get("call1").getDataBinding());
+ }
+
+ @DataType(name = "org.w3c.dom.Node")
+ @Remotable
+ public static interface MockInterface {
+ Node call(Node msg);
+
+ @DataType(name = "xml:string")
+ String call1(String msg);
+ }
+
+}
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/processor/DataBindingJavaInterfaceProcessorTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/processor/DataBindingJavaInterfaceProcessorTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/transformers/IDLTransformerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/transformers/IDLTransformerTestCase.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/transformers/IDLTransformerTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/transformers/IDLTransformerTestCase.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,223 @@
+/*
+ * 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.core.databinding.transformers;
+
+import static org.apache.tuscany.spi.databinding.DataBinding.IDL_INPUT;
+import static org.apache.tuscany.spi.databinding.DataBinding.IDL_OUTPUT;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.databinding.transformers.Input2InputTransformer;
+import org.apache.tuscany.core.databinding.transformers.Output2OutputTransformer;
+import org.apache.tuscany.databinding.impl.DataBindingRegistryImpl;
+import org.apache.tuscany.databinding.impl.MediatorImpl;
+import org.apache.tuscany.databinding.impl.TransformationContextImpl;
+import org.apache.tuscany.databinding.impl.TransformerRegistryImpl;
+import org.apache.tuscany.databinding.javabeans.DOMNode2JavaBeanTransformer;
+import org.apache.tuscany.databinding.javabeans.JavaBean2DOMNodeTransformer;
+import org.apache.tuscany.databinding.xml.DOMDataBinding;
+import org.apache.tuscany.databinding.xml.Node2String;
+import org.apache.tuscany.databinding.xml.String2Node;
+import org.apache.tuscany.spi.databinding.DataBindingRegistry;
+import org.apache.tuscany.spi.databinding.TransformationContext;
+import org.apache.tuscany.spi.databinding.extension.DOMHelper;
+import org.apache.tuscany.spi.databinding.extension.SimpleTypeMapperExtension;
+import org.apache.tuscany.spi.model.DataType;
+import org.apache.tuscany.spi.model.ElementInfo;
+import org.apache.tuscany.spi.model.TypeInfo;
+import org.apache.tuscany.spi.model.WrapperInfo;
+import org.apache.tuscany.spi.model.XMLType;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class IDLTransformerTestCase extends TestCase {
+ private static final String IPO_XML =
+ "<?xml version=\"1.0\"?>" + "<order1"
+ + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+ + " xmlns:ipo=\"http://www.example.com/IPO\""
+ + " xsi:schemaLocation=\"http://www.example.com/IPO ipo.xsd\""
+ + " orderDate=\"1999-12-01\">"
+ + " <shipTo exportCode=\"1\" xsi:type=\"ipo:UKAddress\">"
+ + " <name>Helen Zoe</name>"
+ + " <street>47 Eden Street</street>"
+ + " <city>Cambridge</city>"
+ + " <postcode>CB1 1JR</postcode>"
+ + " </shipTo>"
+ + " <billTo xsi:type=\"ipo:USAddress\">"
+ + " <name>Robert Smith</name>"
+ + " <street>8 Oak Avenue</street>"
+ + " <city>Old Town</city>"
+ + " <state>PA</state>"
+ + " <zip>95819</zip>"
+ + " </billTo>"
+ + " <items>"
+ + " <item partNum=\"833-AA\">"
+ + " <productName>Lapis necklace</productName>"
+ + " <quantity>1</quantity>"
+ + " <USPrice>99.95</USPrice>"
+ + " <ipo:comment>Want this for the holidays</ipo:comment>"
+ + " <shipDate>1999-12-05</shipDate>"
+ + " </item>"
+ + " </items>"
+ + "</order1>";
+
+ private static final String URI_ORDER_XSD = "http://example.com/order.xsd";
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testTransform() throws Exception {
+ List<DataType<XMLType>> types0 = new ArrayList<DataType<XMLType>>();
+ DataType<XMLType> wrapperType =
+ new DataType<XMLType>(null, Object.class, new XMLType(new QName(URI_ORDER_XSD, "checkOrderStatus"), null));
+ types0.add(wrapperType);
+ DataType<List<DataType<XMLType>>> inputType0 =
+ new DataType<List<DataType<XMLType>>>(IDL_INPUT, Object[].class, types0);
+
+ List<DataType<XMLType>> types1 = new ArrayList<DataType<XMLType>>();
+ DataType<XMLType> customerIdType =
+ new DataType<XMLType>(null, Object.class, new XMLType(new QName(URI_ORDER_XSD, "customerId"), null));
+ DataType<XMLType> orderType =
+ new DataType<XMLType>(null, Object.class, new XMLType(new QName(URI_ORDER_XSD, "order"), null));
+ DataType<XMLType> flagType =
+ new DataType<XMLType>(null, Object.class, new XMLType(new QName(URI_ORDER_XSD, "flag"), null));
+ types1.add(customerIdType);
+ types1.add(orderType);
+ types1.add(flagType);
+
+ DataType<XMLType> statusType =
+ new DataType<XMLType>(null, Object.class, new XMLType(new QName(URI_ORDER_XSD, "status"), null));
+ DataType<XMLType> responseType =
+ new DataType<XMLType>(null, Object.class, new XMLType(new QName(URI_ORDER_XSD, "checkOrderStatusResponse"),
+ null));
+
+ org.apache.tuscany.spi.model.Operation<XMLType> op =
+ new org.apache.tuscany.spi.model.Operation<XMLType>("checkOrderStatus", inputType0, responseType, null);
+ op.setDataBinding(DOMDataBinding.NAME);
+
+ inputType0.setOperation(op);
+ op.setWrapperStyle(true);
+ ElementInfo inputElement =
+ new ElementInfo(new QName(URI_ORDER_XSD, "checkOrderStatus"), new TypeInfo(null, false, null));
+ wrapperType.setMetadata(ElementInfo.class.getName(), inputElement);
+
+ ElementInfo customerId =
+ new ElementInfo(new QName("", "customerId"), SimpleTypeMapperExtension.XSD_SIMPLE_TYPES.get("string"));
+ ElementInfo order =
+ new ElementInfo(new QName("", "order"), new TypeInfo(new QName(URI_ORDER_XSD), false, null));
+ ElementInfo flag =
+ new ElementInfo(new QName("", "flag"), SimpleTypeMapperExtension.XSD_SIMPLE_TYPES.get("int"));
+
+ customerIdType.setMetadata(ElementInfo.class.getName(), customerId);
+ orderType.setMetadata(ElementInfo.class.getName(), order);
+ flagType.setMetadata(ElementInfo.class.getName(), flag);
+
+ customerIdType.setOperation(op);
+ orderType.setOperation(op);
+ flagType.setOperation(op);
+
+ List<ElementInfo> inputElements = new ArrayList<ElementInfo>();
+ inputElements.add(customerId);
+ inputElements.add(order);
+ inputElements.add(flag);
+
+ ElementInfo statusElement =
+ new ElementInfo(new QName("", "status"), SimpleTypeMapperExtension.XSD_SIMPLE_TYPES.get("string"));
+
+ statusType.setMetadata(ElementInfo.class.getName(), statusElement);
+ statusType.setOperation(op);
+
+ List<ElementInfo> outputElements = new ArrayList<ElementInfo>();
+ outputElements.add(statusElement);
+
+ ElementInfo outputElement =
+ new ElementInfo(new QName(URI_ORDER_XSD, "checkOrderStatusResponse"), new TypeInfo(null, false, null));
+
+ responseType.setMetadata(ElementInfo.class.getName(), inputElement);
+ responseType.setOperation(op);
+
+ WrapperInfo wrapperInfo =
+ new WrapperInfo(DOMDataBinding.NAME, inputElement, outputElement, inputElements, outputElements);
+ op.setWrapper(wrapperInfo);
+ op.setDataBinding(DOMDataBinding.NAME);
+
+ MediatorImpl m = new MediatorImpl();
+ TransformerRegistryImpl tr = new TransformerRegistryImpl();
+ tr.registerTransformer(new String2Node());
+ tr.registerTransformer(new Node2String());
+ tr.registerTransformer(new DOMNode2JavaBeanTransformer());
+ tr.registerTransformer(new JavaBean2DOMNodeTransformer());
+ m.setTransformerRegistry(tr);
+ DataBindingRegistry dataBindingRegistry = new DataBindingRegistryImpl();
+ dataBindingRegistry.register(new DOMDataBinding());
+ m.setDataBindingRegistry(dataBindingRegistry);
+
+ Object[] source = new Object[] {"cust001", IPO_XML, Integer.valueOf(1)};
+ Input2InputTransformer t = new Input2InputTransformer();
+ t.setMediator(m);
+
+ TransformationContext context = new TransformationContextImpl();
+ List<DataType<Class>> types = new ArrayList<DataType<Class>>();
+ types.add(new DataType<Class>(Object.class.getName(), String.class, String.class));
+ types.add(new DataType<Class>("java.lang.String", String.class, String.class));
+ types.add(new DataType<Class>(Object.class.getName(), int.class, int.class));
+ DataType<List<DataType<Class>>> inputType1 =
+ new DataType<List<DataType<Class>>>(IDL_INPUT, Object[].class, types);
+ context.setSourceDataType(inputType1);
+ context.setTargetDataType(op.getInputType());
+ Object[] results = t.transform(source, context);
+ assertEquals(1, results.length);
+ assertTrue(results[0] instanceof Element);
+ Element element = (Element)results[0];
+ assertEquals("http://example.com/order.xsd", element.getNamespaceURI());
+ assertEquals("checkOrderStatus", element.getLocalName());
+
+ TransformationContext context1 = new TransformationContextImpl();
+ DataType<DataType> sourceType = new DataType<DataType>(IDL_OUTPUT, Object.class, op.getOutputType());
+ sourceType.setOperation(op.getOutputType().getOperation());
+
+ context1.setSourceDataType(sourceType);
+ DataType<DataType> targetType =
+ new DataType<DataType>(IDL_OUTPUT, Object.class, new DataType<Class>("java.lang.Object", String.class,
+ String.class));
+ context1.setTargetDataType(targetType);
+
+ Document factory = DOMHelper.newDocument();
+ Element responseElement =
+ factory.createElementNS("http://example.com/order.wsdl", "p:checkOrderStatusResponse");
+ Element status = factory.createElement("status");
+ responseElement.appendChild(status);
+ status.appendChild(factory.createTextNode("shipped"));
+ Output2OutputTransformer t2 = new Output2OutputTransformer();
+ t2.setMediator(m);
+ Object st = t2.transform(responseElement, context1);
+ assertEquals("shipped", st);
+
+ }
+
+}
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/transformers/IDLTransformerTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/transformers/IDLTransformerTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingInterceptorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingInterceptorTestCase.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingInterceptorTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingInterceptorTestCase.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,129 @@
+/*
+ * 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.core.databinding.wire;
+
+import static org.apache.tuscany.spi.model.Operation.NO_CONVERSATION;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.replay;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.databinding.wire.DataBindingInteceptor;
+import org.apache.tuscany.spi.component.Component;
+import org.apache.tuscany.spi.component.ComponentManager;
+import org.apache.tuscany.spi.databinding.DataBinding;
+import org.apache.tuscany.spi.databinding.Mediator;
+import org.apache.tuscany.spi.model.DataType;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.Wire;
+import org.easymock.EasyMock;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class DataBindingInterceptorTestCase extends TestCase {
+
+ @SuppressWarnings("unchecked")
+ public final void testInvoke() {
+ DataType<Class> type1 = new DataType<Class>("xml:string", String.class, String.class);
+ List<DataType<Class>> types1 = new ArrayList<DataType<Class>>();
+ types1.add(type1);
+ DataType<List<DataType<Class>>> inputType1 =
+ new DataType<List<DataType<Class>>>("xml:string", Object[].class, types1);
+
+ DataType<Class> type2 = new DataType<Class>("foo", Foo.class, Foo.class);
+ List<DataType<Class>> types2 = new ArrayList<DataType<Class>>();
+ types2.add(type2);
+ DataType<List<DataType<Class>>> inputType2 = new DataType<List<DataType<Class>>>("foo", Object[].class, types2);
+
+ Operation<Class> operation1 =
+ new Operation<Class>("call", inputType1, type1, null, false, "xml:string", NO_CONVERSATION);
+ Operation<Class> operation2 =
+ new Operation<Class>("call", inputType2, type2, null, false, "org.w3c.dom.Node", NO_CONVERSATION);
+
+ DataType<DataType> outputType1 =
+ new DataType<DataType>(DataBinding.IDL_OUTPUT, Object.class, operation1.getOutputType());
+ DataType<DataType> outputType2 =
+ new DataType<DataType>(DataBinding.IDL_OUTPUT, Object.class, operation2.getOutputType());
+
+ Component component = EasyMock.createMock(Component.class);
+ ComponentManager componentManager = createMock(ComponentManager.class);
+ expect(componentManager.getComponent(EasyMock.isA(URI.class))).andReturn(component).anyTimes();
+ Wire wire = EasyMock.createMock(Wire.class);
+ expect(wire.getSourceUri()).andReturn(URI.create("/componentA/ref1"));
+ expect(wire.getTargetUri()).andReturn(URI.create("/componentB/svc1"));
+ EasyMock.replay(wire, componentManager, component);
+
+ DataBindingInteceptor interceptor = new DataBindingInteceptor(componentManager, wire, operation1, operation2);
+ Mediator mediator = createMock(Mediator.class);
+ Object[] source = new Object[] {"<foo>bar</foo>"};
+ Foo foo = new Foo();
+ foo.bar = "bar";
+ Object[] target = new Object[] {foo};
+ expect(mediator.mediate(EasyMock.same(source), EasyMock.same(inputType1), EasyMock.same(inputType2), EasyMock
+ .isA(Map.class))).andReturn(target);
+ // expect(mediator.mediate(target[0], type2,
+ // type1)).andReturn(source[0]);
+ expect(mediator.mediate(EasyMock.same(target[0]), EasyMock.eq(outputType2), EasyMock.eq(outputType1), EasyMock
+ .isA(Map.class))).andReturn(source[0]);
+ replay(mediator);
+ interceptor.setMediator(mediator);
+ Message msg = createMock(Message.class);
+ msg.setBody(EasyMock.anyObject());
+ expectLastCall().anyTimes();
+ expect(msg.getBody()).andReturn(source).once().andReturn(target[0]).once().andReturn(source[0]);
+ expect(msg.isFault()).andReturn(false).once();
+ replay(msg);
+ Interceptor next = createMock(Interceptor.class);
+ expect(next.invoke(msg)).andReturn(msg);
+ replay(next);
+ interceptor.setNext(next);
+ interceptor.invoke(msg);
+ String result = (String)msg.getBody();
+ Assert.assertEquals(source[0], result);
+ EasyMock.verify(mediator, msg, next);
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ private static class Foo {
+ private String bar;
+
+ public String getBar() {
+ return bar;
+ }
+
+ public void setBar(String bar) {
+ this.bar = bar;
+ }
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingInterceptorTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingInterceptorTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorOptimizationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorOptimizationTestCase.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorOptimizationTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorOptimizationTestCase.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,102 @@
+/*
+ * 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.core.databinding.wire;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+
+import java.lang.reflect.Type;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.databinding.wire.DataBindingWirePostProcessor;
+import org.apache.tuscany.databinding.impl.MediatorImpl;
+import org.apache.tuscany.spi.component.Component;
+import org.apache.tuscany.spi.component.ComponentManager;
+import org.apache.tuscany.spi.databinding.Mediator;
+import org.apache.tuscany.spi.idl.java.JavaServiceContract;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.util.UriHelper;
+import org.apache.tuscany.spi.wire.InvocationChain;
+import org.apache.tuscany.spi.wire.Wire;
+import org.easymock.EasyMock;
+
+/**
+ * Verifies that data binding interceptor is not added to invocation chains when the data binding types are not set on
+ * service contracts
+ *
+ * @version $Rev$ $Date$
+ */
+public class DataBindingWirePostProcessorOptimizationTestCase extends TestCase {
+ private DataBindingWirePostProcessor processor;
+ private InvocationChain chain;
+ private Wire wire;
+
+ public void testNoInterceptorInterposedOutboundToInbound() {
+ processor.process(wire);
+ EasyMock.verify(chain);
+ EasyMock.verify(wire);
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ URI sourceUri = URI.create("/componentA/#ref1");
+ URI targetUri = URI.create("/componentB/#svc1");
+
+ // FIXME: [rfeng] We should use Mocks here
+ Mediator mediator = new MediatorImpl();
+ ComponentManager componentManager = createMock(ComponentManager.class);
+ Component component = createMock(Component.class);
+ expect(componentManager.getComponent(UriHelper.getDefragmentedName(sourceUri))).andReturn(component);
+ expect(componentManager.getComponent(UriHelper.getDefragmentedName(targetUri))).andReturn(component);
+
+ replay(component, componentManager);
+ processor = new DataBindingWirePostProcessor(componentManager, mediator);
+
+ ServiceContract<Type> contract = new JavaServiceContract(null);
+ Operation<Type> operation = new Operation<Type>("test", null, null, null);
+ operation.setServiceContract(contract);
+ Map<String, Operation<Type>> operations = new HashMap<String, Operation<Type>>();
+ operations.put("test", operation);
+ contract.setOperations(operations);
+ contract.setCallbackOperations(operations);
+
+ chain = createMock(InvocationChain.class);
+ replay(chain);
+ Map<Operation<?>, InvocationChain> chains = new HashMap<Operation<?>, InvocationChain>();
+ chains.put(operation, chain);
+
+ wire = EasyMock.createMock(Wire.class);
+ expect(wire.getBindingType()).andReturn(Wire.LOCAL_BINDING).anyTimes();
+ expect(wire.getSourceContract()).andReturn(contract).anyTimes();
+ expect(wire.getTargetContract()).andReturn(contract).anyTimes();
+ expect(wire.getInvocationChains()).andReturn(chains).anyTimes();
+ expect(wire.getSourceUri()).andReturn(sourceUri).anyTimes();
+ expect(wire.getTargetUri()).andReturn(targetUri).anyTimes();
+ expect(wire.getCallbackInvocationChains()).andReturn(chains).anyTimes();
+ replay(wire);
+
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorOptimizationTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorOptimizationTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorTestCase.java?view=auto&rev=520509
==============================================================================
--- incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorTestCase.java Tue Mar 20 11:26:09 2007
@@ -0,0 +1,223 @@
+/*
+ * 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.core.databinding.wire;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.core.databinding.processor.JavaInterfaceIntrospector;
+import org.apache.tuscany.core.databinding.wire.DataBindingWirePostProcessor;
+import org.apache.tuscany.databinding.xml.DOMDataBinding;
+import org.apache.tuscany.databinding.xml.StAXDataBinding;
+import org.apache.tuscany.spi.component.Component;
+import org.apache.tuscany.spi.component.ComponentManager;
+import org.apache.tuscany.spi.component.ReferenceBinding;
+import org.apache.tuscany.spi.databinding.Mediator;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.util.UriHelper;
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.InvocationChain;
+import org.apache.tuscany.spi.wire.Wire;
+import org.easymock.EasyMock;
+import org.osoa.sca.Constants;
+import org.osoa.sca.annotations.Remotable;
+import org.w3c.dom.Node;
+
+import com.ibm.rmi.corba.IsA;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class DataBindingWirePostProcessorTestCase extends TestCase {
+ private static final QName BINDING_WS = new QName(Constants.SCA_NS, "binding.ws");
+ private DataBindingWirePostProcessor processor;
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ /**
+ * Component.Reference --> Component.Service
+ */
+ public void testProcess1() throws Exception {
+ URI sourceUri = URI.create("/composite1/component1/#reference1");
+ URI targetUri = URI.create("/composite1/component2/#service1");
+
+ Mediator mediator = createMock(Mediator.class);
+ ComponentManager componentManager = createMock(ComponentManager.class);
+ Component component1 = createMock(Component.class);
+ // expect(component1.getReference("reference1")).andReturn(null);
+ Component component2 = createMock(Component.class);
+ // expect(component2.getService("service1")).andReturn(null);
+ expect(componentManager.getComponent(UriHelper.getDefragmentedName(sourceUri))).andReturn(component1).anyTimes();
+ expect(componentManager.getComponent(UriHelper.getDefragmentedName(targetUri))).andReturn(component2).anyTimes();
+ replay(mediator, componentManager, component1, component2);
+ DataBindingWirePostProcessor processor = new DataBindingWirePostProcessor(componentManager, mediator);
+
+ Wire wire = createWire(sourceUri, targetUri, Wire.LOCAL_BINDING);
+ processor.process(wire);
+
+ verify(mediator, componentManager, component1, component2);
+ }
+
+ /**
+ * Component.Reference --> Composite.Reference
+ */
+ public void testProcess2() throws Exception {
+ ReferenceBinding referenceBinding = createMock(ReferenceBinding.class);
+ Component composite = createMock(Component.class);
+ expect(referenceBinding.getUri()).andReturn(URI.create("/compositeA/#ref1"));
+
+ URI sourceUri = URI.create("/composite1/component1/#reference1");
+ URI targetUri = URI.create("/composite1/#reference1");
+ Mediator mediator = createMock(Mediator.class);
+ ComponentManager componentManager = createMock(ComponentManager.class);
+ Component component1 = createMock(Component.class);
+ expect(component1.getReference("reference1")).andReturn(null);
+ Component component2 = createMock(Component.class);
+ expect(component2.getReference("reference1")).andReturn(null);
+ expect(componentManager.getComponent(UriHelper.getDefragmentedName(sourceUri))).andReturn(component1).anyTimes();
+ expect(componentManager.getComponent(UriHelper.getDefragmentedName(targetUri))).andReturn(component2).anyTimes();
+ replay(mediator, componentManager, component1, component2);
+ DataBindingWirePostProcessor processor = new DataBindingWirePostProcessor(componentManager, mediator);
+
+ Wire wire = createWire(sourceUri, targetUri, BINDING_WS);
+ processor.process(wire);
+ }
+
+ /**
+ * Composite.Service --> Component Service
+ */
+ public void testProcess3() throws Exception {
+ URI sourceUri = URI.create("/composite1/#service1");
+ URI targetUri = URI.create("/composite1/component1/#service1");
+
+ Mediator mediator = createMock(Mediator.class);
+ ComponentManager componentManager = createMock(ComponentManager.class);
+ Component component1 = createMock(Component.class);
+ expect(component1.getService("service1")).andReturn(null);
+ Component component2 = createMock(Component.class);
+ expect(component2.getService("service1")).andReturn(null);
+ expect(componentManager.getComponent(UriHelper.getDefragmentedName(sourceUri))).andReturn(component1).anyTimes();
+ expect(componentManager.getComponent(UriHelper.getDefragmentedName(targetUri))).andReturn(component2).anyTimes();
+ replay(mediator, componentManager, component1, component2);
+ DataBindingWirePostProcessor processor = new DataBindingWirePostProcessor(componentManager, mediator);
+
+ Wire wire = createWire(sourceUri, targetUri, BINDING_WS);
+ processor.process(wire);
+ }
+
+ private Wire createWire(URI sourceUri, URI targetUri, QName bindingType) throws InvalidServiceContractException {
+ ServiceContract<?> contract1 = new JavaInterfaceIntrospector().introspect(TestInterface1.class);
+ contract1.setDataBinding(DOMDataBinding.NAME);
+ ServiceContract<?> contract2 = new JavaInterfaceIntrospector().introspect(TestInterface2.class);
+ contract2.setDataBinding(StAXDataBinding.NAME);
+ Map<Operation<?>, InvocationChain> chains = new HashMap<Operation<?>, InvocationChain>();
+ for (Operation<?> op : contract1.getOperations().values()) {
+ InvocationChain chain = createMock(InvocationChain.class);
+ chain.addInterceptor(EasyMock.anyInt(), EasyMock.isA(Interceptor.class));
+ replay(chain);
+ chains.put(op, chain);
+ }
+ Map<Operation<?>, InvocationChain> callbackChains = new HashMap<Operation<?>, InvocationChain>();
+ for (Operation<?> op : contract1.getCallbackOperations().values()) {
+ InvocationChain chain = createMock(InvocationChain.class);
+ chain.addInterceptor(EasyMock.anyInt(), EasyMock.isA(Interceptor.class));
+ replay(chain);
+ callbackChains.put(op, chain);
+ }
+ Wire wire = EasyMock.createMock(Wire.class);
+ expect(wire.getBindingType()).andReturn(bindingType).anyTimes();
+ expect(wire.getSourceContract()).andReturn(contract1).anyTimes();
+ expect(wire.getTargetContract()).andReturn(contract2).anyTimes();
+ expect(wire.getInvocationChains()).andReturn(chains);
+ expect(wire.getSourceUri()).andReturn(sourceUri).anyTimes();
+ expect(wire.getTargetUri()).andReturn(targetUri).anyTimes();
+ expect(wire.getCallbackInvocationChains()).andReturn(callbackChains).anyTimes();
+ replay(wire);
+ return wire;
+ }
+
+ @Remotable
+ private static interface TestInterface1 {
+ String test1(String str);
+
+ Node test2(Node node);
+
+ void test3(int i, String s) throws MyException;
+ }
+
+ @Remotable
+ private static interface TestInterface2 {
+ String test1(String str);
+
+ XMLStreamReader test2(XMLStreamReader reader);
+
+ void test3(int i, String s) throws MyException;
+ }
+
+ private static class MyException extends Exception {
+ private static final long serialVersionUID = 7203411584939696390L;
+
+ public MyException() {
+ super();
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public MyException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * @param message
+ */
+ public MyException(String message) {
+ super(message);
+ }
+
+ /**
+ * @param cause
+ */
+ public MyException(Throwable cause) {
+ super(cause);
+ }
+
+ }
+
+}
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/databinding/src/test/java/org/apache/tuscany/core/databinding/wire/DataBindingWirePostProcessorTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org