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 2006/09/13 06:39:41 UTC
svn commit: r442838 - in /incubator/tuscany/java:
samples/sca/echo.databinding/
samples/sca/echo.databinding/src/main/java/echo/
samples/sca/echo.databinding/src/test/java/echo/
samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/ samples/...
Author: rfeng
Date: Tue Sep 12 21:39:40 2006
New Revision: 442838
URL: http://svn.apache.org/viewvc?view=rev&rev=442838
Log:
Refactor the wrapping/unwrapping logic to WrapperHandler and DataBinding interface
Use the generic Input2InputTransformer and Output2OutputTransformer to perform payload-level transformations
Bring up the echo-databinding to support AXIOM-based wrapping/unwrapping
Added:
incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java (with props)
Removed:
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementInputTransformer.java
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementOutputTransformer.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/JavaParametersTransformer.java
Modified:
incubator/tuscany/java/samples/sca/echo.databinding/pom.xml
incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoInvoker.java
incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoReference.java
incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/ComponentBImpl.java
incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/DataBindingIntegrationTestCase.java
incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding-axiom.scdl
incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding.scdl
incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/wsdl/echo.wsdl
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl
incubator/tuscany/java/sca/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementWrapperTransformerTestCase.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/WrapperHandler.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java
incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl
incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java
incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java
Modified: incubator/tuscany/java/samples/sca/echo.databinding/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/pom.xml?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/pom.xml (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/pom.xml Tue Sep 12 21:39:40 2006
@@ -63,7 +63,7 @@
<groupId>org.apache.tuscany.idl</groupId>
<artifactId>wsdl</artifactId>
<version>${pom.version}</version>
- <scope>test</scope>
+ <scope>compile</scope>
</dependency>
<dependency>
Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoInvoker.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoInvoker.java (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoInvoker.java Tue Sep 12 21:39:40 2006
@@ -45,7 +45,9 @@
public Object invokeTarget(final Object payload) throws InvocationTargetException {
// echo back the result, a real binding would invoke some API for flowing the request
- return ((Object[])payload)[0];
+ Object result = ((Object[]) payload)[0];
+ System.out.println("Echo: " + result);
+ return result;
}
public Message invoke(Message msg) throws InvocationRuntimeException {
Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoReference.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoReference.java (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/main/java/echo/EchoReference.java Tue Sep 12 21:39:40 2006
@@ -18,6 +18,8 @@
*/
package echo;
+import org.apache.axiom.om.OMElement;
+import org.apache.tuscany.idl.wsdl.WSDLOperation;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.extension.ReferenceExtension;
import org.apache.tuscany.spi.model.Operation;
@@ -30,11 +32,20 @@
*/
public class EchoReference extends ReferenceExtension {
+ private static final String OM_DATA_BINDING = OMElement.class.getName();
+
public EchoReference(String name, Class<?> interfaze, CompositeComponent parent, WireService wireService) {
super(name, interfaze, parent, wireService);
}
+ @SuppressWarnings("unchecked")
public TargetInvoker createTargetInvoker(ServiceContract contract, Operation operation) {
+ // HACK to set the databinding
+ operation.setDataBinding(OM_DATA_BINDING);
+ WSDLOperation op = (WSDLOperation) operation.getMetaData().get(WSDLOperation.class.getName());
+ if (op != null) {
+ op.setDataBinding(OM_DATA_BINDING);
+ }
return new EchoInvoker();
}
}
Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/ComponentBImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/ComponentBImpl.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/ComponentBImpl.java (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/ComponentBImpl.java Tue Sep 12 21:39:40 2006
@@ -49,9 +49,9 @@
public XMLStreamReader call1(XMLStreamReader msg) {
String request = msg + " [" + msg.getClass().getName() + "]";
System.out.println("ComponentB --> Received message: " + request);
- XMLStreamReader ret = (XMLStreamReader) echoReference.echo(msg);
- String response = ret + " [" + ret.getClass().getName() + "]";
+// XMLStreamReader ret = (XMLStreamReader) echoReference.echo(msg);
+ String response = request;
System.out.println("ComponentB --> Returned message: " + response);
- return ret;
+ return msg;
}
}
Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/DataBindingIntegrationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/DataBindingIntegrationTestCase.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/DataBindingIntegrationTestCase.java (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/test/java/echo/DataBindingIntegrationTestCase.java Tue Sep 12 21:39:40 2006
@@ -31,8 +31,8 @@
private Interface1 componentA;
public void testTransform() {
- componentA.call("<foo>123</foo>");
- componentA.call1("<foo>123</foo>");
+ componentA.call("<message><foo>123</foo></message>");
+ componentA.call1("<message><foo>123</foo></message>");
}
protected void setUp() throws Exception {
Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding-axiom.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding-axiom.scdl?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding-axiom.scdl (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding-axiom.scdl Tue Sep 12 21:39:40 2006
@@ -22,10 +22,6 @@
</component>
<!-- Transformers -->
- <component name="transformer.ObjectArray2OM">
- <system:implementation.system class="org.apache.tuscany.databinding.axiom.OMElementInputTransformer" />
- </component>
-
<component name="transformer.XMLStreamReader2OMElement">
<system:implementation.system class="org.apache.tuscany.databinding.axiom.XMLStreamReader2OMElement" />
</component>
Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding.scdl?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding.scdl (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/META-INF/tuscany/test-databinding.scdl Tue Sep 12 21:39:40 2006
@@ -61,8 +61,12 @@
<system:implementation.system class="org.apache.tuscany.databinding.xml.String2Node" />
</component>
- <component name="transformer.JavaParametersTransformer">
- <system:implementation.system class="org.apache.tuscany.databinding.impl.JavaParametersTransformer" />
+ <component name="transformer.Input2InputTransformer">
+ <system:implementation.system class="org.apache.tuscany.databinding.idl.Input2InputTransformer" />
</component>
+ <component name="transformer.Output2OutputTransformer">
+ <system:implementation.system class="org.apache.tuscany.databinding.idl.Output2OutputTransformer" />
+ </component>
+
</composite>
Modified: incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/wsdl/echo.wsdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/wsdl/echo.wsdl?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/wsdl/echo.wsdl (original)
+++ incubator/tuscany/java/samples/sca/echo.databinding/src/test/resources/wsdl/echo.wsdl Tue Sep 12 21:39:40 2006
@@ -1,21 +1,26 @@
<?xml version="1.0"?>
-<definitions name="StockQuote" targetNamespace="http://example.com/echo.wsdl"
- xmlns:tns="http://example.com/echo.wsdl" xmlns:xsd1="http://example.com/echo.xsd"
- xmlns="http://schemas.xmlsoap.org/wsdl/">
+<definitions name="StockQuote" targetNamespace="http://example.com/echo.wsdl" xmlns:tns="http://example.com/echo.wsdl"
+ xmlns:xsd1="http://example.com/echo.xsd" xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
- <schema targetNamespace="http://example.com/echo.xsd" xmlns="http://www.w3.org/2001/XMLSchema">
+ <schema targetNamespace="http://example.com/echo.xsd" xmlns:tns="http://example.com/echo.xsd"
+ xmlns="http://www.w3.org/2001/XMLSchema">
+ <complexType name="messageType">
+ <sequence>
+ <element name="foo" type="string"></element>
+ </sequence>
+ </complexType>
<element name="echo">
<complexType>
<sequence>
- <element name="message" type="string" />
+ <element name="message" type="tns:messageType" />
</sequence>
</complexType>
</element>
<element name="echoResponse">
<complexType>
<sequence>
- <element name="message" type="string" />
+ <element name="message" type="tns:messageType" />
</sequence>
</complexType>
</element>
Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/AxiomDataBinding.java Tue Sep 12 21:39:40 2006
@@ -19,9 +19,10 @@
package org.apache.tuscany.databinding.axiom;
-import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.OMElement;
import org.apache.tuscany.databinding.DataBinding;
import org.apache.tuscany.databinding.extension.DataBindingExtension;
+import org.apache.tuscany.databinding.idl.WrapperHandler;
import org.osoa.sca.annotations.Service;
/**
@@ -31,7 +32,15 @@
public class AxiomDataBinding extends DataBindingExtension {
public AxiomDataBinding() {
- super(OMNode.class);
+ super(OMElement.class);
+ }
+
+ /**
+ * @see org.apache.tuscany.databinding.extension.DataBindingExtension#getWrapperHandler()
+ */
+ @Override
+ public WrapperHandler getWrapperHandler() {
+ return new OMElementWrapperHandler();
}
}
Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/OMElementWrapperHandler.java Tue Sep 12 21:39:40 2006
@@ -41,6 +41,7 @@
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
+import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.databinding.idl.WrapperHandler;
import org.apache.ws.commons.schema.XmlSchemaElement;
import org.apache.ws.commons.schema.XmlSchemaSimpleType;
@@ -58,7 +59,7 @@
this.factory = OMAbstractFactory.getOMFactory();
}
- public OMElement create(XmlSchemaElement element) {
+ public OMElement create(XmlSchemaElement element, TransformationContext context) {
OMElement wrapper = factory.createOMElement(element.getQName(), null);
return wrapper;
}
Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/resources/META-INF/sca/databinding-axiom.scdl Tue Sep 12 21:39:40 2006
@@ -21,11 +21,6 @@
<system:implementation.system class="org.apache.tuscany.databinding.axiom.AxiomDataBinding" />
</component>
- <!-- Transformers -->
- <component name="transformer.ObjectArray2OM">
- <system:implementation.system class="org.apache.tuscany.databinding.axiom.OMElementInputTransformer" />
- </component>
-
<component name="transformer.XMLStreamReader2OMElement">
<system:implementation.system class="org.apache.tuscany.databinding.axiom.XMLStreamReader2OMElement" />
</component>
Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementWrapperTransformerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementWrapperTransformerTestCase.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementWrapperTransformerTestCase.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementWrapperTransformerTestCase.java Tue Sep 12 21:39:40 2006
@@ -27,10 +27,16 @@
import javax.wsdl.PortType;
import javax.xml.namespace.QName;
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
+import org.apache.tuscany.databinding.DataBindingRegistry;
import org.apache.tuscany.databinding.TransformationContext;
+import org.apache.tuscany.databinding.idl.Input2InputTransformer;
+import org.apache.tuscany.databinding.idl.Output2OutputTransformer;
import org.apache.tuscany.databinding.impl.DataBindingRegistryImpl;
import org.apache.tuscany.databinding.impl.MediatorImpl;
import org.apache.tuscany.databinding.impl.TransformationContextImpl;
@@ -40,9 +46,6 @@
import org.apache.tuscany.idl.wsdl.XMLSchemaRegistryImpl;
import org.apache.tuscany.spi.model.DataType;
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
public class OMElementWrapperTransformerTestCase extends TestCase {
private static final String IPO_XML =
"<?xml version=\"1.0\"?>" + "<order1" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
@@ -79,14 +82,18 @@
WSDLOperation op = new WSDLOperation(operation, OMElement.class.getName(), registry.getSchemaRegistry());
Assert.assertTrue(op.isWrapperStyle());
- Object[] source = new Object[] { "cust001", IPO_XML, Integer.valueOf(1) };
- OMElementInputTransformer t = new OMElementInputTransformer();
MediatorImpl m = new MediatorImpl();
TransformerRegistryImpl tr = new TransformerRegistryImpl();
tr.registerTransformer(new String2OMElement());
tr.registerTransformer(new OMElement2String());
m.setTransformerRegistry(tr);
- m.setDataBindingRegistry(new DataBindingRegistryImpl());
+ DataBindingRegistry dataBindingRegistry = new DataBindingRegistryImpl();
+ dataBindingRegistry.register(new AxiomDataBinding());
+ m.setDataBindingRegistry(dataBindingRegistry);
+
+ Object[] source = new Object[] { "cust001", IPO_XML, Integer.valueOf(1) };
+ Input2InputTransformer t = new Input2InputTransformer();
+ t.setDataBindingRegistry(dataBindingRegistry);
t.setMediator(m);
TransformationContext context = new TransformationContextImpl();
@@ -112,7 +119,8 @@
factory.createOMElement(new QName("http://example.com/order.wsdl", "checkOrderStatusResponse"), null);
OMElement status = factory.createOMElement(new QName(null, "status"), responseElement);
factory.createOMText(status, "shipped");
- OMElementOutputTransformer t2 = new OMElementOutputTransformer();
+ Output2OutputTransformer t2 = new Output2OutputTransformer();
+ t2.setDataBindingRegistry(dataBindingRegistry);
Object st = t2.transform(responseElement, context1);
Assert.assertEquals("shipped", st);
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/DataBinding.java Tue Sep 12 21:39:40 2006
@@ -19,6 +19,7 @@
package org.apache.tuscany.databinding;
+import org.apache.tuscany.databinding.idl.WrapperHandler;
import org.apache.tuscany.spi.model.DataType;
/**
@@ -47,4 +48,10 @@
* @return The DataType or null if the java type is not supported by this databinding
*/
DataType introspect(Object value);
+
+ /**
+ * Provide a WrapperHandler for this databinding
+ * @return A wrapper handler which can handle wrapping/wrapping for this databinding
+ */
+ WrapperHandler getWrapperHandler();
}
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/extension/DataBindingExtension.java Tue Sep 12 21:39:40 2006
@@ -19,6 +19,7 @@
import org.apache.tuscany.databinding.DataBinding;
import org.apache.tuscany.databinding.DataBindingRegistry;
+import org.apache.tuscany.databinding.idl.WrapperHandler;
import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.model.DataType;
import org.osoa.sca.annotations.Init;
@@ -86,5 +87,12 @@
public final String getName() {
return name;
+ }
+
+ /**
+ * @see org.apache.tuscany.databinding.DataBinding#getWrapperHandler()
+ */
+ public WrapperHandler getWrapperHandler() {
+ return null;
}
}
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Input2InputTransformer.java Tue Sep 12 21:39:40 2006
@@ -23,13 +23,17 @@
import javax.xml.namespace.QName;
+import org.apache.tuscany.databinding.DataBinding;
+import org.apache.tuscany.databinding.DataBindingRegistry;
import org.apache.tuscany.databinding.Mediator;
import org.apache.tuscany.databinding.PullTransformer;
import org.apache.tuscany.databinding.TransformationContext;
+import org.apache.tuscany.databinding.TransformationException;
import org.apache.tuscany.databinding.Transformer;
import org.apache.tuscany.databinding.extension.TransformerExtension;
import org.apache.tuscany.idl.wsdl.WSDLOperation;
import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
import org.apache.tuscany.spi.model.DataType;
import org.apache.ws.commons.schema.XmlSchemaElement;
import org.apache.ws.commons.schema.XmlSchemaSimpleType;
@@ -40,21 +44,27 @@
* This is a special transformer to transform the input from one IDL to the other one
*/
@Service(Transformer.class)
-public abstract class Input2InputTransformer<T> extends TransformerExtension<Object[], Object[]> implements
+public class Input2InputTransformer extends TransformerExtension<Object[], Object[]> implements
PullTransformer<Object[], Object[]> {
- protected WrapperHandler<T> wrapperHandler;
-
+ private static final String IDL_INPUT = "idl:input";
+ protected DataBindingRegistry dataBindingRegistry;
protected Mediator mediator;
- /**
- * @param wrapperHandler
- */
- protected Input2InputTransformer(WrapperHandler<T> wrapperHandler) {
+ public Input2InputTransformer() {
super();
- this.wrapperHandler = wrapperHandler;
}
+ @Override
+ public String getSourceBinding() {
+ return IDL_INPUT;
+ }
+
+ @Override
+ public String getTargetBinding() {
+ return IDL_INPUT;
+ }
+
/**
* @param mediator the mediator to set
*/
@@ -64,6 +74,15 @@
}
/**
+ * @param dataBindingRegistry the dataBindingRegistry to set
+ */
+ @Autowire
+ public void setDataBindingRegistry(DataBindingRegistry dataBindingRegistry) {
+ this.dataBindingRegistry = dataBindingRegistry;
+ }
+
+
+ /**
* @see org.apache.tuscany.databinding.extension.TransformerExtension#getSourceType()
*/
@Override
@@ -91,15 +110,24 @@
DataType<List<DataType<?>>> sourceType = context.getSourceDataType();
WSDLOperation sourceOp = (WSDLOperation) sourceType.getMetadata(WSDLOperation.class.getName());
boolean sourceWrapped = (sourceOp != null && sourceOp.isWrapperStyle());
+
+ WrapperHandler sourceWrapperHandler = null;
+ if(sourceWrapped) {
+ sourceWrapperHandler = getWapperHandler(sourceOp);
+ }
DataType<List<DataType<QName>>> targetType = context.getTargetDataType();
WSDLOperation targetOp = (WSDLOperation) targetType.getMetadata(WSDLOperation.class.getName());
boolean targetWrapped = (targetOp != null && targetOp.isWrapperStyle());
+ WrapperHandler targetWrapperHandler = null;
+ if(targetWrapped) {
+ targetWrapperHandler = getWapperHandler(targetOp);
+ }
if ((!sourceWrapped) && targetWrapped) {
// Unwrapped --> Wrapped
WSDLOperation.Wrapper wrapper = targetOp.getWrapper();
- T targetWrapper = wrapperHandler.create(wrapper.getInputWrapperElement());
+ Object targetWrapper = targetWrapperHandler.create(wrapper.getInputWrapperElement(), context);
if (source == null) {
return new Object[] { targetWrapper };
}
@@ -113,30 +141,30 @@
Object child = source[i];
if (!isSimpleType) {
child = mediator.mediate(source[i], sourceType.getLogical().get(i), argType);
- wrapperHandler.setChild(targetWrapper, i, argElement, child);
+ targetWrapperHandler.setChild(targetWrapper, i, argElement, child);
} else {
- wrapperHandler.setChild(targetWrapper, i, argElement, child);
+ targetWrapperHandler.setChild(targetWrapper, i, argElement, child);
}
}
return new Object[] { targetWrapper };
} else if (sourceWrapped && (!targetWrapped)) {
// Wrapped to Unwrapped
- T sourceWrapper = (T) source[0];
+ Object sourceWrapper = source[0];
List<XmlSchemaElement> childElements = sourceOp.getWrapper().getInputChildElements();
Object[] newArgs = new Object[childElements.size()];
for (int i = 0; i < childElements.size(); i++) {
XmlSchemaElement childElement = childElements.get(i);
if (childElement.getSchemaType() instanceof XmlSchemaSimpleType) {
- Object child = wrapperHandler.getChild(sourceWrapper, i, childElement);
- newArgs[i] = child;
+ newArgs[i] = sourceWrapperHandler.getChild(sourceWrapper, i, childElement);
} else {
- Object child = wrapperHandler.getChild(sourceWrapper, i, childElement);
+ Object child = sourceWrapperHandler.getChild(sourceWrapper, i, childElement);
DataType<QName> childType = sourceOp.getWrapper().getUnwrappedInputType().getLogical().get(i);
newArgs[i] = mediator.mediate(child, childType, targetType.getLogical().get(i));
}
}
return newArgs;
} 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 =
@@ -145,6 +173,21 @@
}
return newArgs;
}
+ }
+
+ private WrapperHandler getWapperHandler(WSDLOperation sourceOp) {
+ String dataBindingId;
+ try {
+ dataBindingId = sourceOp.getOperation().getDataBinding();
+ } catch (InvalidServiceContractException e) {
+ throw new TransformationException(e);
+ }
+ DataBinding dataBinding = dataBindingRegistry.getDataBinding(dataBindingId);
+ WrapperHandler wrapperHandler = dataBinding==null? null : dataBinding.getWrapperHandler();
+ if (wrapperHandler == null) {
+ throw new TransformationException("No wrapper handler is provided for databinding: "+dataBindingId);
+ }
+ return wrapperHandler;
}
}
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/Output2OutputTransformer.java Tue Sep 12 21:39:40 2006
@@ -23,6 +23,8 @@
import javax.xml.namespace.QName;
+import org.apache.tuscany.databinding.DataBinding;
+import org.apache.tuscany.databinding.DataBindingRegistry;
import org.apache.tuscany.databinding.Mediator;
import org.apache.tuscany.databinding.PullTransformer;
import org.apache.tuscany.databinding.TransformationContext;
@@ -31,6 +33,7 @@
import org.apache.tuscany.databinding.extension.TransformerExtension;
import org.apache.tuscany.idl.wsdl.WSDLOperation;
import org.apache.tuscany.spi.annotation.Autowire;
+import org.apache.tuscany.spi.idl.InvalidServiceContractException;
import org.apache.tuscany.spi.model.DataType;
import org.apache.ws.commons.schema.XmlSchemaElement;
import org.apache.ws.commons.schema.XmlSchemaSimpleType;
@@ -41,18 +44,17 @@
* This is a special transformer to transform the output from one IDL to the other one
*/
@Service(Transformer.class)
-public abstract class Output2OutputTransformer<T> extends TransformerExtension<Object, Object> implements
+public class Output2OutputTransformer extends TransformerExtension<Object, Object> implements
PullTransformer<Object, Object> {
-
- protected WrapperHandler<T> wrapperHandler;
+ private static final String IDL_OUTPUT = "idl:output";
+ protected DataBindingRegistry dataBindingRegistry;
protected Mediator mediator;
/**
* @param wrapperHandler
*/
- protected Output2OutputTransformer(WrapperHandler<T> wrapperHandler) {
+ public Output2OutputTransformer() {
super();
- this.wrapperHandler = wrapperHandler;
}
/**
@@ -64,6 +66,24 @@
}
/**
+ * @param dataBindingRegistry the dataBindingRegistry to set
+ */
+ @Autowire
+ public void setDataBindingRegistry(DataBindingRegistry dataBindingRegistry) {
+ this.dataBindingRegistry = dataBindingRegistry;
+ }
+
+ @Override
+ public String getSourceBinding() {
+ return IDL_OUTPUT;
+ }
+
+ @Override
+ public String getTargetBinding() {
+ return IDL_OUTPUT;
+ }
+
+ /**
* @see org.apache.tuscany.databinding.extension.TransformerExtension#getSourceType()
*/
@Override
@@ -85,22 +105,46 @@
public int getWeight() {
return 10;
}
+
+ private WrapperHandler getWapperHandler(WSDLOperation sourceOp) {
+ String dataBindingId;
+ try {
+ dataBindingId = sourceOp.getOperation().getDataBinding();
+ } catch (InvalidServiceContractException e) {
+ throw new TransformationException(e);
+ }
+ DataBinding dataBinding = dataBindingRegistry.getDataBinding(dataBindingId);
+ WrapperHandler wrapperHandler = dataBinding==null? null : dataBinding.getWrapperHandler();
+ if (wrapperHandler == null) {
+ throw new TransformationException("No wrapper handler is provided for databinding: "+dataBindingId);
+ }
+ return wrapperHandler;
+ }
+
@SuppressWarnings("unchecked")
public Object transform(Object response, TransformationContext context) {
try {
- DataType<?> sourceType = context.getSourceDataType();
+ DataType<DataType> sourceType = context.getSourceDataType();
WSDLOperation sourceOp = (WSDLOperation) sourceType.getMetadata(WSDLOperation.class.getName());
boolean sourceWrapped = (sourceOp != null && sourceOp.isWrapperStyle());
+ WrapperHandler sourceWrapperHandler = null;
+ if(sourceWrapped) {
+ sourceWrapperHandler = getWapperHandler(sourceOp);
+ }
- DataType<?> targetType = context.getTargetDataType();
+ DataType<DataType> targetType = context.getTargetDataType();
WSDLOperation targetOp = (WSDLOperation) targetType.getMetadata(WSDLOperation.class.getName());
boolean targetWrapped = (targetOp != null && targetOp.isWrapperStyle());
+ WrapperHandler targetWrapperHandler = null;
+ if(targetWrapped) {
+ targetWrapperHandler = getWapperHandler(targetOp);
+ }
if ((!sourceWrapped) && targetWrapped) {
// Unwrapped --> Wrapped
WSDLOperation.Wrapper wrapper = targetOp.getWrapper();
- T targetWrapper = wrapperHandler.create(wrapper.getOutputWrapperElement());
+ Object targetWrapper = targetWrapperHandler.create(wrapper.getOutputWrapperElement(), context);
if (response == null) {
return targetWrapper;
}
@@ -111,26 +155,27 @@
boolean isSimpleType = (argXSDType instanceof XmlSchemaSimpleType);
Object child = response;
if (!isSimpleType) {
- child = mediator.mediate(response, sourceType, argType);
- wrapperHandler.setChild(targetWrapper, 0, argElement, child);
+ child = mediator.mediate(response, sourceType.getLogical(), argType);
+ targetWrapperHandler.setChild(targetWrapper, 0, argElement, child);
} else {
- wrapperHandler.setChild(targetWrapper, 0, argElement, child);
+ targetWrapperHandler.setChild(targetWrapper, 0, argElement, child);
}
return targetWrapper;
} else if (sourceWrapped && (!targetWrapped)) {
// Wrapped to Unwrapped
- T sourceWrapper = (T) response;
+ Object sourceWrapper = response;
List<XmlSchemaElement> childElements = sourceOp.getWrapper().getOutputChildElements();
XmlSchemaElement childElement = childElements.get(0);
if (childElement.getSchemaType() instanceof XmlSchemaSimpleType) {
- return wrapperHandler.getChild(sourceWrapper, 0, childElement);
+ return sourceWrapperHandler.getChild(sourceWrapper, 0, childElement);
} else {
- Object child = wrapperHandler.getChild(sourceWrapper, 0, childElement);
+ Object child = sourceWrapperHandler.getChild(sourceWrapper, 0, childElement);
DataType<?> childType = sourceOp.getWrapper().getUnwrappedOutputType();
- return mediator.mediate(child, childType, targetType);
+ return mediator.mediate(child, childType, targetType.getLogical());
}
} else {
- return mediator.mediate(response, sourceType, targetType);
+ // FIXME: Do we want to handle wrapped to wrapped?
+ return mediator.mediate(response, sourceType.getLogical(), targetType.getLogical());
}
} catch (Exception e) {
throw new TransformationException(e);
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/WrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/WrapperHandler.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/WrapperHandler.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/idl/WrapperHandler.java Tue Sep 12 21:39:40 2006
@@ -19,6 +19,7 @@
package org.apache.tuscany.databinding.idl;
+import org.apache.tuscany.databinding.TransformationContext;
import org.apache.ws.commons.schema.XmlSchemaElement;
/**
@@ -29,9 +30,10 @@
* Create a wrapper element
*
* @param element The XSD element
- * @return
+ * @param context The transformation context
+ * @return An object representing the wrapper element
*/
- T create(XmlSchemaElement element);
+ T create(XmlSchemaElement element, TransformationContext context);
/**
* Set child element for the wrapper
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingInteceptor.java Tue Sep 12 21:39:40 2006
@@ -20,6 +20,7 @@
package org.apache.tuscany.databinding.impl;
import org.apache.tuscany.databinding.Mediator;
+import org.apache.tuscany.idl.wsdl.WSDLOperation;
import org.apache.tuscany.spi.model.DataType;
import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.wire.Interceptor;
@@ -72,7 +73,13 @@
// We need to figure out what fault type it is and then transform it back the source fault type
throw new InvocationRuntimeException((Throwable) result);
} else if (result != null) {
- result = transform(result, targetOperation.getOutputType(), sourceOperation.getOutputType());
+ // FIXME: Should we fix the Operation model so that getOutputType returns DataType<DataType<T>>?
+ DataType<DataType> targetType = new DataType<DataType>("idl:output", Object.class, targetOperation.getOutputType());
+ targetType.setMetadata(WSDLOperation.class.getName(), targetOperation.getOutputType().getMetadata(WSDLOperation.class.getName()));
+ DataType<DataType> sourceType = new DataType<DataType>("idl:output", Object.class, sourceOperation.getOutputType());
+ sourceType.setMetadata(WSDLOperation.class.getName(), sourceOperation.getOutputType().getMetadata(WSDLOperation.class.getName()));
+
+ result = transform(result, targetType, sourceType);
resultMsg.setBody(result);
}
return resultMsg;
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/xml/Node2String.java Tue Sep 12 21:39:40 2006
@@ -18,6 +18,8 @@
*/
package org.apache.tuscany.databinding.xml;
+import java.io.StringWriter;
+
import org.apache.tuscany.databinding.PullTransformer;
import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.databinding.TransformationException;
@@ -26,6 +28,7 @@
import org.osoa.sca.annotations.Service;
import org.w3c.dom.Node;
import org.w3c.dom.ls.DOMImplementationLS;
+import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;
/**
@@ -39,7 +42,12 @@
try {
DOMImplementationLS impl = (DOMImplementationLS) DOMHelper.newDocumentBuilder().getDOMImplementation();
LSSerializer serializer = impl.createLSSerializer();
- return serializer.writeToString(source);
+ LSOutput output = impl.createLSOutput();
+ output.setEncoding("UTF-8");
+ StringWriter writer = new StringWriter();
+ output.setCharacterStream(writer);
+ serializer.write(source, output);
+ return writer.toString();
} catch (Exception e) {
throw new TransformationException(e);
}
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/resources/META-INF/sca/databinding.scdl Tue Sep 12 21:39:40 2006
@@ -59,16 +59,12 @@
<system:implementation.system class="org.apache.tuscany.databinding.xml.String2Node" />
</component>
- <component name="transformer.JavaParametersTransformer">
- <system:implementation.system class="org.apache.tuscany.databinding.impl.JavaParametersTransformer" />
+ <component name="transformer.Input2InputTransformer">
+ <system:implementation.system class="org.apache.tuscany.databinding.idl.Input2InputTransformer" />
</component>
- <component name="transformer.WSDL2JavaTransformer">
- <system:implementation.system class="org.apache.tuscany.databinding.impl.WSDL2JavaTransformer" />
- </component>
-
- <component name="transformer.Java2WSDLTransformer">
- <system:implementation.system class="org.apache.tuscany.databinding.impl.Java2WSDLTransformer" />
+ <component name="transformer.Output2OutputTransformer">
+ <system:implementation.system class="org.apache.tuscany.databinding.idl.Output2OutputTransformer" />
</component>
</composite>
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/DataBindingInterceptorTestCase.java Tue Sep 12 21:39:40 2006
@@ -69,6 +69,10 @@
Operation<Class> operation1 = new Operation<Class>("call", inputType1, type1, null, false, "xml:string");
Operation<Class> operation2 = new Operation<Class>("call", inputType2, type2, null, false, "org.w3c.dom.Node");
+
+ DataType<DataType> outputType1 = new DataType<DataType>("idl:output", Object.class, operation1.getOutputType());
+ DataType<DataType> outputType2 = new DataType<DataType>("idl:output", Object.class, operation2.getOutputType());
+
interceptor = new DataBindingInteceptor(null, operation1, null, operation2);
Mediator mediator = createMock(Mediator.class);
Object[] source = new Object[] { "<foo>bar</foo>" };
@@ -76,7 +80,8 @@
foo.bar = "bar";
Object[] target = new Object[] { foo };
expect(mediator.mediate(source, inputType1, inputType2)).andReturn(target);
- expect(mediator.mediate(target[0], type2, type1)).andReturn(source[0]);
+ // expect(mediator.mediate(target[0], type2, type1)).andReturn(source[0]);
+ expect(mediator.mediate(EasyMock.same(target[0]), EasyMock.eq(outputType2), EasyMock.eq(outputType1))).andReturn(source[0]);
replay(mediator);
interceptor.setMediator(mediator);
Message msg = createMock(Message.class);
Added: incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java?view=auto&rev=442838
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java Tue Sep 12 21:39:40 2006
@@ -0,0 +1,79 @@
+/*
+ * 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.databinding.sdo;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.databinding.TransformationContext;
+import org.apache.tuscany.databinding.idl.WrapperHandler;
+import org.apache.tuscany.sdo.util.SDOUtil;
+import org.apache.tuscany.spi.model.DataType;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.helper.DataFactory;
+import commonj.sdo.helper.TypeHelper;
+import commonj.sdo.helper.XMLDocument;
+import commonj.sdo.helper.XMLHelper;
+
+/**
+ * SDO Wrapper Handler
+ */
+public class SDOWrapperHandler implements WrapperHandler<XMLDocument> {
+
+ /**
+ * @see org.apache.tuscany.databinding.idl.WrapperHandler#create(org.apache.ws.commons.schema.XmlSchemaElement,
+ * TransformationContext)
+ */
+ public XMLDocument create(XmlSchemaElement element, TransformationContext context) {
+ TypeHelper typeHelper = TypeHelper.INSTANCE;
+ if (context != null) {
+ DataType targetType = context.getTargetDataType();
+ if (targetType != null) {
+ typeHelper = (TypeHelper) targetType.getMetadata(TypeHelper.class.getName());
+ if (typeHelper == null) {
+ typeHelper = TypeHelper.INSTANCE;
+ }
+ }
+ }
+ QName typeName = element.getSchemaTypeName();
+ DataFactory dataFactory = SDOUtil.createDataFactory(typeHelper);
+ DataObject root = dataFactory.create(typeName.getNamespaceURI(), typeName.getLocalPart());
+ XMLHelper xmlHelper = SDOUtil.createXMLHelper(typeHelper);
+ return xmlHelper.createDocument(root, element.getQName().getNamespaceURI(), element.getQName().getLocalPart());
+ }
+
+ /**
+ * @see org.apache.tuscany.databinding.idl.WrapperHandler#getChild(java.lang.Object, int,
+ * org.apache.ws.commons.schema.XmlSchemaElement)
+ */
+ public Object getChild(XMLDocument wrapper, int i, XmlSchemaElement element) {
+ return wrapper.getRootObject().get(element.getName());
+ }
+
+ /**
+ * @see org.apache.tuscany.databinding.idl.WrapperHandler#setChild(java.lang.Object, int,
+ * org.apache.ws.commons.schema.XmlSchemaElement, java.lang.Object)
+ */
+ public void setChild(XMLDocument wrapper, int i, XmlSchemaElement childElement, Object value) {
+ wrapper.getRootObject().set(childElement.getName(), value);
+ }
+
+}
Propchange: incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java?view=diff&rev=442838&r1=442837&r2=442838
==============================================================================
--- incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java (original)
+++ incubator/tuscany/java/sca/idl/wsdl/src/main/java/org/apache/tuscany/idl/wsdl/WSDLOperation.java Tue Sep 12 21:39:40 2006
@@ -50,7 +50,7 @@
protected Operation operation;
- private String defaultDataBinding;
+ private String dataBinding;
protected org.apache.tuscany.spi.model.Operation<QName> operationModel;
@@ -60,15 +60,18 @@
protected List<DataType<QName>> faultTypes;
+ // Keep a list of types so that the databindings can be reset
+ private List<DataType<?>> types = new ArrayList<DataType<?>>();
+
/**
* @param operation The WSDL4J operation
- * @param defaultDataBinding The default databinding
+ * @param dataBinding The default databinding
* @param schemaRegistry The XML Schema registry
*/
- public WSDLOperation(Operation operation, String defaultDataBinding, XMLSchemaRegistry schemaRegistry) {
+ public WSDLOperation(Operation operation, String dataBinding, XMLSchemaRegistry schemaRegistry) {
super();
this.operation = operation;
- this.defaultDataBinding = defaultDataBinding;
+ this.dataBinding = dataBinding;
this.schemaRegistry = schemaRegistry;
this.wrapper = new Wrapper();
}
@@ -101,7 +104,7 @@
/**
* @return
- * @throws InvalidServiceContractException
+ * @throws InvalidServiceContractException
*/
public DataType<List<DataType<QName>>> getInputType() throws InvalidServiceContractException {
if (inputType == null) {
@@ -109,6 +112,7 @@
Message message = (input == null) ? null : input.getMessage();
inputType = getMessageType(message);
inputType.setMetadata(WSDLOperation.class.getName(), this);
+ inputType.setDataBinding("idl:input");
}
return inputType;
}
@@ -165,10 +169,12 @@
Collection parts = message.getOrderedParts(null);
for (Object p : parts) {
WSDLPart part = new WSDLPart((Part) p);
- partTypes.add(part.getDataType());
+ DataType<QName> partType = part.getDataType();
+ partTypes.add(partType);
+ types.add(partType);
}
}
- return new DataType<List<DataType<QName>>>(defaultDataBinding, Object[].class, partTypes);
+ return new DataType<List<DataType<QName>>>(dataBinding, Object[].class, partTypes);
}
/**
@@ -180,7 +186,7 @@
boolean oneway = (operation.getOutput() == null);
operationModel =
new org.apache.tuscany.spi.model.Operation<QName>(operation.getName(), getInputType(),
- getOutputType(), getFaultTypes(), oneway, defaultDataBinding);
+ getOutputType(), getFaultTypes(), oneway, dataBinding);
operationModel.addMetaData(WSDLOperation.class.getName(), this);
}
return operationModel;
@@ -219,7 +225,7 @@
element.setSchemaTypeName(type.getQName());
}
}
- dataType = new DataType<QName>(defaultDataBinding, Object.class, element.getQName());
+ dataType = new DataType<QName>(dataBinding, Object.class, element.getQName());
dataType.setMetadata(WSDLPart.class.getName(), this);
}
@@ -402,13 +408,15 @@
public DataType<List<DataType<QName>>> getUnwrappedInputType() {
if (unwrappedInputType == null) {
- List<DataType<QName>> types = new ArrayList<DataType<QName>>();
+ List<DataType<QName>> childTypes = new ArrayList<DataType<QName>>();
for (XmlSchemaElement element : getInputChildElements()) {
- DataType<QName> type = new DataType<QName>(defaultDataBinding, Object.class, element.getQName());
+ DataType<QName> type = new DataType<QName>(dataBinding, Object.class, element.getQName());
type.setMetadata(XmlSchemaElement.class.getName(), element);
+ childTypes.add(type);
types.add(type);
}
- unwrappedInputType = new DataType<List<DataType<QName>>>("idl:unwrapped.input", Object[].class, types);
+ unwrappedInputType =
+ new DataType<List<DataType<QName>>>("idl:unwrapped.input", Object[].class, childTypes);
}
return unwrappedInputType;
}
@@ -422,11 +430,32 @@
throw new NotSupportedWSDLException("Multi-part output is not supported");
}
XmlSchemaElement element = elements.get(0);
- unwrappedOutputType = new DataType<QName>(defaultDataBinding, Object.class, element.getQName());
+ unwrappedOutputType = new DataType<QName>(dataBinding, Object.class, element.getQName());
unwrappedOutputType.setMetadata(XmlSchemaElement.class.getName(), element);
+ types.add(unwrappedOutputType);
}
}
return unwrappedOutputType;
+ }
+ }
+
+ /**
+ * @return the dataBinding
+ */
+ public String getDataBinding() {
+ return dataBinding;
+ }
+
+ /**
+ * @param dataBinding the dataBinding to set
+ */
+ public void setDataBinding(String dataBinding) {
+ String oldDataBinding = this.dataBinding;
+ this.dataBinding = dataBinding;
+ if (!dataBinding.equals(oldDataBinding)) {
+ for (DataType<?> d : types) {
+ d.setDataBinding(this.dataBinding);
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org