You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2006/04/29 12:08:34 UTC

svn commit: r398113 - in /incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2: handler/ loader/ util/

Author: antelder
Date: Sat Apr 29 03:08:31 2006
New Revision: 398113

URL: http://svn.apache.org/viewcvs?rev=398113&view=rev
Log:
Start of the weekends Axis2 binding refactoring, goals being:
- move to having each operation pre-prepared as much as possible
- use the TuscanyHost stuff to get the servlet registered
- get ready for Axis2 1.0
- fix a few bugs

Added:
    incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/DataBinding.java
    incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/SDODataBinding.java
Modified:
    incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java
    incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java
    incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/loader/WebServiceBindingLoader.java
    incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/AxiomHelper.java

Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java?rev=398113&r1=398112&r2=398113&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java Sat Apr 29 03:08:31 2006
@@ -16,123 +16,67 @@
  */
 package org.apache.tuscany.binding.axis2.handler;
 
-import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.xml.namespace.QName;
 
-import commonj.sdo.helper.TypeHelper;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver;
-
-import org.apache.tuscany.binding.axis2.util.AxiomHelper;
-import org.apache.tuscany.core.context.EntryPointContext;
-
+import org.apache.tuscany.binding.axis2.util.DataBinding;
+import org.apache.tuscany.core.wire.InvocationRuntimeException;
 import org.apache.ws.commons.om.OMElement;
-import org.apache.ws.commons.soap.SOAPBody;
 import org.apache.ws.commons.soap.SOAPEnvelope;
