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/18 07:33:14 UTC
svn commit: r447254 [2/3] - in /incubator/tuscany/java:
samples/sca/echo.databinding/src/main/java/echo/ samples/sca/helloworldws/
samples/sca/helloworldws/src/main/java/helloworld/
samples/sca/helloworldws/src/main/resources/wsdl/ samples/sca/hellowor...
Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2TargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2TargetInvoker.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2TargetInvoker.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2TargetInvoker.java Sun Sep 17 22:33:12 2006
@@ -32,7 +32,6 @@
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.tuscany.binding.axis2.util.SDODataBinding;
import org.apache.tuscany.spi.wire.InvocationRuntimeException;
import org.apache.tuscany.spi.wire.Message;
import org.apache.tuscany.spi.wire.TargetInvoker;
@@ -43,18 +42,17 @@
public class Axis2TargetInvoker implements TargetInvoker {
private QName wsdlOperationName;
- private Options options;
- private SDODataBinding dataBinding;
+ private Options options;
private SOAPFactory soapFactory;
private ServiceClient serviceClient;
-
- public Axis2TargetInvoker(ServiceClient serviceClient, QName wsdlOperationName, Options options, SDODataBinding dataBinding, SOAPFactory soapFactory) {
+
+ public Axis2TargetInvoker(ServiceClient serviceClient, QName wsdlOperationName, Options options,
+ SOAPFactory soapFactory) {
this.wsdlOperationName = wsdlOperationName;
this.options = options;
- this.dataBinding = dataBinding;
this.soapFactory = soapFactory;
this.serviceClient = serviceClient;
}
@@ -69,23 +67,12 @@
public Object invokeTarget(final Object payload) throws InvocationTargetException {
try {
Object[] args = (Object[]) payload;
- boolean pureOMelement = (args != null && args.length > 0 && (args[0] instanceof OMElement));
OperationClient operationClient = createOperationClient(args);
operationClient.execute(true);
MessageContext responseMC = operationClient.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
- OMElement responseOM = responseMC.getEnvelope().getBody().getFirstElement();
-
- if (pureOMelement) {
- return responseOM;
- } else {
- Object[] os = null;
- if (responseOM != null) {
- os = dataBinding.fromOMElement(responseOM);
- }
- return (os!=null && os.length>=1)? os[0]: null;
- }
+ return responseMC.getEnvelope().getBody().getFirstElement();
} catch (AxisFault e) {
throw new InvocationTargetException(e);
@@ -96,20 +83,14 @@
protected OperationClient createOperationClient(Object[] args) throws AxisFault {
SOAPEnvelope env = soapFactory.getDefaultEnvelope();
if (args != null && args.length > 0) {
- // TODO HACK
- if (args[0] instanceof OMElement) {
- SOAPBody body = env.getBody();
- for (Object bc : args) {
- if (bc instanceof OMElement) {
- body.addChild((OMElement) bc);
- } else {
- throw new IllegalArgumentException(
- "Can't handle mixed payloads betweem OMElements and other types.");
- }
+ SOAPBody body = env.getBody();
+ for (Object bc : args) {
+ if (bc instanceof OMElement) {
+ body.addChild((OMElement) bc);
+ } else {
+ throw new IllegalArgumentException(
+ "Can't handle mixed payloads betweem OMElements and other types.");
}
- } else {
- OMElement requestOM = dataBinding.toOMElement(args);
- env.getBody().addChild(requestOM);
}
}
MessageContext requestMC = new MessageContext();
@@ -151,8 +132,5 @@
public boolean isOptimizable() {
return false;
}
-
- protected SDODataBinding getDataBinding() {
- return dataBinding;
- }
+
}
Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/WebServiceBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/WebServiceBinding.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/WebServiceBinding.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/WebServiceBinding.java Sun Sep 17 22:33:12 2006
@@ -36,8 +36,6 @@
private Service service;
//private String portURI;
private String uri;
- private String webAppName;
-
public WebServiceBinding(Definition definition, Port port, String uri, String portURI, Service service) {
this.definition = definition;
this.port = port;
@@ -76,13 +74,5 @@
public void setURI(String theUri) {
this.uri = theUri;
- }
-
- public void setWebAppName(String webAppName) {
- this.webAppName = webAppName;
- }
-
- public String getWebAppName() {
- return webAppName;
}
}
Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/WebServiceBindingLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/WebServiceBindingLoader.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/WebServiceBindingLoader.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/WebServiceBindingLoader.java Sun Sep 17 22:33:12 2006
@@ -21,21 +21,17 @@
import static org.osoa.sca.Version.XML_NAMESPACE_1_0;
import java.io.IOException;
-import java.net.URL;
import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
import javax.wsdl.Definition;
import javax.wsdl.Port;
import javax.wsdl.Service;
import javax.wsdl.WSDLException;
-import javax.wsdl.factory.WSDLFactory;
-import javax.wsdl.xml.WSDLReader;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import org.apache.tuscany.idl.wsdl.WSDLDefinitionRegistry;
import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.deployer.DeploymentContext;
@@ -43,8 +39,8 @@
import org.apache.tuscany.spi.loader.LoaderException;
import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.loader.LoaderUtil;
+import org.osoa.sca.annotations.Constructor;
import org.osoa.sca.annotations.Scope;
-import org.xml.sax.InputSource;
/**
* Parses a <code>WebServiceBinding</code> entry in an assembly XML file
@@ -52,52 +48,48 @@
* @version $Rev$ $Date$
*/
@Scope("MODULE")
+@SuppressWarnings("deprecation")
public class WebServiceBindingLoader extends LoaderExtension<WebServiceBinding> {
public static final QName BINDING_WS = new QName(XML_NAMESPACE_1_0, "binding.ws");
- private String wsdlLocation;
+ private WSDLDefinitionRegistry wsdlDefinitionRegistry;
- private String endpointAttribute;
-
-
- public WebServiceBindingLoader(@Autowire
- LoaderRegistry registry) {
- super(registry);
+ @Constructor( { "loaderRegistry", "wsdlDefinitionRegistry" })
+ public WebServiceBindingLoader(@Autowire LoaderRegistry loaderRegistry,
+ @Autowire WSDLDefinitionRegistry wsdlDefinitionRegistry) {
+ super(loaderRegistry);
+ this.wsdlDefinitionRegistry = wsdlDefinitionRegistry;
}
public QName getXMLType() {
return BINDING_WS;
}
- public WebServiceBinding load(CompositeComponent parent, XMLStreamReader reader,
- DeploymentContext deploymentContext) throws XMLStreamException,
- LoaderException {
+ public WebServiceBinding load(CompositeComponent parent, XMLStreamReader reader, DeploymentContext deploymentContext)
+ throws XMLStreamException, LoaderException {
// not sure what uri was here ? String uri = reader.getAttributeValue(null, "uri");
String uri = null;
- endpointAttribute = reader.getAttributeValue(null, "endpoint");
- wsdlLocation = reader.getAttributeValue(null, "location");
+ String endpoint = reader.getAttributeValue(null, "endpoint");
+ String wsdlLocation = reader.getAttributeValue(null, "location");
LoaderUtil.skipToEndElement(reader);
try {
- return createBinding(uri, endpointAttribute, deploymentContext);
+ return createBinding(uri, endpoint, wsdlLocation, deploymentContext);
} catch (Exception e) {
-
throw new LoaderException(e);
}
-
+
}
@SuppressWarnings("unchecked")
- private WebServiceBinding createBinding(String port, String portURI, DeploymentContext deploymentContext) throws WSDLException, IOException {
- List<Definition> definitions = null;
- // FIXME wsdlRegistry.getDefinitionsForNamespace(portNamespace,
- // resourceLoader);
+ private WebServiceBinding createBinding(String port, String portURI, String wsdlLocation, DeploymentContext deploymentContext)
+ throws WSDLException, IOException {
// Get the WSDL port namespace and name
if (port == null && portURI != null) {
int h = portURI.indexOf('#');
- // String portNamespace = portURI.substring(0, h);
String serviceName;
String portName;
+ String namespace = portURI.substring(0, h);
String fragment = portURI.substring(h + 1);
if (fragment.startsWith("wsdl.endpoint(") && fragment.endsWith(")")) {
fragment = fragment.substring(14, fragment.length() - 1);
@@ -114,42 +106,27 @@
portName = fragment;
}
// FIXME need to find out how to get wsdl and what context to use --- terrible hack attack!
- // URL wsdlurl = Thread.currentThread().getContextClassLoader().getResource(wsdlLocation);
- if(null == wsdlLocation) throw new RuntimeException("Failed to determin wsdl location on binding. Try specifying 'location' attribute on binding.");
- URL wsdlurl = deploymentContext.getClassLoader().getResource(wsdlLocation);
- if(wsdlurl == null){
- Axis2BindingBuilderRuntimeException axis2BindingLoaderException = new Axis2BindingBuilderRuntimeException("Failed to load wsdl");
- axis2BindingLoaderException.setResourceURI(wsdlLocation);
- throw axis2BindingLoaderException;
- }
- WSDLFactory factory = WSDLFactory.newInstance();
- WSDLReader reader = factory.newWSDLReader();
- reader.setFeature("javax.wsdl.verbose", false);
- InputSource input = new InputSource(wsdlurl.openStream());
- Definition wsdlDef = reader.readWSDL(wsdlurl.toString(), input);
- definitions = new LinkedList<Definition>();
- definitions.add(wsdlDef);
- // FIXME all the above needs to better addressed.
+ if (null == wsdlLocation) {
+ throw new Axis2BindingRunTimeException(
+ "Failed to determin wsdl location on binding. Try specifying 'location' attribute on binding.");
+ }
+ Definition definition =
+ wsdlDefinitionRegistry.loadDefinition(namespace+" "+wsdlLocation, deploymentContext.getClassLoader());
- Definition definition = null;
Port thePort = null;
Service service = null;
- for (Definition def : definitions) {
+ // Find the port with the given name
+ for (Service serv : (Collection<Service>) definition.getServices().values()) {
+ QName sqn = serv.getQName();
+ if (serviceName != null && !serviceName.equals(sqn.getLocalPart())) {
+ continue;
+ }
- // Find the port with the given name
- for (Service serv : (Collection<Service>) def.getServices().values()) {
- QName sqn = serv.getQName();
- if (serviceName != null && !serviceName.equals(sqn.getLocalPart())) {
- continue;
- }
-
- Port p = serv.getPort(portName);
- if (p != null) {
- service = serv;
- definition = def;
- thePort = p;
- break;
- }
+ Port p = serv.getPort(portName);
+ if (p != null) {
+ service = serv;
+ thePort = p;
+ break;
}
}
if (thePort == null) {
@@ -158,7 +135,7 @@
}
return new WebServiceBinding(definition, thePort, port, portURI, service);
}
- // FIXME
+ // FIXME: Find the first port?
return null;
}
Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ReferenceTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ReferenceTestCase.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ReferenceTestCase.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ReferenceTestCase.java Sun Sep 17 22:33:12 2006
@@ -20,6 +20,7 @@
import java.lang.reflect.Type;
import java.net.URL;
+
import javax.wsdl.Definition;
import javax.wsdl.Port;
import javax.wsdl.Service;
@@ -27,8 +28,9 @@
import javax.wsdl.xml.WSDLReader;
import javax.xml.namespace.QName;
-import org.xml.sax.InputSource;
+import junit.framework.TestCase;
+import org.apache.tuscany.idl.wsdl.WSDLServiceContract;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.component.WorkContext;
import org.apache.tuscany.spi.idl.java.JavaServiceContract;
@@ -37,12 +39,8 @@
import org.apache.tuscany.spi.wire.InboundWire;
import org.apache.tuscany.spi.wire.TargetInvoker;
import org.apache.tuscany.spi.wire.WireService;
-
-import commonj.sdo.helper.TypeHelper;
-import junit.framework.TestCase;
-
-import org.apache.tuscany.idl.wsdl.WSDLServiceContract;
-import org.easymock.classextension.EasyMock;
+import org.easymock.EasyMock;
+import org.xml.sax.InputSource;
public class Axis2ReferenceTestCase extends TestCase {
@@ -83,13 +81,12 @@
"SOAPService"));
Port port = wsdlService.getPort("SoapPort");
WebServiceBinding wsBinding = new WebServiceBinding(wsdlDef, port, "uri", "portURI", wsdlService);
- wsBinding.setWebAppName(webAppName);
//Create a mocked WireService, make the call of ServiceExtension.getServiceInstance() returns a proxy instance.
WireService wireService = EasyMock.createNiceMock(WireService.class);
EasyMock.replay(wireService);
CompositeComponent parent = EasyMock.createNiceMock(CompositeComponent.class);
// TODO figure out what to do with the service contract
- ServiceContract contract = new WSDLServiceContract();
+ ServiceContract<?> contract = new WSDLServiceContract();
contract.setInterfaceClass(Greeter.class);
WorkContext workContext = EasyMock.createNiceMock(WorkContext.class);
EasyMock.replay(workContext);
@@ -98,7 +95,6 @@
wireService,
wsBinding,
contract,
- TypeHelper.INSTANCE,
workContext);
}
}
Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/test/java/org/apache/tuscany/binding/axis2/Axis2ServiceTestCase.java Sun Sep 17 22:33:12 2006
@@ -18,6 +18,8 @@
*/
package org.apache.tuscany.binding.axis2;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
@@ -36,18 +38,20 @@
import org.apache.tuscany.spi.component.WorkContext;
import org.apache.tuscany.spi.host.ServletHost;
import org.apache.tuscany.spi.idl.java.JavaServiceContract;
+import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.wire.InboundWire;
+import org.apache.tuscany.spi.wire.OutboundInvocationChain;
+import org.apache.tuscany.spi.wire.OutboundWire;
import org.apache.tuscany.spi.wire.WireService;
-import commonj.sdo.helper.TypeHelper;
import junit.framework.TestCase;
-import org.easymock.classextension.EasyMock;
+import org.easymock.EasyMock;
public class Axis2ServiceTestCase extends TestCase {
public void testInvokeService() throws Exception {
TestServletHost tomcatHost = new TestServletHost();
- Axis2Service axis2Service = createAxis2Service("testWebAppName", "testServiceName", tomcatHost, false);
+ Axis2Service axis2Service = createAxis2Service("testServiceName", tomcatHost, false);
axis2Service.start();
if (true) return;
@@ -62,11 +66,11 @@
public void testAsyncMessageReceiver() throws Exception {
TestServletHost tomcatHost = new TestServletHost();
- Axis2Service axis2Service = createAxis2Service("testWebAppName", "testServiceName", tomcatHost, true);
+ Axis2Service axis2Service = createAxis2Service("testServiceName", tomcatHost, true);
axis2Service.start();
}
- private Axis2Service createAxis2Service(String webAppName, String serviceName, ServletHost tomcatHost, boolean callback)
+ private Axis2Service createAxis2Service(String serviceName, ServletHost tomcatHost, boolean callback)
throws Exception {
//Create WebServiceBinding
String wsdlLocation = "/wsdl/hello_world_doc_lit.wsdl";
@@ -82,7 +86,6 @@
"SOAPService"));
Port port = wsdlService.getPort("SoapPort");
WebServiceBinding wsBinding = new WebServiceBinding(wsdlDef, port, "uri", "portURI", wsdlService);
- wsBinding.setWebAppName(webAppName);
//Create a mocked WireService, make the call of ServiceExtension.getServiceInstance() returns a proxy instance.
WireService wireService = EasyMock.createNiceMock(WireService.class);
@@ -93,27 +96,37 @@
//Create a mocked InboundWire, make the call of ServiceExtension.getInterface() returns a Class
InboundWire inboundWire = EasyMock.createNiceMock(InboundWire.class);
JavaServiceContract contract = new JavaServiceContract(Greeter.class);
+ Map<String, Operation<Type>> opMap = new HashMap<String, Operation<Type>>();
+ for(Method m: Greeter.class.getMethods()) {
+ opMap.put(m.getName(), new Operation<Type>(m.getName(), null, null, null));
+ }
+ contract.setOperations(opMap);
EasyMock.expect(inboundWire.getServiceContract()).andReturn(contract).anyTimes();
if (callback) {
EasyMock.expect(inboundWire.getCallbackReferenceName()).andReturn("").anyTimes();
}
EasyMock.replay(inboundWire);
+ OutboundWire outboundWire = EasyMock.createNiceMock(OutboundWire.class);
+ Map<Operation<?>, OutboundInvocationChain> map = new HashMap<Operation<?>, OutboundInvocationChain>();
+ EasyMock.expect(outboundWire.getInvocationChains()).andReturn(map).once();
+ EasyMock.replay(outboundWire);
+
TuscanyAxisConfigurator tuscanyAxisConfigurator = new TuscanyAxisConfigurator();
ConfigurationContext configurationContext = tuscanyAxisConfigurator.getConfigurationContext();
WorkContext workContext = EasyMock.createNiceMock(WorkContext.class);
EasyMock.replay(workContext);
Axis2Service axis2Service =
new Axis2Service(serviceName,
- Greeter.class,
+ contract,
null,
wireService,
wsBinding,
tomcatHost,
configurationContext,
- TypeHelper.INSTANCE,
workContext);
axis2Service.setInboundWire(inboundWire);
+ axis2Service.setOutboundWire(outboundWire);
return axis2Service;
}
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=447254&r1=447253&r2=447254
==============================================================================
--- 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 Sun Sep 17 22:33:12 2006
@@ -30,6 +30,8 @@
*/
@Service(DataBinding.class)
public class AxiomDataBinding extends DataBindingExtension {
+
+ public static final String NAME = OMElement.class.getName();
public AxiomDataBinding() {
super(OMElement.class);
Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/String2OMElement.java Sun Sep 17 22:33:12 2006
@@ -44,21 +44,29 @@
try {
StAXOMBuilder builder = new StAXOMBuilder(new ByteArrayInputStream(source.getBytes()));
OMElement element = builder.getDocumentElement();
- if (context != null) {
- DataType<QName> dataType = context.getTargetDataType();
- QName targetQName = dataType == null ? null : dataType.getLogical();
- if (targetQName != null && !element.getQName().equals(targetQName)) {
- // TODO: Throw expection or switch to the new Element
- OMFactory factory = OMAbstractFactory.getOMFactory();
- OMNamespace namespace =
- factory.createOMNamespace(targetQName.getNamespaceURI(), targetQName.getPrefix());
- element.setNamespace(namespace);
- element.setLocalName(targetQName.getLocalPart());
- }
- }
+ adjustElementName(context, element);
return element;
} catch (Exception e) {
throw new TransformationException(e);
+ }
+ }
+
+ /**
+ * @param context
+ * @param element
+ */
+ private void adjustElementName(TransformationContext context, OMElement element) {
+ if (context != null) {
+ DataType<QName> dataType = context.getTargetDataType();
+ QName targetQName = dataType == null ? null : dataType.getLogical();
+ if (targetQName != null && !element.getQName().equals(targetQName)) {
+ // TODO: Throw expection or switch to the new Element
+ OMFactory factory = OMAbstractFactory.getOMFactory();
+ OMNamespace namespace =
+ factory.createOMNamespace(targetQName.getNamespaceURI(), targetQName.getPrefix());
+ element.setNamespace(namespace);
+ element.setLocalName(targetQName.getLocalPart());
+ }
}
}
Modified: incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-axiom/src/main/java/org/apache/tuscany/databinding/axiom/XMLStreamReader2OMElement.java Sun Sep 17 22:33:12 2006
@@ -18,15 +18,20 @@
*/
package org.apache.tuscany.databinding.axiom;
+import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
+import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.databinding.TransformationException;
import org.apache.tuscany.databinding.PullTransformer;
import org.apache.tuscany.databinding.Transformer;
import org.apache.tuscany.databinding.extension.TransformerExtension;
+import org.apache.tuscany.spi.model.DataType;
import org.osoa.sca.annotations.Service;
@Service(Transformer.class)
@@ -39,11 +44,36 @@
public OMElement transform(XMLStreamReader source, TransformationContext context) {
try {
StAXOMBuilder builder = new StAXOMBuilder(source);
- return builder.getDocumentElement();
+ OMElement element = builder.getDocumentElement();
+ adjustElementName(context, element);
+ return element;
} catch (Exception e) {
throw new TransformationException(e);
}
}
+
+ /**
+ * For data trasnformation purpose, we may only care about the content of the OMElement.
+ * If the incoming OMElement is under a different name, then we try to adjust it based on the target
+ * data type
+ * @param context
+ * @param element
+ */
+ private void adjustElementName(TransformationContext context, OMElement element) {
+ if (context != null) {
+ DataType<QName> dataType = context.getTargetDataType();
+ QName targetQName = dataType == null ? null : dataType.getLogical();
+ if (targetQName != null && !element.getQName().equals(targetQName)) {
+ // TODO: Throw expection or switch to the new Element
+ OMFactory factory = OMAbstractFactory.getOMFactory();
+ OMNamespace namespace =
+ factory.createOMNamespace(targetQName.getNamespaceURI(), targetQName.getPrefix());
+ element.setNamespace(namespace);
+ element.setLocalName(targetQName.getLocalPart());
+ }
+ }
+ }
+
public Class getTargetType() {
return OMElement.class;
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=447254&r1=447253&r2=447254
==============================================================================
--- 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 Sun Sep 17 22:33:12 2006
@@ -79,7 +79,7 @@
Definition definition = registry.loadDefinition(null, url);
PortType portType = definition.getPortType(PORTTYPE_NAME);
Operation operation = portType.getOperation("checkOrderStatus", null, null);
- WSDLOperation op = new WSDLOperation(operation, OMElement.class.getName(), registry.getSchemaRegistry());
+ WSDLOperation op = new WSDLOperation(operation, AxiomDataBinding.NAME, registry.getSchemaRegistry());
Assert.assertTrue(op.isWrapperStyle());
MediatorImpl m = new MediatorImpl();
@@ -90,7 +90,7 @@
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);
@@ -112,14 +112,23 @@
Assert.assertEquals(new QName("http://example.com/order.xsd", "checkOrderStatus"), element.getQName());
TransformationContext context1 = new TransformationContextImpl();
- context1.setSourceDataType(op.getOutputType());
- context1.setTargetDataType(new DataType<Class>("java.lang.String", String.class, String.class));
+ DataType<DataType> sourceType = new DataType<DataType>("idl:output", Object.class, op.getOutputType());
+ sourceType.setMetadata(WSDLOperation.class.getName(), op.getOutputType().getMetadata(
+ WSDLOperation.class.getName()));
+
+ context1.setSourceDataType(sourceType);
+ DataType<DataType> targetType =
+ new DataType<DataType>("idl:output", Object.class, new DataType<Class>("java.lang.String",
+ String.class, String.class));
+ context1.setTargetDataType(targetType);
+
OMFactory factory = OMAbstractFactory.getOMFactory();
OMElement responseElement =
factory.createOMElement(new QName("http://example.com/order.wsdl", "checkOrderStatusResponse"), null);
OMElement status = factory.createOMElement(new QName(null, "status"), responseElement);
factory.createOMText(status, "shipped");
Output2OutputTransformer t2 = new Output2OutputTransformer();
+ t2.setMediator(m);
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/Mediator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/Mediator.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/Mediator.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/Mediator.java Sun Sep 17 22:33:12 2006
@@ -18,6 +18,8 @@
*/
package org.apache.tuscany.databinding;
+import java.util.Map;
+
import org.apache.tuscany.spi.model.DataType;
/**
@@ -33,9 +35,10 @@
* @param source The data to be mediated
* @param sourceDataType Data type for the source data
* @param targetDataType Data type for the target data
+ * @param context
* @return
*/
- public Object mediate(Object source, DataType sourceDataType, DataType targetDataType);
+ Object mediate(Object source, DataType sourceDataType, DataType targetDataType, Map<Class<?>, Object> context);
/**
* Mediate the source data into the target which is a sink to receive the data
* @param source The data to be mediated
@@ -43,6 +46,6 @@
* @param sourceDataType Data type for the source data
* @param targetDataType Data type for the target data
*/
- public void mediate(Object source, Object target, DataType sourceDataType, DataType targetDataType);
+ void mediate(Object source, Object target, DataType sourceDataType, DataType targetDataType, Map<Class<?>, Object> context);
}
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/TransformationContext.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/TransformationContext.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/TransformationContext.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/TransformationContext.java Sun Sep 17 22:33:12 2006
@@ -18,6 +18,8 @@
*/
package org.apache.tuscany.databinding;
+import java.util.Map;
+
import org.apache.tuscany.spi.model.DataType;
/**
@@ -49,5 +51,7 @@
* @return
*/
public ClassLoader getClassLoader();
+
+ public Map<Class<?>, Object> getMetadata();
}
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=447254&r1=447253&r2=447254
==============================================================================
--- 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 Sun Sep 17 22:33:12 2006
@@ -33,7 +33,6 @@
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;
@@ -48,7 +47,9 @@
PullTransformer<Object[], Object[]> {
private static final String IDL_INPUT = "idl:input";
- protected DataBindingRegistry dataBindingRegistry;
+
+ protected DataBindingRegistry dataBindingRegistry;
+
protected Mediator mediator;
public Input2InputTransformer() {
@@ -64,7 +65,7 @@
public String getTargetBinding() {
return IDL_INPUT;
}
-
+
/**
* @param mediator the mediator to set
*/
@@ -81,7 +82,6 @@
this.dataBindingRegistry = dataBindingRegistry;
}
-
/**
* @see org.apache.tuscany.databinding.extension.TransformerExtension#getSourceType()
*/
@@ -102,7 +102,7 @@
* @see org.apache.tuscany.databinding.Transformer#getWeight()
*/
public int getWeight() {
- return 10;
+ return 100;
}
@SuppressWarnings("unchecked")
@@ -110,24 +110,34 @@
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);
+ if (sourceWrapped) {
+ sourceWrapperHandler = getWapperHandler(sourceType.getLogical().get(0).getDataBinding(), true);
}
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 (targetWrapped) {
+ targetWrapperHandler = getWapperHandler(targetType.getLogical().get(0).getDataBinding(), true);
}
if ((!sourceWrapped) && targetWrapped) {
// Unwrapped --> Wrapped
WSDLOperation.Wrapper wrapper = targetOp.getWrapper();
- Object targetWrapper = targetWrapperHandler.create(wrapper.getInputWrapperElement(), context);
+ XmlSchemaElement wrapperElement = wrapper.getInputWrapperElement();
+
+ // If the source can be wrapped, wrapped it first
+ if (sourceWrapperHandler != null) {
+ Object sourceWrapper = sourceWrapperHandler.create(wrapperElement, context);
+ for (int i = 0; i < source.length; i++) {
+ XmlSchemaElement argElement = wrapper.getInputChildElements().get(i);
+ sourceWrapperHandler.setChild(sourceWrapper, i, argElement, source[0]);
+ }
+ }
+ Object targetWrapper = targetWrapperHandler.create(wrapperElement, context);
if (source == null) {
return new Object[] { targetWrapper };
}
@@ -140,7 +150,7 @@
boolean isSimpleType = (argXSDType instanceof XmlSchemaSimpleType);
Object child = source[i];
if (!isSimpleType) {
- child = mediator.mediate(source[i], sourceType.getLogical().get(i), argType);
+ child = mediator.mediate(source[i], sourceType.getLogical().get(i), argType, context.getMetadata());
targetWrapperHandler.setChild(targetWrapper, i, argElement, child);
} else {
targetWrapperHandler.setChild(targetWrapper, i, argElement, child);
@@ -151,41 +161,54 @@
// Wrapped to Unwrapped
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) {
- newArgs[i] = sourceWrapperHandler.getChild(sourceWrapper, i, childElement);
- } else {
- 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));
+ Object[] target = new Object[childElements.size()];
+
+ targetWrapperHandler = getWapperHandler(targetType.getLogical().get(0).getDataBinding(), false);
+ if (targetWrapperHandler != null) {
+ XmlSchemaElement wrapperElement = sourceOp.getWrapper().getInputWrapperElement();
+ // Object targetWrapper = targetWrapperHandler.create(wrapperElement, context);
+ DataType<QName> targetWrapperType =
+ new DataType<QName>(targetType.getLogical().get(0).getDataBinding(), Object.class, wrapperElement.getQName());
+ Object targetWrapper =
+ mediator.mediate(sourceWrapper, sourceType.getLogical().get(0), targetWrapperType, context
+ .getMetadata());
+ for (int i = 0; i < childElements.size(); i++) {
+ XmlSchemaElement childElement = childElements.get(i);
+ target[i] = targetWrapperHandler.getChild(targetWrapper, i, childElement);
+ }
+ } else {
+ for (int i = 0; i < childElements.size(); i++) {
+ XmlSchemaElement childElement = childElements.get(i);
+ if (childElement.getSchemaType() instanceof XmlSchemaSimpleType) {
+ target[i] = sourceWrapperHandler.getChild(sourceWrapper, i, childElement);
+ } else {
+ Object child = sourceWrapperHandler.getChild(sourceWrapper, i, childElement);
+ DataType<QName> childType = sourceOp.getWrapper().getUnwrappedInputType().getLogical().get(i);
+ target[i] =
+ mediator.mediate(child, childType, targetType.getLogical().get(i), context
+ .getMetadata());
+ }
}
}
- return newArgs;
+ return target;
} else {
// Assuming wrapper to wrapper conversion can be handled here as well
Object[] newArgs = new Object[source.length];
for (int i = 0; i < source.length; i++) {
Object child =
- mediator.mediate(source[i], sourceType.getLogical().get(i), targetType.getLogical().get(i));
+ mediator.mediate(source[i], sourceType.getLogical().get(i), targetType.getLogical().get(i),
+ context.getMetadata());
newArgs[i] = child;
}
return newArgs;
}
}
- private WrapperHandler getWapperHandler(WSDLOperation sourceOp) {
- String dataBindingId;
- try {
- dataBindingId = sourceOp.getOperation().getDataBinding();
- } catch (InvalidServiceContractException e) {
- throw new TransformationException(e);
- }
+ private WrapperHandler getWapperHandler(String dataBindingId, boolean required) {
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);
+ WrapperHandler wrapperHandler = dataBinding == null ? null : dataBinding.getWrapperHandler();
+ if (wrapperHandler == null && required) {
+ 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=447254&r1=447253&r2=447254
==============================================================================
--- 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 Sun Sep 17 22:33:12 2006
@@ -47,7 +47,9 @@
public class Output2OutputTransformer extends TransformerExtension<Object, Object> implements
PullTransformer<Object, Object> {
private static final String IDL_OUTPUT = "idl:output";
+
protected DataBindingRegistry dataBindingRegistry;
+
protected Mediator mediator;
/**
@@ -71,8 +73,8 @@
@Autowire
public void setDataBindingRegistry(DataBindingRegistry dataBindingRegistry) {
this.dataBindingRegistry = dataBindingRegistry;
- }
-
+ }
+
@Override
public String getSourceBinding() {
return IDL_OUTPUT;
@@ -82,7 +84,7 @@
public String getTargetBinding() {
return IDL_OUTPUT;
}
-
+
/**
* @see org.apache.tuscany.databinding.extension.TransformerExtension#getSourceType()
*/
@@ -105,7 +107,7 @@
public int getWeight() {
return 10;
}
-
+
private WrapperHandler getWapperHandler(WSDLOperation sourceOp) {
String dataBindingId;
try {
@@ -114,13 +116,17 @@
throw new TransformationException(e);
}
DataBinding dataBinding = dataBindingRegistry.getDataBinding(dataBindingId);
- WrapperHandler wrapperHandler = dataBinding==null? null : dataBinding.getWrapperHandler();
+ WrapperHandler wrapperHandler = dataBinding == null ? null : dataBinding.getWrapperHandler();
if (wrapperHandler == null) {
- throw new TransformationException("No wrapper handler is provided for databinding: "+dataBindingId);
+ throw new TransformationException("No wrapper handler is provided for databinding: " + dataBindingId);
}
return wrapperHandler;
}
-
+
+ private WrapperHandler getWapperHandler(String dataBindingId) {
+ DataBinding dataBinding = dataBindingRegistry.getDataBinding(dataBindingId);
+ return dataBinding == null ? null : dataBinding.getWrapperHandler();
+ }
@SuppressWarnings("unchecked")
public Object transform(Object response, TransformationContext context) {
@@ -129,7 +135,7 @@
WSDLOperation sourceOp = (WSDLOperation) sourceType.getMetadata(WSDLOperation.class.getName());
boolean sourceWrapped = (sourceOp != null && sourceOp.isWrapperStyle());
WrapperHandler sourceWrapperHandler = null;
- if(sourceWrapped) {
+ if (sourceWrapped) {
sourceWrapperHandler = getWapperHandler(sourceOp);
}
@@ -137,7 +143,7 @@
WSDLOperation targetOp = (WSDLOperation) targetType.getMetadata(WSDLOperation.class.getName());
boolean targetWrapped = (targetOp != null && targetOp.isWrapperStyle());
WrapperHandler targetWrapperHandler = null;
- if(targetWrapped) {
+ if (targetWrapped) {
targetWrapperHandler = getWapperHandler(targetOp);
}
@@ -155,7 +161,7 @@
boolean isSimpleType = (argXSDType instanceof XmlSchemaSimpleType);
Object child = response;
if (!isSimpleType) {
- child = mediator.mediate(response, sourceType.getLogical(), argType);
+ child = mediator.mediate(response, sourceType.getLogical(), argType, context.getMetadata());
targetWrapperHandler.setChild(targetWrapper, 0, argElement, child);
} else {
targetWrapperHandler.setChild(targetWrapper, 0, argElement, child);
@@ -166,16 +172,31 @@
Object sourceWrapper = response;
List<XmlSchemaElement> childElements = sourceOp.getWrapper().getOutputChildElements();
XmlSchemaElement childElement = childElements.get(0);
- if (childElement.getSchemaType() instanceof XmlSchemaSimpleType) {
- return sourceWrapperHandler.getChild(sourceWrapper, 0, childElement);
+
+ targetWrapperHandler = getWapperHandler(targetType.getLogical().getDataBinding());
+ if (targetWrapperHandler != null) {
+ XmlSchemaElement wrapperElement = sourceOp.getWrapper().getInputWrapperElement();
+ // Object targetWrapper = targetWrapperHandler.create(wrapperElement, context);
+ DataType<QName> targetWrapperType =
+ new DataType<QName>(targetType.getLogical().getDataBinding(), Object.class, wrapperElement
+ .getQName());
+ Object targetWrapper =
+ mediator.mediate(sourceWrapper, sourceType.getLogical(), targetWrapperType, context
+ .getMetadata());
+ return targetWrapperHandler.getChild(targetWrapper, 0, childElement);
} else {
- Object child = sourceWrapperHandler.getChild(sourceWrapper, 0, childElement);
- DataType<?> childType = sourceOp.getWrapper().getUnwrappedOutputType();
- return mediator.mediate(child, childType, targetType.getLogical());
+ if (childElement.getSchemaType() instanceof XmlSchemaSimpleType) {
+ return sourceWrapperHandler.getChild(sourceWrapper, 0, childElement);
+ } else {
+ Object child = sourceWrapperHandler.getChild(sourceWrapper, 0, childElement);
+ DataType<?> childType = sourceOp.getWrapper().getUnwrappedOutputType();
+ return mediator.mediate(child, childType, targetType.getLogical(), context.getMetadata());
+ }
}
} else {
// FIXME: Do we want to handle wrapped to wrapped?
- return mediator.mediate(response, sourceType.getLogical(), targetType.getLogical());
+ return mediator.mediate(response, sourceType.getLogical(), targetType.getLogical(), context
+ .getMetadata());
}
} catch (Exception e) {
throw new TransformationException(e);
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=447254&r1=447253&r2=447254
==============================================================================
--- 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 Sun Sep 17 22:33:12 2006
@@ -19,8 +19,12 @@
package org.apache.tuscany.databinding.impl;
+import java.util.HashMap;
+import java.util.Map;
+
import org.apache.tuscany.databinding.Mediator;
import org.apache.tuscany.idl.wsdl.WSDLOperation;
+import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.model.DataType;
import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.wire.Interceptor;
@@ -34,9 +38,7 @@
public class DataBindingInteceptor implements Interceptor {
private Interceptor next;
- private RuntimeWire sourceWire; // NOPMD by rfeng on 8/29/06 10:15 AM
-
- private RuntimeWire targetWire; // NOPMD by rfeng on 8/29/06 10:15 AM
+ private CompositeComponent compositeComponent;
private Operation<?> sourceOperation;
@@ -47,10 +49,11 @@
public DataBindingInteceptor(RuntimeWire sourceWire, Operation<?> sourceOperation, RuntimeWire targetWire,
Operation<?> targetOperation) {
super();
- this.sourceWire = sourceWire;
+ // this.sourceWire = sourceWire;
this.sourceOperation = sourceOperation;
- this.targetWire = targetWire;
+ // this.targetWire = targetWire;
this.targetOperation = targetOperation;
+ this.compositeComponent = (CompositeComponent) sourceWire.getContainer().getParent();
}
/**
@@ -69,15 +72,19 @@
Message resultMsg = next.invoke(msg);
Object result = resultMsg.getBody();
// FIXME: How to deal with faults?
- if(resultMsg.isFault()) {
+ if (resultMsg.isFault()) {
// 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) {
// 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()));
+ 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);
@@ -93,7 +100,9 @@
if (sourceType == targetType || (sourceType != null && sourceType.equals(targetType))) {
return source;
}
- return mediator.mediate(source, sourceType, targetType);
+ Map<Class<?>, Object> metadata = new HashMap<Class<?>, Object>();
+ metadata.put(CompositeComponent.class, compositeComponent);
+ return mediator.mediate(source, sourceType, targetType, metadata);
}
/**
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingJavaInterfaceProcessor.java Sun Sep 17 22:33:12 2006
@@ -43,7 +43,7 @@
contract.setDataBinding(interfaceDataType.name());
// FIXME: [rfeng] Keep data context as metadata?
for (DataContext c : interfaceDataType.context()) {
- contract.addMetaData(c.key(), c.value());
+ contract.setMetaData(c.key(), c.value());
}
}
for (Method method : clazz.getMethods()) {
@@ -57,7 +57,7 @@
operation.setDataBinding(dataBinding);
// FIXME: [rfeng] Keep data context as metadata?
for (DataContext c : operationDataType.context()) {
- operation.addMetaData(c.key(), c.value());
+ operation.setMetaData(c.key(), c.value());
}
for (org.apache.tuscany.spi.model.DataType<?> d : operation.getInputType().getLogical()) {
d.setDataBinding(dataBinding);
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingRegistryImpl.java Sun Sep 17 22:33:12 2006
@@ -35,6 +35,9 @@
* @see org.apache.tuscany.databinding.DataBindingRegistry#getDataBinding(java.lang.String)
*/
public DataBinding getDataBinding(String id) {
+ if (id == null) {
+ return null;
+ }
return bindings.get(id.toLowerCase());
}
@@ -49,6 +52,9 @@
* @see org.apache.tuscany.databinding.DataBindingRegistry#unregister(java.lang.String)
*/
public DataBinding unregister(String id) {
+ if (id == null) {
+ return null;
+ }
return bindings.remove(id.toLowerCase());
}
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/DataBindingWirePostProcessor.java Sun Sep 17 22:33:12 2006
@@ -60,11 +60,11 @@
getTargetOperation(target.getInvocationChains().keySet(), sourceOperation.getName());
String sourceDataBinding = getDataBinding(sourceOperation);
String targetDataBinding = getDataBinding(targetOperation);
- if (!sourceDataBinding.equals(targetDataBinding)) {
+ 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(source, sourceOperation, target, targetOperation);
+ new DataBindingInteceptor(source, sourceOperation, target, targetOperation);
interceptor.setMediator(mediator);
entry.getValue().addInterceptor(0, interceptor);
}
@@ -83,7 +83,7 @@
getTargetOperation(target.getInvocationChains().keySet(), sourceOperation.getName());
String sourceDataBinding = getDataBinding(sourceOperation);
String targetDataBinding = getDataBinding(targetOperation);
- if (!sourceDataBinding.equals(targetDataBinding)) {
+ if (sourceDataBinding == null || targetDataBinding == null || !sourceDataBinding.equals(targetDataBinding)) {
// Add the interceptor to the source side
DataBindingInteceptor interceptor =
new DataBindingInteceptor(source, sourceOperation, target, targetOperation);
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/MediatorImpl.java Sun Sep 17 22:33:12 2006
@@ -19,6 +19,7 @@
package org.apache.tuscany.databinding.impl;
import java.util.List;
+import java.util.Map;
import org.apache.tuscany.databinding.DataBindingRegistry;
import org.apache.tuscany.databinding.DataPipe;
@@ -58,10 +59,14 @@
/**
* @see org.apache.tuscany.databinding.Mediator#mediate(java.lang.Object, org.apache.tuscany.spi.model.DataType,
- * org.apache.tuscany.spi.model.DataType)
+ * org.apache.tuscany.spi.model.DataType, Map)
*/
@SuppressWarnings("unchecked")
- public Object mediate(Object source, DataType sourceDataType, DataType targetDataType) {
+ public Object mediate(
+ Object source,
+ DataType sourceDataType,
+ DataType targetDataType,
+ Map<Class<?>, Object> metadata) {
if (source == null) {
// Shortcut for null value
return null;
@@ -82,7 +87,7 @@
for (int i = 0; i < size; i++) {
Transformer transformer = path.get(i);
TransformationContext context =
- createTransformationContext(sourceDataType, targetDataType, size, i, transformer);
+ createTransformationContext(sourceDataType, targetDataType, size, i, transformer, metadata);
// the source and target type
if (transformer instanceof PullTransformer) {
// For intermediate node, set data type to null
@@ -102,7 +107,8 @@
DataType targetDataType,
int size,
int index,
- Transformer transformer) {
+ Transformer transformer,
+ Map<Class<?>, Object> metadata) {
DataType sourceType =
(index == 0) ? sourceDataType
: new DataType<Object>(transformer.getSourceBinding(), Object.class, null);
@@ -110,12 +116,17 @@
(index == size - 1) ? targetDataType : new DataType<Object>(transformer.getTargetBinding(),
Object.class, null);
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- TransformationContext context = new TransformationContextImpl(sourceType, targetType, classLoader);
+ TransformationContext context = new TransformationContextImpl(sourceType, targetType, classLoader, metadata);
return context;
}
@SuppressWarnings("unchecked")
- public void mediate(Object source, Object target, DataType sourceDataType, DataType targetDataType) {
+ public void mediate(
+ Object source,
+ Object target,
+ DataType sourceDataType,
+ DataType targetDataType,
+ Map<Class<?>, Object> metadata) {
if (source == null) {
// Shortcut for null value
return;
@@ -135,7 +146,7 @@
for (int i = 0; i < size; i++) {
Transformer transformer = path.get(i);
TransformationContext context =
- createTransformationContext(sourceDataType, targetDataType, size, i, transformer);
+ createTransformationContext(sourceDataType, targetDataType, size, i, transformer, metadata);
if (transformer instanceof PullTransformer) {
result = ((PullTransformer) transformer).transform(result, context);
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/TransformationContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/TransformationContextImpl.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/TransformationContextImpl.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/main/java/org/apache/tuscany/databinding/impl/TransformationContextImpl.java Sun Sep 17 22:33:12 2006
@@ -19,6 +19,8 @@
package org.apache.tuscany.databinding.impl;
import java.lang.ref.WeakReference;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.spi.model.DataType;
@@ -28,6 +30,8 @@
private DataType targetDataType;
+ private final Map<Class<?>, Object> metadata = new HashMap<Class<?>, Object>();
+
private WeakReference<ClassLoader> classLoaderRef;
public TransformationContextImpl() {
@@ -35,11 +39,15 @@
setClassLoader(Thread.currentThread().getContextClassLoader());
}
- public TransformationContextImpl(DataType sourceDataType, DataType targetDataType, ClassLoader classLoader) {
+ public TransformationContextImpl(DataType sourceDataType, DataType targetDataType, ClassLoader classLoader,
+ Map<Class<?>, Object> metadata) {
super();
this.sourceDataType = sourceDataType;
this.targetDataType = targetDataType;
setClassLoader(classLoader);
+ if (metadata != null) {
+ this.metadata.putAll(metadata);
+ }
}
public DataType getSourceDataType() {
@@ -64,6 +72,10 @@
public ClassLoader getClassLoader() {
return classLoaderRef.get();
+ }
+
+ public Map<Class<?>, Object> getMetadata() {
+ return metadata;
}
}
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=447254&r1=447253&r2=447254
==============================================================================
--- 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 Sun Sep 17 22:33:12 2006
@@ -26,15 +26,21 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.tuscany.databinding.Mediator;
+import org.apache.tuscany.spi.component.Component;
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.SCAObject;
import org.apache.tuscany.spi.model.DataType;
import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.wire.InboundWire;
import org.apache.tuscany.spi.wire.Interceptor;
import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.OutboundWire;
import org.easymock.EasyMock;
/**
@@ -54,6 +60,7 @@
* Test method for
* {@link org.apache.tuscany.databinding.impl.DataBindingInteceptor#invoke(org.apache.tuscany.spi.wire.Message)}.
*/
+ @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>>();
@@ -64,24 +71,35 @@
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);
+ 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");
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);
+
+ OutboundWire outboundWire = EasyMock.createMock(OutboundWire.class);
+ InboundWire inboundWire = EasyMock.createMock(InboundWire.class);
+ CompositeComponent composite = EasyMock.createMock(CompositeComponent.class);
+ Component component = EasyMock.createMock(Component.class);
+ EasyMock.expect(component.getParent()).andReturn(composite).once();
+ EasyMock.expect(outboundWire.getContainer()).andReturn(component);
+ EasyMock.replay(outboundWire, inboundWire, composite, component);
+
+ interceptor = new DataBindingInteceptor(outboundWire, operation1, inboundWire, 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(source, inputType1, inputType2)).andReturn(target);
+ 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))).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);
Modified: incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-framework/src/test/java/org/apache/tuscany/databinding/impl/MediatorImplTestCase.java Sun Sep 17 22:33:12 2006
@@ -83,7 +83,7 @@
public void testTransform1() {
TransformationContext context = createTransformationContext(String.class, Node.class);
- Object node = mediator.mediate(IPO_XML, context.getSourceDataType(), context.getTargetDataType());
+ Object node = mediator.mediate(IPO_XML, context.getSourceDataType(), context.getTargetDataType(), null);
Assert.assertTrue(node instanceof Document);
Element root = ((Document) node).getDocumentElement();
Assert.assertEquals(root.getNamespaceURI(), "http://www.example.com/IPO");
@@ -93,7 +93,7 @@
public void testTransform2() {
TransformationContext context = createTransformationContext(String.class, Writer.class);
Writer writer = new StringWriter();
- mediator.mediate(IPO_XML, writer, context.getSourceDataType(), context.getTargetDataType());
+ mediator.mediate(IPO_XML, writer, context.getSourceDataType(), context.getTargetDataType(), null);
String str = writer.toString();
Assert.assertTrue(str != null && str.indexOf("<shipDate>1999-12-05</shipDate>") != -1);
}
Added: incubator/tuscany/java/sca/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java?view=auto&rev=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java (added)
+++ incubator/tuscany/java/sca/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java Sun Sep 17 22:33:12 2006
@@ -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.databinding.jaxb;
+
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.databinding.TransformationContext;
+import org.apache.tuscany.databinding.TransformationException;
+import org.apache.tuscany.databinding.idl.WrapperHandler;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+
+/**
+ * JAXB WrapperHandler implementation
+ */
+public class JAXBWrapperHandler implements WrapperHandler<JAXBElement<?>> {
+
+ public JAXBElement<?> create(XmlSchemaElement element, TransformationContext context) {
+ try {
+ String packageName = null;
+ String factoryClassName = packageName + ".ObjectFactory";
+ Class<?> factoryClass = Class.forName(factoryClassName, true, context.getClassLoader());
+ assert factoryClass.isAnnotationPresent(XmlRegistry.class);
+ Object factory = factoryClass.newInstance();
+ QName elementName = element.getQName();
+ Method method = null;
+ for (Method m : factoryClass.getMethods()) {
+ XmlElementDecl xmlElement = m.getAnnotation(XmlElementDecl.class);
+ QName name = new QName(xmlElement.namespace(), xmlElement.name());
+ if (xmlElement != null && name.equals(elementName)) {
+ method = m;
+ break;
+ }
+ }
+ if (method != null) {
+ Class typeClass = method.getParameterTypes()[0];
+ Object value = typeClass.newInstance();
+ return (JAXBElement<?>) method.invoke(factory, new Object[] { value });
+ } else {
+ throw new TransformationException("ObjectFactory cannot be resolved.");
+ }
+ } catch (Exception e) {
+ throw new TransformationException(e);
+ }
+ }
+
+ public Object getChild(JAXBElement<?> wrapper, int i, XmlSchemaElement element) {
+ try {
+ Object value = wrapper.getValue();
+ PropertyDescriptor descriptors[] =
+ Introspector.getBeanInfo(wrapper.getDeclaredType()).getPropertyDescriptors();
+ for (PropertyDescriptor d : descriptors) {
+ if (d.getName().equals(element.getQName().getLocalPart())) {
+ return d.getReadMethod().invoke(value, new Object[] {});
+ }
+ }
+ return null;
+ } catch (Exception e) {
+ throw new TransformationException(e);
+ }
+ }
+
+ public void setChild(JAXBElement<?> wrapper, int i, XmlSchemaElement childElement, Object value) {
+ try {
+ Object wrapperValue = wrapper.getValue();
+ PropertyDescriptor descriptors[] =
+ Introspector.getBeanInfo(wrapper.getDeclaredType()).getPropertyDescriptors();
+ for (PropertyDescriptor d : descriptors) {
+ if (d.getName().equals(childElement.getQName().getLocalPart())) {
+ d.getWriteMethod().invoke(wrapperValue, new Object[] { value });
+ break;
+ }
+ }
+ } catch (Exception e) {
+ throw new TransformationException(e);
+ }
+ }
+
+}
Propchange: incubator/tuscany/java/sca/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBWrapperHandler.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2String.java Sun Sep 17 22:33:12 2006
@@ -20,22 +20,25 @@
import javax.xml.namespace.QName;
+import org.apache.tuscany.databinding.PullTransformer;
import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.databinding.TransformationException;
-import org.apache.tuscany.databinding.PullTransformer;
+import org.apache.tuscany.databinding.Transformer;
import org.apache.tuscany.databinding.extension.TransformerExtension;
import org.apache.tuscany.sdo.util.SDOUtil;
+import org.osoa.sca.annotations.Service;
import commonj.sdo.DataObject;
import commonj.sdo.helper.TypeHelper;
import commonj.sdo.helper.XMLHelper;
+@Service(Transformer.class)
public class DataObject2String extends TransformerExtension<DataObject, String> implements
PullTransformer<DataObject, String> {
public String transform(DataObject source, TransformationContext context) {
try {
- TypeHelper typeHelper = SDODataTypeHelper.getTypeHelper(context, true);
+ TypeHelper typeHelper = SDODataTypeHelper.getTypeHelper(context);
XMLHelper xmlHelper = SDOUtil.createXMLHelper(typeHelper);
Object logicalType = context.getSourceDataType().getLogical();
if (logicalType instanceof QName) {
Modified: incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/DataObject2XMLStreamReader.java Sun Sep 17 22:33:12 2006
@@ -25,31 +25,32 @@
import org.apache.tuscany.databinding.TransformationContext;
import org.apache.tuscany.databinding.PullTransformer;
import org.apache.tuscany.databinding.TransformationException;
+import org.apache.tuscany.databinding.Transformer;
import org.apache.tuscany.databinding.extension.TransformerExtension;
import org.apache.tuscany.sdo.helper.XMLStreamHelper;
import org.apache.tuscany.sdo.util.SDOUtil;
+import org.osoa.sca.annotations.Service;
import commonj.sdo.DataObject;
import commonj.sdo.helper.TypeHelper;
import commonj.sdo.helper.XMLDocument;
import commonj.sdo.helper.XMLHelper;
+@Service(Transformer.class)
public class DataObject2XMLStreamReader extends TransformerExtension<DataObject, XMLStreamReader> implements
PullTransformer<DataObject, XMLStreamReader> {
public XMLStreamReader transform(DataObject source, TransformationContext context) {
try {
- TypeHelper typeHelper = SDODataTypeHelper.getTypeHelper(context, true);
+ TypeHelper typeHelper = SDODataTypeHelper.getTypeHelper(context);
XMLStreamHelper streamHelper = SDOUtil.createXMLStreamHelper(typeHelper);
Object logicalType = context.getSourceDataType().getLogical();
- if (logicalType instanceof QName) {
- QName elementName = (QName) logicalType;
- XMLHelper xmlHelper = SDOUtil.createXMLHelper(typeHelper);
- XMLDocument document = xmlHelper.createDocument(source, elementName.getNamespaceURI(), elementName.getLocalPart());
- return streamHelper.createXMLStreamReader(document);
- } else {
- return streamHelper.createXMLStreamReader(source);
- }
+ QName elementName =
+ (logicalType instanceof QName) ? (QName) logicalType : new QName("commonj.sdo", "dataObject");
+ XMLHelper xmlHelper = SDOUtil.createXMLHelper(typeHelper);
+ XMLDocument document =
+ xmlHelper.createDocument(source, elementName.getNamespaceURI(), elementName.getLocalPart());
+ return streamHelper.createXMLStreamReader(document);
} catch (XMLStreamException e) {
// TODO: Add context to the exception
throw new TransformationException(e);
Modified: incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java?view=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDODataBinding.java Sun Sep 17 22:33:12 2006
@@ -22,6 +22,7 @@
import javax.xml.namespace.QName;
import org.apache.tuscany.databinding.extension.DataBindingExtension;
+import org.apache.tuscany.databinding.idl.WrapperHandler;
import org.apache.tuscany.spi.model.DataType;
import commonj.sdo.DataObject;
@@ -33,7 +34,8 @@
*
*/
public class SDODataBinding extends DataBindingExtension {
-
+ private WrapperHandler<Object> wrapperHandler;
+
@Override
public DataType introspect(Class<?> javaType) {
if (javaType == DataObject.class) {
@@ -52,6 +54,12 @@
public SDODataBinding() {
super(DataObject.class);
+ wrapperHandler = new SDOWrapperHandler();
+ }
+
+ @Override
+ public WrapperHandler getWrapperHandler() {
+ return wrapperHandler;
}
}
Modified: 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=diff&rev=447254&r1=447253&r2=447254
==============================================================================
--- incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java (original)
+++ incubator/tuscany/java/sca/databinding/databinding-sdo/src/main/java/org/apache/tuscany/databinding/sdo/SDOWrapperHandler.java Sun Sep 17 22:33:12 2006
@@ -36,13 +36,13 @@
/**
* SDO Wrapper Handler
*/
-public class SDOWrapperHandler implements WrapperHandler<XMLDocument> {
+public class SDOWrapperHandler implements WrapperHandler<Object> {
/**
* @see org.apache.tuscany.databinding.idl.WrapperHandler#create(org.apache.ws.commons.schema.XmlSchemaElement,
* TransformationContext)
*/
- public XMLDocument create(XmlSchemaElement element, TransformationContext context) {
+ public Object create(XmlSchemaElement element, TransformationContext context) {
TypeHelper typeHelper = TypeHelper.INSTANCE;
if (context != null) {
DataType targetType = context.getTargetDataType();
@@ -64,16 +64,20 @@
* @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());
+ public Object getChild(Object wrapper, int i, XmlSchemaElement element) {
+ DataObject wrapperDO =
+ (wrapper instanceof XMLDocument) ? ((XMLDocument) wrapper).getRootObject() : (DataObject) wrapper;
+ return wrapperDO.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);
+ public void setChild(Object wrapper, int i, XmlSchemaElement childElement, Object value) {
+ DataObject wrapperDO =
+ (wrapper instanceof XMLDocument) ? ((XMLDocument) wrapper).getRootObject() : (DataObject) wrapper;
+ wrapperDO.set(childElement.getName(), value);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org