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 2009/04/23 20:23:07 UTC

svn commit: r768005 - in /tuscany/branches/sca-java-1.x: modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/ modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/ modules/implementation-j...

Author: rfeng
Date: Thu Apr 23 18:23:06 2009
New Revision: 768005

URL: http://svn.apache.org/viewvc?rev=768005&view=rev
Log:
Improve the handling of INOUT and OUT parameters using JAX-WS Holder

Added:
    tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/ParameterMode.java
Modified:
    tuscany/branches/sca-java-1.x/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestOperation.java
    tuscany/branches/sca-java-1.x/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
    tuscany/branches/sca-java-1.x/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java
    tuscany/branches/sca-java-1.x/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
    tuscany/branches/sca-java-1.x/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
    tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java
    tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java
    tuscany/branches/sca-java-1.x/samples/pom.xml

Modified: tuscany/branches/sca-java-1.x/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestOperation.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestOperation.java?rev=768005&r1=768004&r2=768005&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestOperation.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestOperation.java Thu Apr 23 18:23:06 2009
@@ -6,15 +6,15 @@
  * 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.    
+ * under the License.
  */
 
 package org.apache.tuscany.sca.binding.corba.testing.service.mocks;
@@ -28,6 +28,7 @@
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.Interface;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.ParameterMode;
 import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.apache.tuscany.sca.policy.Intent;
@@ -78,7 +79,7 @@
     public WrapperInfo getInputWrapper() {
         return null;
     }
-    
+
     public WrapperInfo getOutputWrapper() {
         return null;
     }
@@ -98,7 +99,7 @@
     public boolean isInputWrapperStyle() {
         return false;
     }
-    
+
     public boolean isOutputWrapperStyle() {
         return false;
     }
@@ -150,7 +151,7 @@
     public void setInputWrapper(WrapperInfo wrapperInfo) {
 
     }
-    
+
     public void setOutputWrapper(WrapperInfo wrapperInfo) {
 
     }
@@ -158,7 +159,7 @@
     public void setInputWrapperStyle(boolean wrapperStyle) {
 
     }
-    
+
     public void setOutputWrapperStyle(boolean wrapperStyle) {
 
     }
@@ -187,4 +188,8 @@
     public void setType(IntentAttachPointType type) {
     }
 
+    public List<ParameterMode> getParameterModes() {
+        return null;
+    }
+
 }

Modified: tuscany/branches/sca-java-1.x/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java?rev=768005&r1=768004&r2=768005&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java (original)
+++ tuscany/branches/sca-java-1.x/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java Thu Apr 23 18:23:06 2009
@@ -46,6 +46,7 @@
 import org.apache.tuscany.sca.interfacedef.Interface;
 import org.apache.tuscany.sca.interfacedef.InterfaceContract;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.ParameterMode;
 import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
 import org.apache.tuscany.sca.invocation.InvocationChain;
 import org.apache.tuscany.sca.invocation.Invoker;
@@ -154,18 +155,15 @@
 
         Object result = invoke(chain, args, wire, source);
 
