You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by Raymond Feng <en...@gmail.com> on 2009/04/24 17:41:14 UTC

Re: 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/implementa

Thank you for catching this. I ran the build with JDK 6 where the JAX-WS API is built-in. I'll fix it soon.
Raymond


From: Vamsavardhana Reddy 
Sent: Friday, April 24, 2009 12:02 AM
To: dev@tuscany.apache.org 
Subject: Re: 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/implementa


Raymond,

I think this commit resulted in a compilation problem in interface-java module due to missing dependency on jaxws-api.



On Thu, Apr 23, 2009 at 11:53 PM, <rf...@apache.org> wrote:

  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>






-- 
Vamsi