You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by Vamsavardhana Reddy <c1...@gmail.com> on 2009/04/24 09:02:16 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

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

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

Posted by Raymond Feng <en...@gmail.com>.
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