-        Operation operation = chain.getTargetOperation();
+        Operation operation = chain.getSourceOperation();
         if (operation != null && operation.getInterface().isRemotable()) {
+            List<DataType> inputTypes = operation.getInputType().getLogical();
             // Returned Holder data <T> are placed back in Holder<T>.
-            Class<?>[] parameters = method.getParameterTypes();
-            if (parameters != null) {
-                for (int i = 0; i < parameters.length; i++) {
-                    Class<?> parameterType = parameters[i];
-                    if (Holder.class == parameterType) {
-                        // Pop results and place in holder (demote).
-                        Holder holder = (Holder)args[i];
-                        holder.value = result;
-                    }
+            for (int i = 0, size = inputTypes.size(); i < size; i++) {
+                if (operation.getParameterModes().get(i) != ParameterMode.IN) {
+                    // Pop results and place in holder (demote).
+                    Holder holder = (Holder)args[i];
+                    holder.value = result;
                 }
             }
         }
@@ -295,7 +293,7 @@
         // Holder pattern. Items stored in a Holder<T> are promoted to T.
         // After the invoke, the returned data <T> are placed back in Holder<T>.
         if (operation != null && operation.getInterface().isRemotable()) {
-            args = promoteHolderArgs(args);
+            args = promoteHolderArgs(chain.getSourceOperation(), args);
         }
         msg.setBody(args);
 
@@ -543,16 +541,16 @@
      * @param args containing Holders and other objects.
      * @return Object []
      */
-    protected static Object[] promoteHolderArgs(Object[] args) {
+    protected static Object[] promoteHolderArgs(Operation operation, Object[] args) {
         if (args == null)
             return args;
 
         Object[] promotedArgs = new Object[args.length];
-
+        List<ParameterMode> modes = operation.getParameterModes();
         for (int i = 0; i < args.length; i++) {
             Object argument = args[i];
             if (argument != null) {
-                if (isHolder(argument)) {
+                if (modes.get(i) != ParameterMode.IN) {
                     promotedArgs[i] = ((Holder)argument).value;
                 } else {
                     promotedArgs[i] = args[i];

Modified: tuscany/branches/sca-java-1.x/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java?rev=768005&r1=768004&r2=768005&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java (original)
+++ tuscany/branches/sca-java-1.x/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationInvoker.java Thu Apr 23 18:23:06 2009
@@ -33,6 +33,7 @@
 import org.apache.tuscany.sca.interfacedef.ConversationSequence;
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.ParameterMode;
 import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil;
 import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
 import org.apache.tuscany.sca.invocation.Invoker;
@@ -72,7 +73,6 @@
 
     @SuppressWarnings("unchecked")
     public Message invoke(Message msg) {
-        int argumentHolderCount = 0;
         Operation op = msg.getOperation();
         if (op == null) {
             op = this.operation;
@@ -130,28 +130,21 @@
                 }
             }
 
+            int argumentHolderCount = 0;
+
             // Holder pattern. Any payload parameters <T> which are should be in holders are placed in Holder<T>.
             // Only check Holder for remotable interfaces
             if (imethod != null && op.getInterface().isRemotable()) {
-                Class<?>[] params = imethod.getParameterTypes();
-                if (params != null) {
-                    for (int i = 0; i < params.length; i++) {
-                        Class<?> parameter = params[i];
-                        if (Holder.class == parameter) {
-                            // System.out.println( "JavaImplementationInvoker.invoke parameter " + i + " is Holder. Payload isArray=" + (payload != null ? payload.getClass().isArray() : "null" ));
-                            if (payload != null && !payload.getClass().isArray()) {
-                                // Promote single param from <T> to Holder<T>
-                                payload = new Holder(payload);
-                            } else {
-                                // Promote array params from [<T>] to [Holder<T>]
-                                Object[] payloadArray = (Object[])payload;
-                                for (int j = 0; payloadArray != null && j < payloadArray.length; j++) {
-                                    Object item = payloadArray[j];
-                                    payloadArray[j] = new Holder(item);
-                                }
-                            }
-                            argumentHolderCount++;
+                List<DataType> inputTypes = op.getInputType().getLogical();
+                for (int i = 0, size = inputTypes.size(); i < size; i++) {
+                    if (ParameterMode.IN != op.getParameterModes().get(i)) {
+                        // Promote array params from [<T>] to [Holder<T>]
+                        Object[] payloadArray = (Object[])payload;
+                        for (int j = 0; payloadArray != null && j < payloadArray.length; j++) {
+                            Object item = payloadArray[j];
+                            payloadArray[j] = new Holder(item);
                         }
+                        argumentHolderCount++;
                     }
                 }
             }
@@ -175,29 +168,16 @@
             if (argumentHolderCount > 0) {
                 // Holder pattern. Any payload Holder<T> types are returned as the message body.
                 List returnArgs = new ArrayList<Object>();
-                int foundHolders = 0;
                 if (imethod != null) {
-                    Class<?>[] params = imethod.getParameterTypes();
-                    if (params != null) {
-                        for (int i = 0; i < params.length; i++) {
-                            Class<?> parameter = params[i];
-                            // System.out.println( "JavaImplementationInvoker.invoke return parameter " + i + " type=" + parameter.getClass().getName() );
-                            if (Holder.class == parameter) {
-                                if (payload != null && !payload.getClass().isArray()) {
-                                    // Demote params from Holder<T> to <T>.
-                                    Holder<Object> holder = (Holder<Object>)payload;
-                                    returnArgs.add(holder.value);
-                                    foundHolders++;
-                                } else {
-                                    // Demote array params from Holder<T> to <T>.
-                                    Object[] payloadArray = (Object[])payload;
-                                    for (int j = 0; j < payloadArray.length; j++) {
-                                        Holder<Object> item = (Holder<Object>)payloadArray[j];
-                                        payloadArray[j] = item.value;
-                                        returnArgs.add(payloadArray[j]);
-                                    }
-                                    foundHolders++;
-                                }
+                    for (int i = 0, size = op.getParameterModes().size(); i < size; i++) {
+                        // System.out.println( "JavaImplementationInvoker.invoke return parameter " + i + " type=" + parameter.getClass().getName() );
+                        if (ParameterMode.IN != op.getParameterModes().get(i)) {
+                            // Demote array params from Holder<T> to <T>.
+                            Object[] payloadArray = (Object[])payload;
+                            for (int j = 0; j < payloadArray.length; j++) {
+                                Holder<Object> item = (Holder<Object>)payloadArray[j];
+                                payloadArray[j] = item.value;
+                                returnArgs.add(payloadArray[j]);
                             }
                         }
                     }
@@ -205,15 +185,10 @@
                 // Although payload items are returned in a list, currently only support 1 return type.
                 if (returnArgs.size() == 1) {
                     Object value = returnArgs.get(0);
-                    if ((value != null) && (value.getClass().isArray())) {
-                        Object[] values = (Object[])value;
-                        if ((values != null) && (values.length > 0)) {
-                            msg.setBody(values[0]);
-                        }
-                    } else
-                        msg.setBody(value);
-                } else
+                    msg.setBody(value);
+                } else {
                     msg.setBody(returnArgs.toArray());
+                }
             } else {
                 msg.setBody(ret);
             }

Modified: tuscany/branches/sca-java-1.x/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java?rev=768005&r1=768004&r2=768005&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java (original)
+++ tuscany/branches/sca-java-1.x/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java Thu Apr 23 18:23:06 2009
@@ -6,15 +6,15 @@
  * 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.    
+ * under the License.
  */
 
 package org.apache.tuscany.sca.interfacedef.java.jaxws;
@@ -33,6 +33,7 @@
 import javax.jws.WebParam;
 import javax.jws.WebResult;
 import javax.jws.WebService;
+import javax.jws.WebParam.Mode;
 import javax.jws.soap.SOAPBinding;
 import javax.jws.soap.SOAPBinding.Style;
 import javax.xml.namespace.QName;
@@ -47,6 +48,7 @@
 import org.apache.tuscany.sca.interfacedef.FaultExceptionMapper;
 import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.ParameterMode;
 import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
@@ -59,7 +61,7 @@
 
 /**
  * Introspect the java class/interface with JSR-181 and JAXWS annotations
- * 
+ *
  * @version $Rev$ $Date$
  */
 public class JAXWSJavaInterfaceProcessor implements JavaInterfaceVisitor {
@@ -91,6 +93,16 @@
         }
     }
 
+    private ParameterMode getParameterMode(WebParam.Mode mode) {
+        if (mode == Mode.INOUT) {
+            return ParameterMode.INOUT;
+        } else if (mode == Mode.OUT) {
+            return ParameterMode.OUT;
+        } else {
+            return ParameterMode.IN;
+        }
+    }
+
     public void visitInterface(JavaInterface contract) throws InvalidInterfaceException {
 
         final Class<?> clazz = contract.getJavaClass();
@@ -170,6 +182,7 @@
                         if (logical instanceof XMLType) {
                             ((XMLType)logical).setElementName(element);
                         }
+                        operation.getParameterModes().set(i, getParameterMode(param.mode()));
                     }
                 }
                 WebResult result = method.getAnnotation(WebResult.class);
@@ -279,6 +292,9 @@
                         type = ((XMLType)logical).getTypeName();
                     }
                     inputElements.add(new ElementInfo(element, new TypeInfo(type, false, null)));
+                    if (param != null) {
+                        operation.getParameterModes().set(i, getParameterMode(param.mode()));
+                    }
                 }
 
                 List<ElementInfo> outputElements = new ArrayList<ElementInfo>();
@@ -301,11 +317,11 @@
                 }
 
                 String db = inputWrapperDT != null ? inputWrapperDT.getDataBinding() : JAXB_DATABINDING;
-                
+
                 WrapperInfo inputWrapperInfo =
                     new WrapperInfo(db, new ElementInfo(inputWrapper, null), inputElements);
                 WrapperInfo outputWrapperInfo =
-                    new WrapperInfo(db, new ElementInfo(outputWrapper, null), outputElements);  
+                    new WrapperInfo(db, new ElementInfo(outputWrapper, null), outputElements);
 
                 inputWrapperInfo.setWrapperType(inputWrapperDT);
                 outputWrapperInfo.setWrapperType(outputWrapperDT);

Modified: tuscany/branches/sca-java-1.x/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java?rev=768005&r1=768004&r2=768005&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java (original)
+++ tuscany/branches/sca-java-1.x/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java Thu Apr 23 18:23:06 2009
@@ -6,15 +6,15 @@
  * 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.    
+ * under the License.
  */
 package org.apache.tuscany.sca.interfacedef.java.impl;
 
@@ -33,6 +33,7 @@
 import java.util.Set;
 
 import javax.xml.namespace.QName;
+import javax.xml.ws.Holder;
 
 import org.apache.tuscany.sca.interfacedef.ConversationSequence;
 import org.apache.tuscany.sca.interfacedef.DataType;
@@ -41,6 +42,7 @@
 import org.apache.tuscany.sca.interfacedef.InvalidOperationException;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.OverloadedOperationException;
+import org.apache.tuscany.sca.interfacedef.ParameterMode;
 import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
@@ -55,7 +57,7 @@
 
 /**
  * Default implementation of a Java interface introspector.
- * 
+ *
  * @version $Rev$ $Date$
  */
 public class JavaInterfaceIntrospectorImpl {
@@ -219,6 +221,9 @@
                 conversationSequence = ConversationSequence.CONVERSATION_CONTINUE;
             }
 
+            JavaOperation operation = new JavaOperationImpl();
+            operation.setName(name);
+
             // Set outputType to null for void
             XMLType xmlReturnType = new XMLType(new QName(ns, "return"), null);
             DataType<XMLType> returnDataType =
@@ -233,16 +238,19 @@
                 XMLType xmlParamType = new XMLType(new QName(ns, "arg" + i), null);
                 DataTypeImpl<XMLType> xmlDataType = new DataTypeImpl<XMLType>(
                     UNKNOWN_DATABINDING, paramType, genericParamTypes[i],xmlParamType);
+                ParameterMode mode = ParameterMode.IN;
                 // Holder pattern. Physical types of Holder<T> classes are updated to <T> to aid in transformations.
-                if ( isHolder( paramType )) {
+                if ( Holder.class == paramType ) {
                     Type firstActual = getFirstActualType( genericParamTypes[ i ] );
                     if ( firstActual != null ) {
                         xmlDataType.setPhysical( (Class<?>)firstActual );
+                        mode = ParameterMode.INOUT;
                     }
                 }
                 paramDataTypes.add( xmlDataType);
+                operation.getParameterModes().add(mode);
             }
-            
+
             // Fault types
             List<DataType> faultDataTypes = new ArrayList<DataType>(faultTypes.length);
             Type[] genericFaultTypes = method.getGenericExceptionTypes();
@@ -262,8 +270,6 @@
 
             DataType<List<DataType>> inputType =
                 new DataTypeImpl<List<DataType>>(IDL_INPUT, Object[].class, paramDataTypes);
-            JavaOperation operation = new JavaOperationImpl();
-            operation.setName(name);
             operation.setInputType(inputType);
             operation.setOutputType(returnDataType);
             operation.setFaultTypes(faultDataTypes);
@@ -276,18 +282,6 @@
     }
 
     /**
-     * Given a Class, tells if it is a Holder by comparing to "javax.xml.ws.Holder"
-     * @param testClass
-     * @return boolean whether testClass is Holder type.
-     */
-    protected static boolean isHolder( Class testClass ) {
-        if ( testClass.getName().startsWith( "javax.xml.ws.Holder" )) {
-            return true;
-        }
-        return false;        
-    }
-
-    /**
      * Given a Class<T>, returns T, otherwise null.
      * @param testClass
      * @return

Modified: tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java?rev=768005&r1=768004&r2=768005&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java (original)
+++ tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java Thu Apr 23 18:23:06 2009
@@ -6,15 +6,15 @@
  * 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.    
+ * under the License.
  */
 package org.apache.tuscany.sca.interfacedef;
 
@@ -35,28 +35,28 @@
 public interface Operation extends Cloneable, PolicySetAttachPoint {
     /**
      * Returns the name of the operation.
-     * 
+     *
      * @return the name of the operation
      */
     String getName();
 
     /**
      * Sets the name of the operation.
-     * 
+     *
      * @param name the name of the operation
      */
     void setName(String name);
 
     /**
      * Returns true if the model element is unresolved.
-     * 
+     *
      * @return true if the model element is unresolved.
      */
     boolean isUnresolved();
 
     /**
      * Sets whether the model element is unresolved.
-     * 
+     *
      * @param unresolved whether the model element is unresolved
      */
     void setUnresolved(boolean unresolved);
@@ -64,11 +64,11 @@
     /**
      * Get the data type that represents the input of this operation. The logic
      * type is a list of data types and each element represents a parameter
-     * 
+     *
      * @return the inputType
      */
     DataType<List<DataType>> getInputType();
-    
+
     /**
      * @param inputType
      */
@@ -76,11 +76,11 @@
 
     /**
      * Get the data type for the output
-     * 
+     *
      * @return the outputType
      */
     DataType getOutputType();
-    
+
     /**
      * @param outputType
      */
@@ -88,51 +88,51 @@
 
     /**
      * Get a list of data types to represent the faults/exceptions
-     * 
+     *
      * @return the faultTypes
      */
     List<DataType> getFaultTypes();
-    
+
     /**
      * @param faultTypes
      */
     void setFaultTypes(List<DataType> faultTypes);
-    
+
     /**
      * Get the owning interface
      * @return
      */
     Interface getInterface();
-    
+
     /**
      * Set the owning interface
      * @param interfaze
      */
     void setInterface(Interface interfaze);
-    
+
     /**
      * Get the sequence of the conversation
      * @return
      */
     ConversationSequence getConversationSequence();
-    
+
     /**
      * Set the sequence of conversation for the operation
      * @param sequence
      */
     void setConversationSequence(ConversationSequence sequence);
-    
+
     /**
      * Indicate if the operation is non-blocking
      * @return
      */
     boolean isNonBlocking();
-    
+
     /**
      * Set the operation to be non-blocking
      */
     void setNonBlocking(boolean nonBlocking);
-        
+
     /**
      * @return the inputWrapperInfo
      */
@@ -142,7 +142,7 @@
      * @param wrapperInfo the inputWrapperInfo to set
      */
     void setInputWrapper(WrapperInfo wrapperInfo);
-    
+
     /**
      * @return the outputWrapperInfo
      */
@@ -152,7 +152,7 @@
      * @param wrapperInfo the outputWrapperInfo to set
      */
     // TODO - WI
-    void setOutputWrapper(WrapperInfo wrapperInfo);    
+    void setOutputWrapper(WrapperInfo wrapperInfo);
 
     /**
      * @return the inputWrapperStyle
@@ -163,7 +163,7 @@
      * @param inputWrapperStyle the wrapperStyle to set
      */
     void setInputWrapperStyle(boolean wrapperStyle);
-    
+
     /**
      * @return the outputWrapperStyle
      */
@@ -173,7 +173,7 @@
      * @param outputWrapperStyle the wrapperStyle to set
      */
     void setOutputWrapperStyle(boolean wrapperStyle);
-    
+
     /**
      * @deprecated This should be the WrapperInfo.getDataBinding()
      * Get the databinding for the operation
@@ -181,7 +181,7 @@
      */
     @Deprecated
     String getDataBinding();
-    
+
     /**
      * @deprecated This should be the WrapperInfo.setDataBinding()
      * Set the databinding for the operation
@@ -189,10 +189,10 @@
      */
     @Deprecated
     void setDataBinding(String dataBinding);
-    
+
     /**
      * Returns true if the operation is dynamic.
-     * 
+     *
      * @return true if the operation is dynamic otherwise false
      */
     boolean isDynamic();
@@ -205,11 +205,11 @@
 
     /**
      * Get the synthesized fault beans for this operation
-     * 
+     *
      * @return the fault beans
      */
     Map<QName, List<DataType<XMLType>>> getFaultBeans();
-    
+
     /**
      * Set the synthesized fault beans for this operation
      * @param faultBeans
@@ -220,5 +220,7 @@
      * Implementations must support cloning.
      */
     Object clone() throws CloneNotSupportedException;
-    
+
+    List<ParameterMode> getParameterModes();
+
 }

Added: tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/ParameterMode.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/ParameterMode.java?rev=768005&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/ParameterMode.java (added)
+++ tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/ParameterMode.java Thu Apr 23 18:23:06 2009
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.interfacedef;
+
+/**
+ * Parameter mode
+ * @see http://java.sun.com/javase/6/docs/api/javax/jws/WebParam.Mode.html
+ */
+public enum ParameterMode {
+    IN, OUT, INOUT;
+}

Modified: tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java?rev=768005&r1=768004&r2=768005&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java (original)
+++ tuscany/branches/sca-java-1.x/modules/interface/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java Thu Apr 23 18:23:06 2009
@@ -6,15 +6,15 @@
  * 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.    
+ * under the License.
  */
 package org.apache.tuscany.sca.interfacedef.impl;
 
@@ -29,6 +29,7 @@
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.Interface;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.ParameterMode;
 import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.apache.tuscany.sca.policy.Intent;
@@ -37,7 +38,7 @@
 
 /**
  * Represents an operation on a service interface.
- * 
+ *
  * @version $Rev$ $Date$
  */
 public class OperationImpl implements Operation {
@@ -49,6 +50,7 @@
     private List<DataType> faultTypes;
     private Interface interfaze;
     private ConversationSequence conversationSequence = ConversationSequence.CONVERSATION_NONE;
+    private List<ParameterMode> parameterModes = new ArrayList<ParameterMode>();
     private boolean nonBlocking;
     // TODO - WI
     //private WrapperInfo wrapper;
@@ -58,7 +60,7 @@
     private WrapperInfo outputWrapper;
     private boolean dynamic;
     private Map<QName, List<DataType<XMLType>>> faultBeans;
-    
+
     private List<PolicySet> applicablePolicySets = new ArrayList<PolicySet>();
     private List<PolicySet> policySets = new ArrayList<PolicySet>();
     private List<Intent> requiredIntents = new ArrayList<Intent>();
@@ -254,19 +256,19 @@
     //public void setWrapper(WrapperInfo wrapperInfo) {
     //    this.wrapper = wrapperInfo;
     //}
-    
+
     public WrapperInfo getInputWrapper() {
         return inputWrapper;
     }
-    
+
     public void setInputWrapper(WrapperInfo inputWrapper) {
         this.inputWrapper = inputWrapper;
     }
-    
+
     public WrapperInfo getOutputWrapper() {
         return outputWrapper;
     }
-    
+
     public void setOutputWrapper(WrapperInfo outputWrapper) {
         this.outputWrapper = outputWrapper;
     }
@@ -284,7 +286,7 @@
     public void setInputWrapperStyle(boolean wrapperStyle) {
         this.inputWrapperStyle = wrapperStyle;
     }
-    
+
     /**
      * @return the outputWrapperStyle
      */
@@ -297,8 +299,8 @@
      */
     public void setOutputWrapperStyle(boolean wrapperStyle) {
         this.outputWrapperStyle = wrapperStyle;
-    }    
-    
+    }
+
     // TODO - WI
     // These are deprecated and are a little awkward now that
     // we split input wrapper from output wrapper
@@ -322,11 +324,11 @@
     public void setDynamic(boolean b) {
         this.dynamic = b;
     }
-    
+
     public Map<QName, List<DataType<XMLType>>> getFaultBeans() {
         return faultBeans;
     }
-    
+
     public void setFaultBeans(Map<QName, List<DataType<XMLType>>> faultBeans) {
         this.faultBeans = faultBeans;
     }
@@ -334,7 +336,7 @@
     @Override
     public OperationImpl clone() throws CloneNotSupportedException {
         OperationImpl copy = (OperationImpl) super.clone();
-        
+
         final List<DataType> clonedFaultTypes = new ArrayList<DataType>(this.faultTypes.size());
         for (DataType t : this.faultTypes) {
             clonedFaultTypes.add((DataType) t.clone());
@@ -350,11 +352,11 @@
             new DataTypeImpl<List<DataType>>(inputType.getPhysical(), clonedLogicalTypes);
         clonedInputType.setDataBinding(inputType.getDataBinding());
         copy.inputType = clonedInputType;
-        
+
         if (this.outputType != null) {
             copy.outputType = (DataType) this.outputType.clone();
         }
-        
+
         return copy;
     }
 
@@ -377,5 +379,9 @@
     public void setType(IntentAttachPointType type) {
         this.type = type;
     }
-    
+
+    public List<ParameterMode> getParameterModes() {
+        return parameterModes;
+    }
+
 }

Modified: tuscany/branches/sca-java-1.x/samples/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/samples/pom.xml?rev=768005&r1=768004&r2=768005&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/samples/pom.xml (original)
+++ tuscany/branches/sca-java-1.x/samples/pom.xml Thu Apr 23 18:23:06 2009
@@ -86,9 +86,7 @@
                 <module>helloworld-ws-reference-secure</module>
                 <module>helloworld-ws-sdo</module>
                 <module>helloworld-ws-sdo-webapp</module>
-		<!--
                 <module>holder-ws-service</module>
-		-->
                 <module>implementation-composite</module>
                 <module>implementation-crud</module>
                 <module>implementation-crud-extension</module>