-import org.apache.ws.commons.soap.SOAPFactory;
-import org.apache.wsdl.WSDLConstants;
-
+import org.apache.ws.commons.soap.SOAPProcessingException;
 
 public class WebServiceEntryPointInOutSyncMessageReceiver extends AbstractInOutSyncMessageReceiver {
-    public static final String MEP_URL = WSDLConstants.MEP_URI_IN_OUT;
 
-    private final EntryPointContext entryPointContext;
-    private final TypeHelper typeHelper;
-    private final ClassLoader classLoader;
-    private final Map<String, QName> responseTypeMap;
-    private final Map<String, Method> methodMap;
-
-    /**
-     * Constructor WebServiceEntryPointInOutSyncMessageReceiver
-     *
-     * @param context
-     * @param wsdlPortInfo
-     */
-    public WebServiceEntryPointInOutSyncMessageReceiver(EntryPointContext context,
-                                                        WebServicePortMetaData wsdlPortInfo,
-                                                        TypeHelper typeHelper,
-                                                        ClassLoader classLoader) {
-        this.entryPointContext = context;
-        Class<?> serviceInterface = entryPointContext.getServiceInterface();
-//        Class<?> serviceInterface = entryPoint.getConfiguredService().getPort()
-//                .getServiceContract().getInterface();
-        Method[] methods = serviceInterface.getMethods();
-        Map<String, Method> map = new HashMap<String, Method>(methods.length);
-        for (Method method : methods) {
-            map.put(method.getName(), method);
-        }
+    private Object entryPointProxy;
 
-        // initialize maps
-        List<WebServiceOperationMetaData> operations = wsdlPortInfo.getAllOperationMetaData();
-        responseTypeMap = new HashMap<String, QName>(operations.size());
-        methodMap = new HashMap<String, Method>(operations.size());
-        for (WebServiceOperationMetaData operation : operations) {
-            String opName = operation.getBindingOperation().getOperation().getName();
-            QName qname = operation.getOutputPart(0).getElementName();
-            responseTypeMap.put(opName, qname);
+    protected Method operationMethod;
 
-            Method method = map.get(opName);
-            methodMap.put(opName, method);
-        }
+    protected DataBinding dataBinding;
 
-        this.typeHelper = typeHelper;
-        this.classLoader = classLoader;
+    public WebServiceEntryPointInOutSyncMessageReceiver(Object entryPointProxy, Method operationMethod, DataBinding dataBinding) {
+        this.entryPointProxy = entryPointProxy;
+        this.operationMethod = operationMethod;
+        this.dataBinding = dataBinding;
     }
 
-    public void invokeBusinessLogic(MessageContext msgContext,
-                                    MessageContext outMsgContext)
-        throws AxisFault {
-        
-        // set application classloader onto the thread
-        ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
+    @Override
+    public void invokeBusinessLogic(MessageContext inMC, MessageContext outMC) throws AxisFault {
+        ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+        ClassLoader mycl = getClass().getClassLoader();
         try {
-            Thread.currentThread().setContextClassLoader(classLoader);
-
-            // get operation name from request message
-            AxisOperation axisOperation = msgContext.getAxisOperation();
-            String axisOperationName = axisOperation.getName().getLocalPart();
-
-            // de-serialize request parameters to objects
-            OMElement requestOM = msgContext.getEnvelope().getBody().getFirstElement();
-            Object[] args = AxiomHelper.toObjects(typeHelper, requestOM);
-
-            // invoke the proxy's InvocationHandler
-            // FIXME we should be invoking the Tuscany pipeline rather than the proxy
-            Method operationMethod = methodMap.get(axisOperationName);
-            InvocationHandler handler = (InvocationHandler) entryPointContext.getHandler();
-            Object response = handler.invoke(null, operationMethod, args);
-
-            // construct the response message
-            SOAPFactory fac = getSOAPFactory(msgContext);
-            SOAPEnvelope soapenv = fac.getDefaultEnvelope();
-            SOAPBody soapbody = soapenv.getBody();
-
-            // serialize the wire respose into the message
-            QName responseTypeQN = responseTypeMap.get(axisOperationName);
-            OMElement responseOM = AxiomHelper.toOMElement(typeHelper,
-                                                           new Object[]{response},
-                                                           responseTypeQN);
-            soapbody.addChild(responseOM);
-
-            outMsgContext.setEnvelope(soapenv);
-            outMsgContext.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new AxisFault("Error creating DataObject from Soapenvelope. "
-                                + e.getClass() + ' ' + e.getMessage(), e);
-        } catch (Throwable e) {
-            e.printStackTrace();
-            throw new AxisFault("Error creating DataObject from Soapenvelope. "
-                                + e.getClass() + ' ' + e.getMessage(), e);
+            if (tccl != mycl) {
+                Thread.currentThread().setContextClassLoader(mycl);
+            }
+            try {
+
+                invokeEntryPoint(inMC, outMC);
+
+            } catch (Exception e) {
+                throw new InvocationRuntimeException(e);
+            }
         } finally {
-            Thread.currentThread().setContextClassLoader(oldCl);
+            if (tccl != mycl) {
+                Thread.currentThread().setContextClassLoader(tccl);
+            }
         }
     }
+
+    protected void invokeEntryPoint(MessageContext inMC, MessageContext outMC) throws IllegalArgumentException, IllegalAccessException,
+            InvocationTargetException, SOAPProcessingException, AxisFault {
+
+        OMElement requestOM = inMC.getEnvelope().getBody().getFirstElement();
+        Object[] request = dataBinding.processRequest(requestOM);
+        Object response = operationMethod.invoke(entryPointProxy, request);
+        OMElement responseOM = dataBinding.processResponse(response);
+
+        SOAPEnvelope soapEnvelope = getSOAPFactory(inMC).getDefaultEnvelope();
+        soapEnvelope.getBody().addChild(responseOM);
+        outMC.setEnvelope(soapEnvelope);
+        outMC.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
+    }
+
 }

Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java?rev=398113&r1=398112&r2=398113&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java Sat Apr 29 03:08:31 2006
@@ -21,7 +21,9 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.Method;
 import java.net.URL;
+
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
@@ -29,7 +31,6 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.wsdl.Definition;
 import javax.wsdl.Operation;
-import javax.wsdl.Port;
 import javax.wsdl.PortType;
 import javax.xml.namespace.QName;
 
@@ -42,19 +43,25 @@
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.transport.http.AxisServlet;
 import org.apache.tuscany.binding.axis2.assembly.WebServiceBinding;
+import org.apache.tuscany.binding.axis2.util.DataBinding;
+import org.apache.tuscany.binding.axis2.util.SDODataBinding;
 import org.apache.tuscany.core.context.CompositeContext;
-import org.apache.tuscany.core.context.Context;
 import org.apache.tuscany.core.context.EntryPointContext;
+import org.apache.tuscany.core.webapp.TuscanyServletListener;
 import org.apache.tuscany.model.assembly.Binding;
 import org.apache.tuscany.model.assembly.EntryPoint;
 import org.apache.tuscany.model.assembly.Module;
+import org.apache.wsdl.WSDLConstants;
+
+import commonj.sdo.helper.TypeHelper;
 
 /**
  * @version $Rev: 383148 $ $Date: 2006-03-04 08:07:17 -0800 (Sat, 04 Mar 2006) $
  */
 public class WebServiceEntryPointServlet extends AxisServlet {
-    private static final long serialVersionUID = -2085869393709833372L;
-    private static final String MODULE_COMPONENT_NAME = "org.apache.tuscany.core.webapp.ModuleComponentContext";
+
+    private static final long serialVersionUID = 1L;
+
     private boolean tuscanyGetDefaultAxis2xmlChecked;
 
     public void init(ServletConfig config) throws ServletException {
@@ -64,13 +71,14 @@
             if (tccl != mycl) {
                 Thread.currentThread().setContextClassLoader(mycl);
             }
-            tuscanyGetDefaultAxis2xml(config);
-            super.init(config);
-            configContext = initConfigContext(config);
-            initTuscany(configContext.getAxisConfiguration(), config);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new ServletException(e);
+            try {
+
+                super.init(config);
+                initTuscany(configContext.getAxisConfiguration(), config);
+
+            } catch (Exception e) {
+                throw new ServletException(e);
+            }
         } finally {
             if (tccl != mycl) {
                 Thread.currentThread().setContextClassLoader(tccl);
@@ -79,63 +87,84 @@
     }
 
     @SuppressWarnings("deprecation")
-    private void initTuscany(final AxisConfiguration axisConfig, ServletConfig config) throws AxisFault {
+    private void initTuscany(AxisConfiguration axisConfig, ServletConfig config) throws AxisFault {
 
-        // Get the current SCA module context
         ServletContext servletContext = config.getServletContext();
-
-        CompositeContext moduleContext = (CompositeContext) servletContext.getAttribute(MODULE_COMPONENT_NAME);
+        CompositeContext moduleContext = (CompositeContext) servletContext.getAttribute(TuscanyServletListener.MODULE_COMPONENT_NAME);
         Module module = (Module) moduleContext.getComposite();
 
         for (EntryPoint entryPoint : module.getEntryPoints()) {
-            final String epName = entryPoint.getName();
+            for (Binding binding : entryPoint.getBindings()) {
+                if (binding instanceof WebServiceBinding) {
+                    String entryPointName = entryPoint.getName();
+                    EntryPointContext entryPointContext = (EntryPointContext) moduleContext.getContext(entryPointName);
+                    addAxisService(axisConfig, entryPointName, entryPointContext, (WebServiceBinding) binding);
+                }
+            }
+        }
+    }
 
-            Context entryPointContext = moduleContext.getContext(epName);
+    private void addAxisService(AxisConfiguration axisConfig, String entryPointName, EntryPointContext entryPointContext, WebServiceBinding wsBinding)
+            throws AxisFault {
 
-            Binding binding = entryPoint.getBindings().get(0);
-            if (!(binding instanceof WebServiceBinding)) {
-                continue;
-            }
-
-            WebServiceBinding wsBinding = (WebServiceBinding) binding;
-            Definition definition = wsBinding.getWSDLDefinition();
-            Port port = wsBinding.getWSDLPort();
-            QName qname = new QName(definition.getTargetNamespace(), port.getName());
-
-            WebServicePortMetaData wsdlPortInfo = new WebServicePortMetaData(definition, port, null, false);
-
-            WebServiceEntryPointInOutSyncMessageReceiver msgrec
-                    = new WebServiceEntryPointInOutSyncMessageReceiver((EntryPointContext) entryPointContext,
-                    wsdlPortInfo,
-                    wsBinding.getTypeHelper(),
-                    wsBinding.getResourceLoader().getClassLoader());
-
-            AxisServiceGroup serviceGroup = new AxisServiceGroup(axisConfig);
-            axisConfig.addMessageReceiver(WebServiceEntryPointInOutSyncMessageReceiver.MEP_URL, msgrec);
-            serviceGroup.setServiceGroupName(wsdlPortInfo.getServiceName().getLocalPart());
-
-            AxisService axisService = new AxisService(epName);
-            axisService.setParent(serviceGroup);
-            axisService.setWSDLDefinition(definition);
-            axisService.setServiceDescription("Tuscany configured service EntryPoint name '" + epName + '\'');
-            axisService.addMessageReceiver(WebServiceEntryPointInOutSyncMessageReceiver.MEP_URL, msgrec);
-
-            // Create operation descriptions for all the operations
-            PortType wsdlPortType = wsdlPortInfo.getPortType();
-            for (Object o : wsdlPortType.getOperations()) {
-                Operation wsdlOperation = (Operation) o;
-                String operationName = wsdlOperation.getName();
-                QName name = new QName(qname.getNamespaceURI(), operationName);
-                AxisOperation axisOp = new InOutAxisOperation(name);
-                axisOp.setMessageReceiver(msgrec);
-                axisService.addOperation(axisOp);
-                axisOp.setMessageExchangePattern(WebServiceEntryPointInOutSyncMessageReceiver.MEP_URL);
-            }
-            axisConfig.addService(axisService);
-            axisConfig.addServiceGroup(serviceGroup);
+        // TODO: really require using WebServicePortMetaData/WebServiceOperationMetaData?
+        Definition definition = wsBinding.getWSDLDefinition();
+        WebServicePortMetaData wsdlPortInfo = new WebServicePortMetaData(definition, wsBinding.getWSDLPort(), null, false);
+
+        AxisServiceGroup serviceGroup = new AxisServiceGroup(axisConfig);
+        serviceGroup.setServiceGroupName(wsdlPortInfo.getServiceName().getLocalPart());
+        axisConfig.addServiceGroup(serviceGroup);
+
+        AxisService axisService = new AxisService(entryPointName);
+        axisService.setParent(serviceGroup);
+        axisService.setWSDLDefinition(definition);
+        axisService.setServiceDescription("Tuscany configured service EntryPoint name '" + entryPointName + '\'');
+
+        TypeHelper typeHelper = wsBinding.getTypeHelper();
+
+        Class<?> serviceInterface = entryPointContext.getServiceInterface();
+
+        PortType wsdlPortType = wsdlPortInfo.getPortType();
+        for (Object o : wsdlPortType.getOperations()) {
+            Operation wsdlOperation = (Operation) o;
+            String operationName = wsdlOperation.getName();
+            QName operationQN = new QName(definition.getTargetNamespace(), operationName);
+            Object entryPointProxy = entryPointContext.getInstance(null);
+
+            WebServiceOperationMetaData omd = wsdlPortInfo.getOperationMetaData(operationName);
+            QName responseTypeQN = omd.getOutputPart(0).getElementName();
+
+            Method operationMethod = getMethod(serviceInterface, operationName);
+            DataBinding dataBinding = new SDODataBinding(typeHelper, responseTypeQN);
+            WebServiceEntryPointInOutSyncMessageReceiver msgrec = new WebServiceEntryPointInOutSyncMessageReceiver(entryPointProxy, operationMethod,
+                    dataBinding);
+
+            AxisOperation axisOp = new InOutAxisOperation(operationQN);
+            axisOp.setMessageExchangePattern(WSDLConstants.MEP_URI_IN_OUT);
+            axisOp.setMessageReceiver(msgrec);
+            axisService.addOperation(axisOp);
         }
+
+        axisConfig.addService(axisService);
     }
 
+    protected Method getMethod(Class<?> serviceInterface, String operationName) {
+        // Note: this doesn't support overloaded operations
+        Method[] methods = serviceInterface.getMethods();
+        for (Method m : methods) {
+            if (m.getName().equals(operationName)) {
+                return m;
+            }
+            // tolerate WSDL with capatalized operation name
+            StringBuffer sb = new StringBuffer(operationName);
+            sb.setCharAt(0, Character.toLowerCase(sb.charAt(0)));
+            if (m.getName().equals(sb.toString())) {
+                return m;
+            }
+        }
+        // TODO: throw which ex, or maybe just log and ignore unknown ops?
+        throw new RuntimeException("no operation named " + operationName + " found on service interface: " + serviceInterface.getName());
+    }
 
     @SuppressWarnings("deprecation")
     protected synchronized void tuscanyGetDefaultAxis2xml(ServletConfig config) throws IOException {
@@ -146,9 +175,7 @@
         tuscanyGetDefaultAxis2xmlChecked = true;
         ServletContext context = config.getServletContext();
         String repoDir = context.getRealPath("/WEB-INF");
-        String axis2config = repoDir +
-                "/" + DeploymentConstants.DIRECTORY_CONF +
-                "/" + DeploymentConstants.AXIS2_CONFIGURATION_XML;
+        String axis2config = repoDir + "/" + DeploymentConstants.DIRECTORY_CONF + "/" + DeploymentConstants.AXIS2_CONFIGURATION_XML;
 
         File axis2xmlFile = new File(axis2config);
         constructSubDirectories(axis2xmlFile.getParentFile());

Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/loader/WebServiceBindingLoader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/loader/WebServiceBindingLoader.java?rev=398113&r1=398112&r2=398113&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/loader/WebServiceBindingLoader.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/loader/WebServiceBindingLoader.java Sat Apr 29 03:08:31 2006
@@ -59,6 +59,7 @@
         registry.unregisterLoader(BINDING_WS, this);
     }
 
+    @SuppressWarnings("deprecation")
     public WebServiceBinding load(XMLStreamReader reader,
             LoaderContext loaderContext)
         throws XMLStreamException, ConfigurationLoadException {

Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/AxiomHelper.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/AxiomHelper.java?rev=398113&r1=398112&r2=398113&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/AxiomHelper.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/AxiomHelper.java Sat Apr 29 03:08:31 2006
@@ -19,9 +19,6 @@
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
 import java.util.List;
 
 import javax.xml.namespace.QName;
@@ -30,12 +27,6 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
-import commonj.sdo.DataObject;
-import commonj.sdo.Property;
-import commonj.sdo.helper.TypeHelper;
-import commonj.sdo.helper.XMLDocument;
-import commonj.sdo.helper.XSDHelper;
-
 import org.apache.tuscany.sdo.helper.DataFactoryImpl;
 import org.apache.tuscany.sdo.helper.XMLHelperImpl;
 import org.apache.tuscany.sdo.helper.XSDHelperImpl;
@@ -45,6 +36,11 @@
 import org.apache.ws.commons.om.impl.llom.factory.OMXMLBuilderFactory;
 import org.osoa.sca.ServiceRuntimeException;
 
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.helper.TypeHelper;
+import commonj.sdo.helper.XMLDocument;
+import commonj.sdo.helper.XSDHelper;
 
 /**
  * Utility methods to convert between Axis2 AXIOM, SDO DataObjects and Java objects.

Added: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/DataBinding.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/DataBinding.java?rev=398113&view=auto
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/DataBinding.java (added)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/DataBinding.java Sat Apr 29 03:08:31 2006
@@ -0,0 +1,26 @@
+/**
+ *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  Licensed 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.binding.axis2.util;
+
+import org.apache.ws.commons.om.OMElement;
+
+public interface DataBinding {
+
+    Object[] processRequest(OMElement omElement);
+
+    OMElement processResponse(Object response);
+
+}

Added: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/SDODataBinding.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/SDODataBinding.java?rev=398113&view=auto
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/SDODataBinding.java (added)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/SDODataBinding.java Sat Apr 29 03:08:31 2006
@@ -0,0 +1,45 @@
+/**
+ *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  Licensed 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.binding.axis2.util;
+
+import javax.xml.namespace.QName;
+
+import org.apache.ws.commons.om.OMElement;
+
+import commonj.sdo.helper.TypeHelper;
+
+public class SDODataBinding implements DataBinding {
+
+    private TypeHelper typeHelper;
+
+    private QName typeQN;
+
+    public SDODataBinding(TypeHelper typeHelper, QName typeQN) {
+        this.typeHelper = typeHelper;
+        this.typeQN = typeQN;
+    }
+
+    public Object[] processRequest(OMElement omElement) {
+        Object[] args = AxiomHelper.toObjects(typeHelper, omElement);
+        return args;
+    }
+
+    public OMElement processResponse(Object response) {
+        OMElement omElement = AxiomHelper.toOMElement(typeHelper, new Object[] { response }, typeQN);
+        return omElement;
+    }
+
+}