tomee-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From d...@apache.org
Subject svn commit: r591858 [7/13] - in /openejb/trunk/openejb3: ./ assembly/openejb-tomcat/ assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/ container/openejb-core/ container/openejb-core/src/main/java/org/apache/openejb/ container/openejb-cor...
Date Sun, 04 Nov 2007 22:42:06 GMT
Added: openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/NoOverrideCallbackFilter.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/NoOverrideCallbackFilter.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/NoOverrideCallbackFilter.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/NoOverrideCallbackFilter.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,71 @@
+/**
+ *  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.openejb.server.axis.client;
+
+import net.sf.cglib.proxy.CallbackFilter;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+
+public class NoOverrideCallbackFilter implements CallbackFilter {
+    private Class superClass;
+
+    public NoOverrideCallbackFilter(Class superClass) {
+        this.superClass = superClass;
+    }
+
+    public int accept(Method method) {
+        // we don't intercept non-public methods like finalize
+        if (!Modifier.isPublic(method.getModifiers())) {
+            return 0;
+        }
+
+        if (method.getName().equals("remove") && Modifier.isAbstract(method.getModifiers())) {
+            return 1;
+        }
+
+        try {
+            // if the super class defined this method don't intercept
+            superClass.getMethod(method.getName(), method.getParameterTypes());
+            return 0;
+        } catch (Throwable e) {
+            return 1;
+        }
+    }
+
+    public boolean equals(Object other) {
+        if (other == null) {
+            return false;
+        }
+        if (other == this) {
+            return true;
+        }
+
+        NoOverrideCallbackFilter otherFilter = null;
+        if (other instanceof NoOverrideCallbackFilter) {
+            otherFilter = (NoOverrideCallbackFilter) other;
+        } else {
+            return false;
+        }
+
+        return superClass.equals(otherFilter.superClass);
+    }
+
+    public int hashCode() {
+        return superClass.hashCode();
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/OperationInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/OperationInfo.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/OperationInfo.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/OperationInfo.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,91 @@
+/**
+ *  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.openejb.server.axis.client;
+
+import net.sf.cglib.core.Signature;
+import org.apache.axis.AxisFault;
+import org.apache.axis.client.Call;
+import org.apache.axis.description.OperationDesc;
+import org.apache.axis.soap.SOAPConstants;
+
+import javax.xml.namespace.QName;
+import java.rmi.RemoteException;
+
+public class OperationInfo {
+    private final OperationDesc operationDesc;
+    private final boolean useSOAPAction;
+    private final String soapActionURI;
+    private final SOAPConstants soapVersion;
+    private final QName operationName;
+    private final String methodName;
+    private final String methodDesc;
+
+    public OperationInfo(OperationDesc operationDesc, boolean useSOAPAction, String soapActionURI, SOAPConstants soapVersion, QName operationName, String methodName, String methodDesc) {
+        this.operationDesc = operationDesc;
+        this.useSOAPAction = useSOAPAction;
+        this.soapActionURI = soapActionURI;
+        this.soapVersion = soapVersion;
+        this.operationName = operationName;
+        this.methodName = methodName;
+        this.methodDesc = methodDesc;
+    }
+
+    public Signature getSignature() {
+        return new Signature(methodName, methodDesc);
+    }
+
+    public OperationDesc getOperationDesc() {
+        return operationDesc;
+    }
+
+    public boolean isUseSOAPAction() {
+        return useSOAPAction;
+    }
+
+    public String getSoapActionURI() {
+        return soapActionURI;
+    }
+
+    public SOAPConstants getSoapVersion() {
+        return soapVersion;
+    }
+
+    public QName getOperationName() {
+        return operationName;
+    }
+
+    public void prepareCall(Call call) {
+        call.setOperation(operationDesc);
+        call.setUseSOAPAction(useSOAPAction);
+        call.setSOAPActionURI(soapActionURI);
+        call.setSOAPVersion(soapVersion);
+        call.setOperationName(operationName);
+        //GAH!!!
+        call.setOperationStyle(operationDesc.getStyle());
+        call.setOperationUse(operationDesc.getUse());
+    }
+
+    public Throwable unwrapFault(RemoteException re) {
+        if (re instanceof AxisFault && re.getCause() != null) {
+            Throwable t = re.getCause();
+            if (operationDesc.getFaultByClass(t.getClass()) != null) {
+                return t;
+            }
+        }
+        return re;
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/SeiFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/SeiFactory.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/SeiFactory.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/SeiFactory.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,39 @@
+/**
+ *  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.openejb.server.axis.client;
+
+import java.net.URL;
+import java.rmi.Remote;
+
+import javax.xml.namespace.QName;
+import javax.xml.rpc.ServiceException;
+import javax.xml.rpc.handler.HandlerChain;
+
+public interface SeiFactory {
+
+    Remote createServiceEndpoint() throws ServiceException;
+
+    HandlerChain createHandlerChain();
+
+    OperationInfo[] getOperationInfos();
+
+    QName getPortQName();
+
+    QName getServiceName();
+
+    URL getWSDLDocumentLocation();    
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/SeiFactoryImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/SeiFactoryImpl.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/SeiFactoryImpl.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/SeiFactoryImpl.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,182 @@
+/**
+ *  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.openejb.server.axis.client;
+
+import net.sf.cglib.core.Signature;
+import net.sf.cglib.proxy.Callback;
+import net.sf.cglib.proxy.Enhancer;
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
+import net.sf.cglib.proxy.NoOp;
+import net.sf.cglib.reflect.FastClass;
+import net.sf.cglib.reflect.FastConstructor;
+import org.apache.axis.AxisEngine;
+import org.apache.axis.Constants;
+import org.apache.axis.client.Service;
+import org.apache.axis.constants.Use;
+import org.apache.axis.description.TypeDesc;
+import org.apache.axis.encoding.TypeMapping;
+import org.apache.axis.encoding.TypeMappingRegistry;
+import org.apache.axis.encoding.ser.SimpleDeserializerFactory;
+import org.apache.axis.encoding.ser.SimpleSerializerFactory;
+import org.apache.axis.handlers.HandlerInfoChainFactory;
+
+import javax.xml.namespace.QName;
+import javax.xml.rpc.ServiceException;
+import javax.xml.rpc.handler.HandlerChain;
+import java.lang.reflect.InvocationTargetException;
+import java.math.BigInteger;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.rmi.Remote;
+import java.util.Iterator;
+import java.util.List;
+
+public class SeiFactoryImpl implements SeiFactory {
+    private final QName serviceName;
+    private final QName portQName;
+    private final String serviceEndpointClassName;
+    private final OperationInfo[] operationInfos;
+    private FastConstructor constructor;
+    private Object serviceImpl;
+    private final List typeInfo;
+    private final URL location;
+    private final List handlerInfos;
+    private final String credentialsName;
+    private HandlerInfoChainFactory handlerInfoChainFactory;
+    private OperationInfo[] sortedOperationInfos;
+    private Class serviceEndpointClass;
+
+    public SeiFactoryImpl(QName serviceName,
+            String portName,
+            String serviceEndpointClassName,
+            OperationInfo[] operationInfos,
+            List typeInfo,
+            URL location,
+            List handlerInfos,
+            String credentialsName) {
+        this.serviceName = serviceName;
+        this.portQName = new QName("", portName);
+        this.serviceEndpointClassName = serviceEndpointClassName;
+        this.operationInfos = operationInfos;
+        this.typeInfo = typeInfo;
+        this.location = location;
+        this.handlerInfos = handlerInfos;
+        this.credentialsName = credentialsName;
+    }
+
+    void initialize(Object serviceImpl, ClassLoader classLoader) throws ClassNotFoundException {
+        this.serviceImpl = serviceImpl;
+        Class serviceEndpointBaseClass = classLoader.loadClass(serviceEndpointClassName);
+        serviceEndpointClass = enhanceServiceEndpointInterface(serviceEndpointBaseClass, classLoader);
+        Class[] constructorTypes = new Class[]{classLoader.loadClass(GenericServiceEndpoint.class.getName())};
+        this.constructor = FastClass.create(serviceEndpointClass).getConstructor(constructorTypes);
+        this.handlerInfoChainFactory = new HandlerInfoChainFactory(handlerInfos);
+        sortedOperationInfos = new OperationInfo[FastClass.create(serviceEndpointClass).getMaxIndex() + 1];
+        String encodingStyle = "";
+        for (int i = 0; i < operationInfos.length; i++) {
+            OperationInfo operationInfo = operationInfos[i];
+            Signature signature = operationInfo.getSignature();
+            MethodProxy methodProxy = MethodProxy.find(serviceEndpointClass, signature);
+            if (methodProxy == null) {
+                throw new RuntimeException("No method proxy for operationInfo " + signature);
+            }
+            int index = methodProxy.getSuperIndex();
+            sortedOperationInfos[index] = operationInfo;
+            if (operationInfo.getOperationDesc().getUse() == Use.ENCODED) {
+                encodingStyle = org.apache.axis.Constants.URI_SOAP11_ENC;
+            }
+        }
+        //register our type descriptors
+        Service service = ((ServiceImpl) serviceImpl).getService();
+        AxisEngine axisEngine = service.getEngine();
+        TypeMappingRegistry typeMappingRegistry = axisEngine.getTypeMappingRegistry();
+        TypeMapping typeMapping = typeMappingRegistry.getOrMakeTypeMapping(encodingStyle);
+        typeMapping.register(BigInteger.class, Constants.XSD_UNSIGNEDLONG, new SimpleSerializerFactory(BigInteger.class, Constants.XSD_UNSIGNEDLONG), new SimpleDeserializerFactory(BigInteger.class, Constants.XSD_UNSIGNEDLONG));
+        typeMapping.register(URI.class, Constants.XSD_ANYURI, new SimpleSerializerFactory(URI.class, Constants.XSD_ANYURI), new SimpleDeserializerFactory(URI.class, Constants.XSD_ANYURI));
+        //It is essential that the types be registered before the typeInfos create the serializer/deserializers.
+        for (Iterator iter = typeInfo.iterator(); iter.hasNext();) {
+            TypeInfo info = (TypeInfo) iter.next();
+            TypeDesc.registerTypeDescForClass(info.getClazz(), info.buildTypeDesc());
+        }
+        TypeInfo.register(typeInfo, typeMapping);
+    }
+
+    private Class enhanceServiceEndpointInterface(Class serviceEndpointInterface, ClassLoader classLoader) {
+        Enhancer enhancer = new Enhancer();
+        enhancer.setClassLoader(classLoader);
+        enhancer.setSuperclass(GenericServiceEndpointWrapper.class);
+        enhancer.setInterfaces(new Class[]{serviceEndpointInterface});
+        enhancer.setCallbackFilter(new NoOverrideCallbackFilter(GenericServiceEndpointWrapper.class));
+        enhancer.setCallbackTypes(new Class[]{NoOp.class, MethodInterceptor.class});
+        enhancer.setUseFactory(false);
+        enhancer.setUseCache(false);
+
+        return enhancer.createClass();
+    }
+
+    public Remote createServiceEndpoint() throws ServiceException {
+        //TODO figure out why this can't be called in readResolve!
+//        synchronized (this) {
+//            if (!initialized) {
+//                initialize();
+//                initialized = true;
+//            }
+//        }
+        Service service = ((ServiceImpl) serviceImpl).getService();
+        GenericServiceEndpoint serviceEndpoint = new GenericServiceEndpoint(portQName, service, location);
+        Callback callback = new ServiceEndpointMethodInterceptor(serviceEndpoint, sortedOperationInfos, credentialsName);
+        Callback[] callbacks = new Callback[]{NoOp.INSTANCE, callback};
+        Enhancer.registerCallbacks(serviceEndpointClass, callbacks);
+        try {
+            return (Remote) constructor.newInstance(new Object[]{serviceEndpoint});
+        } catch (InvocationTargetException e) {
+            throw (ServiceException) new ServiceException("Could not construct service instance", e.getTargetException()).initCause(e);
+        }
+    }
+
+    public HandlerChain createHandlerChain() {
+        return handlerInfoChainFactory.createHandlerChain();
+    }
+
+//    private Object readResolve() throws ObjectStreamException {
+//            SEIFactoryImpl seiFactory =  new SEIFactoryImpl(serviceName, portQName.getLocalPart(), serviceEndpointClassName, operationInfos, typeInfo, location, handlerInfos, credentialsName);
+//            seiFactory.initialize();
+//            return seiFactory;
+//    }
+
+    public OperationInfo[] getOperationInfos() {
+        return operationInfos;
+    }
+
+    public QName getPortQName() {
+        return portQName;
+    }
+
+    public QName getServiceName() {
+        return serviceName;
+    }
+
+    public URL getWSDLDocumentLocation() {
+        try {
+            return new URL(location.toExternalForm() + "?wsdl");
+        } catch (MalformedURLException e) {
+            return null;
+        }
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/ServiceEndpointMethodInterceptor.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/ServiceEndpointMethodInterceptor.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/ServiceEndpointMethodInterceptor.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/ServiceEndpointMethodInterceptor.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,156 @@
+/**
+ *   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.openejb.server.axis.client;
+
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
+import org.apache.axis.client.Call;
+import org.apache.axis.description.ParameterDesc;
+import org.apache.axis.utils.JavaUtils;
+import org.apache.openejb.server.webservices.saaj.SaajUniverse;
+
+import javax.wsdl.OperationType;
+import javax.xml.rpc.holders.Holder;
+import java.lang.reflect.Method;
+import java.rmi.RemoteException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+public class ServiceEndpointMethodInterceptor implements MethodInterceptor {
+    private final GenericServiceEndpoint stub;
+    private final OperationInfo[] operations;
+    private final String credentialsName;
+
+    public ServiceEndpointMethodInterceptor(GenericServiceEndpoint stub, OperationInfo[] operations, String credentialsName) {
+        this.stub = stub;
+        this.operations = operations;
+        this.credentialsName = credentialsName;
+    }
+
+    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
+        SaajUniverse universe = new SaajUniverse();
+        universe.set(SaajUniverse.AXIS1);
+        try {
+            return doIntercept(method, objects, methodProxy);
+        } finally {
+            universe.unset();
+        }
+    }
+
+    private Object doIntercept(Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
+        int index = methodProxy.getSuperIndex();
+        OperationInfo operationInfo = operations[index];
+        if (operationInfo == null) {
+            throw new RuntimeException("Operation not mapped: " + method.getName() + " index: " + index + "\n OperationInfos: " + Arrays.asList(operations));
+        }
+        stub.checkCachedEndpoint();
+
+        Call call = stub.createCall();
+
+        operationInfo.prepareCall(call);
+
+        stub.setUpCall(call);
+        if (credentialsName != null) {
+            throw new UnsupportedOperationException("Client side auth is not implementd");
+//            Subject subject = ContextManager.getNextCaller();
+//            if (subject == null) {
+//                throw new IllegalStateException("Subject missing but authentication turned on");
+//            } else {
+//                Set creds = subject.getPrivateCredentials(NamedUsernamePasswordCredential.class);
+//                boolean found = false;
+//                for (Iterator iterator = creds.iterator(); iterator.hasNext();) {
+//                    NamedUsernamePasswordCredential namedUsernamePasswordCredential = (NamedUsernamePasswordCredential) iterator.next();
+//                    if (credentialsName.equals(namedUsernamePasswordCredential.getName())) {
+//                        call.setUsername(namedUsernamePasswordCredential.getUsername());
+//                        call.setPassword(new String(namedUsernamePasswordCredential.getPassword()));
+//                        found = true;
+//                        break;
+//                    }
+//                }
+//                if (!found) {
+//                    throw new IllegalStateException("no NamedUsernamePasswordCredential found for name " + credentialsName);
+//                }
+//            }
+        }
+        Object response = null;
+        List parameterDescs = operationInfo.getOperationDesc().getParameters();
+        Object[] unwrapped = extractFromHolders(objects, parameterDescs, operationInfo.getOperationDesc().getNumInParams());
+        if (operationInfo.getOperationDesc().getMep() == OperationType.REQUEST_RESPONSE) {
+            try {
+                response = call.invoke(unwrapped);
+            } catch (RemoteException e) {
+                throw operationInfo.unwrapFault(e);
+            }
+
+            if (response instanceof RemoteException) {
+                throw operationInfo.unwrapFault((RemoteException) response);
+            } else {
+                stub.extractAttachments(call);
+                Map outputParameters = call.getOutputParams();
+                putInHolders(outputParameters, objects, parameterDescs);
+                Class returnType = operationInfo.getOperationDesc().getReturnClass();
+                //return type should never be null... but we are not objecting if wsdl-return-value-mapping is not set.
+                if (response == null || returnType == null || returnType.isAssignableFrom(response.getClass())) {
+                    return response;
+                } else {
+                    return JavaUtils.convert(response, returnType);
+                }
+            }
+        } else if (operationInfo.getOperationDesc().getMep() == OperationType.ONE_WAY) {
+            //one way
+            call.invokeOneWay(unwrapped);
+            return null;
+        } else {
+            throw new RuntimeException("Invalid messaging style: " + operationInfo.getOperationDesc().getMep());
+        }
+    }
+
+    private Object[] extractFromHolders(Object[] objects, List parameterDescs, int inParameterCount) throws JavaUtils.HolderException {
+        if (objects.length != parameterDescs.size()) {
+            throw new IllegalArgumentException("Mismatch parameter count: expected: " + parameterDescs.size() + ", actual: " + objects.length);
+        }
+        Object[] unwrapped = new Object[inParameterCount];
+        int j = 0;
+        for (int i = 0; objects != null && i < objects.length; i++) {
+            Object parameter = objects[i];
+            ParameterDesc parameterDesc = (ParameterDesc) parameterDescs.get(i);
+
+            if (parameterDesc.getMode() == ParameterDesc.INOUT) {
+                unwrapped[j++] = JavaUtils.getHolderValue(parameter);
+            } else if (parameterDesc.getMode() == ParameterDesc.IN) {
+                unwrapped[j++] = parameter;
+            }
+        }
+        return unwrapped;
+    }
+
+    private void putInHolders(Map outputParameters, Object[] objects, List parameterDescs) throws JavaUtils.HolderException {
+        for (int i = 0; i < objects.length; i++) {
+            Object parameter = objects[i];
+            ParameterDesc parameterDesc = (ParameterDesc) parameterDescs.get(i);
+            if ((parameterDesc.getMode() == ParameterDesc.INOUT) || (parameterDesc.getMode() == ParameterDesc.OUT)) {
+                Object returned = outputParameters.get(parameterDesc.getQName());
+                if (returned instanceof Holder) {
+                    //TODO this must be a bug somewhere!!!!
+                    returned = JavaUtils.getHolderValue(returned);
+                }
+                JavaUtils.setHolderValue(parameter, returned);
+            }
+        }
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/ServiceImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/ServiceImpl.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/ServiceImpl.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/ServiceImpl.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,150 @@
+/**
+ *  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.openejb.server.axis.client;
+
+import org.apache.axis.SimpleTargetedChain;
+import org.apache.axis.client.Service;
+import org.apache.axis.configuration.SimpleProvider;
+import org.apache.axis.encoding.TypeMappingRegistryImpl;
+import org.apache.axis.transport.http.HTTPSender;
+
+import javax.xml.namespace.QName;
+import javax.xml.rpc.Call;
+import javax.xml.rpc.ServiceException;
+import javax.xml.rpc.encoding.TypeMappingRegistry;
+import javax.xml.rpc.handler.HandlerRegistry;
+import java.net.URL;
+import java.rmi.Remote;
+import java.util.Iterator;
+import java.util.Map;
+
+public class ServiceImpl implements javax.xml.rpc.Service{
+    private final Service delegate;
+    private final Map seiClassNameToFactoryMap;
+    private final Map portToImplementationMap;
+
+    public ServiceImpl(Map portToImplementationMap, Map seiClassNameToFactoryMap) {
+        this.portToImplementationMap = portToImplementationMap;
+        this.seiClassNameToFactoryMap = seiClassNameToFactoryMap;
+
+        TypeMappingRegistryImpl typeMappingRegistry = new TypeMappingRegistryImpl();
+        typeMappingRegistry.doRegisterFromVersion("1.3");
+
+        SimpleProvider engineConfiguration = new SimpleProvider(typeMappingRegistry);
+        engineConfiguration.deployTransport("http", new SimpleTargetedChain(new HTTPSender()));
+
+        AxisClientImpl engine = new AxisClientImpl(engineConfiguration, this.portToImplementationMap);
+
+        delegate = new Service(engineConfiguration, engine);
+    }
+
+    public Remote getPort(QName qName, Class portClass) throws ServiceException {
+        if (qName != null) {
+            String portName = qName.getLocalPart();
+            Remote port = internalGetPort(portName);
+            return port;
+        }
+        return getPort(portClass);
+    }
+
+    public Remote getPort(Class portClass) throws ServiceException {
+        String fqcn = portClass.getName();
+        Remote port = internalGetPortFromClassName(fqcn);
+        return port;
+    }
+
+    public Call[] getCalls(QName portName) throws ServiceException {
+
+        if (portName == null) throw new ServiceException("Portname cannot be null");
+
+        SeiFactory factory = (SeiFactory) portToImplementationMap.get(portName.getLocalPart());
+        if (factory == null) throw new ServiceException("No port for portname: " + portName);
+
+        OperationInfo[] operationInfos = factory.getOperationInfos();
+        javax.xml.rpc.Call[] array = new javax.xml.rpc.Call[operationInfos.length];
+        for (int i = 0; i < operationInfos.length; i++) {
+            OperationInfo operation = operationInfos[i];
+            array[i] = delegate.createCall(factory.getPortQName(), operation.getOperationName());
+        }
+        return array;
+    }
+
+    public Call createCall(QName qName) throws ServiceException {
+        return delegate.createCall(qName);
+    }
+
+    public Call createCall(QName qName, QName qName1) throws ServiceException {
+        return delegate.createCall(qName, qName1);
+    }
+
+    public Call createCall(QName qName, String s) throws ServiceException {
+        return delegate.createCall(qName, s);
+    }
+
+    public Call createCall() throws ServiceException {
+        return delegate.createCall();
+    }
+
+    public QName getServiceName() {
+        Iterator iterator = portToImplementationMap.values().iterator();
+        if (!iterator.hasNext()) return null;
+        SeiFactory factory = (SeiFactory) iterator.next();
+        return factory.getServiceName();
+    }
+
+    public Iterator getPorts() throws ServiceException {
+        return portToImplementationMap.values().iterator();
+    }
+
+    public URL getWSDLDocumentLocation() {
+        Iterator iterator = portToImplementationMap.values().iterator();
+        if (!iterator.hasNext()) return null;
+        SeiFactory factory = (SeiFactory) iterator.next();
+        return factory.getWSDLDocumentLocation();
+    }
+
+    public TypeMappingRegistry getTypeMappingRegistry() {
+        throw new UnsupportedOperationException();
+        //return delegate.getTypeMappingRegistry();
+    }
+
+    public HandlerRegistry getHandlerRegistry() {
+        throw new UnsupportedOperationException();
+    }
+
+    Remote internalGetPort(String portName) throws ServiceException {
+        if (portToImplementationMap.containsKey(portName)) {
+            SeiFactory seiFactory = (SeiFactory) portToImplementationMap.get(portName);
+            Remote port = seiFactory.createServiceEndpoint();
+            return port;
+        }
+        throw new ServiceException("No port for portname: " + portName);
+    }
+
+    Remote internalGetPortFromClassName(String className) throws ServiceException {
+        if (seiClassNameToFactoryMap.containsKey(className)) {
+            SeiFactory seiFactory = (SeiFactory) seiClassNameToFactoryMap.get(className);
+            Remote port = seiFactory.createServiceEndpoint();
+            return port;
+        }
+        throw new ServiceException("no port for class " + className);
+    }
+
+    Service getService() {
+        return delegate;
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/ServiceMethodInterceptor.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/ServiceMethodInterceptor.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/ServiceMethodInterceptor.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/ServiceMethodInterceptor.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,46 @@
+/**
+ *  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.openejb.server.axis.client;
+
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
+
+import javax.xml.rpc.ServiceException;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+public class ServiceMethodInterceptor implements MethodInterceptor {
+    private final Map seiFactoryMap;
+
+    public ServiceMethodInterceptor(Map seiFactoryMap) {
+        this.seiFactoryMap = seiFactoryMap;
+    }
+
+    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
+        if (objects.length == 0) {
+            String methodName = method.getName();
+            if (methodName.startsWith("get")) {
+                String portName = methodName.substring(3);
+                SeiFactory seiFactory = (SeiFactory) seiFactoryMap.get(portName);
+                if (seiFactory != null) {
+                    return seiFactory.createServiceEndpoint();
+                }
+            }
+        }
+        throw new ServiceException("Unrecognized method name or argument list: " + method.getName());
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/TypeInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/TypeInfo.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/TypeInfo.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/main/java/org/apache/openejb/server/axis/client/TypeInfo.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,140 @@
+/**
+ *  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.openejb.server.axis.client;
+
+import org.apache.axis.description.FieldDesc;
+import org.apache.axis.description.TypeDesc;
+import org.apache.axis.encoding.ser.BaseDeserializerFactory;
+import org.apache.axis.encoding.ser.BaseSerializerFactory;
+
+import javax.xml.namespace.QName;
+import javax.xml.rpc.encoding.DeserializerFactory;
+import javax.xml.rpc.encoding.SerializerFactory;
+import javax.xml.rpc.encoding.TypeMapping;
+import java.util.Iterator;
+import java.util.List;
+
+public class TypeInfo {
+    private final Class clazz;
+    private final QName qName;
+    private final Class serFactoryClass;
+    private final Class deserFactoryClass;
+    private final boolean canSearchParents;
+    private final FieldDesc[] fields;
+
+    public static void register(List typeInfo, TypeMapping typeMapping) {
+        for (Iterator iter = typeInfo.iterator(); iter.hasNext();) {
+            TypeInfo info = (TypeInfo) iter.next();
+            info.register(typeMapping);
+        }
+    }
+
+    public TypeInfo(Class clazz, QName qName, Class serializerClass, Class deserializerClass, boolean canSearchParents, FieldDesc[] fields) {
+        this.clazz = clazz;
+        this.qName = qName;
+        this.serFactoryClass = serializerClass;
+        this.deserFactoryClass = deserializerClass;
+        this.canSearchParents = canSearchParents;
+        this.fields = fields;
+    }
+
+    public Class getClazz() {
+        return clazz;
+    }
+
+    public QName getqName() {
+        return qName;
+    }
+
+    public Class getSerFactoryClass() {
+        return serFactoryClass;
+    }
+
+    public Class getDeserFactoryClass() {
+        return deserFactoryClass;
+    }
+
+    public boolean isCanSearchParents() {
+        return canSearchParents;
+    }
+
+    public FieldDesc[] getFields() {
+        return fields;
+    }
+
+    public TypeDesc buildTypeDesc() {
+        TypeDesc typeDesc = new TypeDesc(clazz, canSearchParents);
+        typeDesc.setXmlType(qName);
+        typeDesc.setFields(fields);
+        return typeDesc;
+    }
+
+    public void register(TypeMapping typeMapping) {
+        SerializerFactory ser = BaseSerializerFactory.createFactory(serFactoryClass, clazz, qName);
+        DeserializerFactory deser = BaseDeserializerFactory.createFactory(deserFactoryClass, clazz, qName);
+
+        typeMapping.register(clazz, qName, ser, deser);
+    }
+
+    public static class UpdatableTypeInfo {
+        protected Class clazz;
+        protected QName qName;
+        protected Class serializerClass;
+        protected Class deserializerClass;
+        protected boolean canSearchParents;
+        protected FieldDesc[] fields;
+
+        public TypeInfo buildTypeInfo() {
+            if (null == clazz) {
+                throw new IllegalStateException("clazz is null");
+            } else if (null == qName) {
+                throw new IllegalStateException("qName is null");
+            } else if (null == serializerClass) {
+                throw new IllegalStateException("serializerClass is null");
+            } else if (null == deserializerClass) {
+                throw new IllegalStateException("deserializerClass is null");
+            } else if (null == fields) {
+                throw new IllegalStateException("fields is null");
+            }
+            return new TypeInfo(clazz, qName, serializerClass, deserializerClass, canSearchParents, fields);
+        }
+
+        public void setClazz(Class clazz) {
+            this.clazz = clazz;
+        }
+
+        public void setDeserializerClass(Class deserializerClass) {
+            this.deserializerClass = deserializerClass;
+        }
+
+        public void setFields(FieldDesc[] fields) {
+            this.fields = fields;
+        }
+
+        public void setQName(QName name) {
+            qName = name;
+        }
+
+        public void setSerializerClass(Class serializerClass) {
+            this.serializerClass = serializerClass;
+        }
+
+        public void setCanSearchParents(boolean canSearchParents) {
+            this.canSearchParents = canSearchParents;
+        }
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AbstractTestCase.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AbstractTestCase.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AbstractTestCase.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AbstractTestCase.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,52 @@
+/*
+ *  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.openejb.server.axis;
+
+import junit.framework.TestCase;
+
+import java.io.File;
+
+public abstract class AbstractTestCase extends TestCase {
+    protected String testDir = "src/main/test/";
+    protected String sampleDir = "src/main/test/samples/";
+    protected String outDir = "target/generated/samples/";
+    protected String tempDir = "target/generated/temp";
+
+    public AbstractTestCase(String testName) {
+        super(testName);
+
+        testDir = new File(testDir).getAbsolutePath();
+        sampleDir = new File(sampleDir).getAbsolutePath();
+        outDir = new File(outDir).getAbsolutePath();
+        tempDir = new File(tempDir).getAbsolutePath();
+    }
+
+    /**
+     * Get test input file.
+     *
+     * @param path Path to test input file.
+     */
+    public String getTestFile(String path) {
+        return new File(path).getAbsolutePath();
+    }
+
+    public void testDummy() throws Exception {
+        //to allow commenting out all tests in a test case
+    }
+}
+

Added: openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AxisRequest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AxisRequest.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AxisRequest.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AxisRequest.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,114 @@
+/**
+ *  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.openejb.server.axis;
+
+import org.apache.openejb.server.httpd.HttpRequest;
+import org.apache.openejb.server.httpd.HttpSession;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+
+public class AxisRequest implements HttpRequest {
+    private int contentLength;
+
+    private String contentType;
+
+    private InputStream in;
+
+    private int method;
+
+    private Map<String,String> parameters;
+
+    private URI uri;
+
+    private Map<String,String> headers;
+
+    private Map<String,Object> attributes;
+
+    private String remoteAddress;
+
+    public AxisRequest(int contentLength, String contentType, InputStream in, int method, Map<String,String> parameters, URI uri, Map<String,String> headers, String remoteAddress) {
+        this.contentLength = contentLength;
+        this.contentType = contentType;
+        this.in = in;
+        this.method = method;
+        this.parameters = parameters;
+        this.uri = uri;
+        this.headers = headers;
+        this.attributes = new HashMap<String,Object>();
+        this.remoteAddress = remoteAddress;
+    }
+
+    public int getContentLength() {
+        return contentLength;
+    }
+
+    public String getContentType() {
+        return contentType;
+    }
+
+    public String getHeader(String name) {
+        return headers.get(name);
+    }
+
+    public InputStream getInputStream() throws IOException {
+        return in;
+    }
+
+    public int getMethod() {
+        return method;
+    }
+
+    public String getParameter(String name) {
+        return parameters.get(name);
+    }
+
+    public Map getParameters() {
+        return parameters;
+    }
+
+    public URI getURI() {
+        return uri;
+    }
+
+    public Object getAttribute(String name) {
+        return attributes.get(name);
+    }
+
+    public void setAttribute(String name, Object value) {
+        attributes.put(name, value);
+    }
+
+    public String getRemoteAddr() {
+        return remoteAddress;
+    }
+
+    public String getContextPath() {
+        return "/axis2";
+    }
+
+    public HttpSession getSession(boolean create) {
+        throw new UnsupportedOperationException();
+    }
+
+    public HttpSession getSession() {
+        throw new UnsupportedOperationException();
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AxisResponse.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AxisResponse.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AxisResponse.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AxisResponse.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,163 @@
+/**
+ *  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.openejb.server.axis;
+
+import org.apache.openejb.server.httpd.HttpResponse;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+public class AxisResponse implements HttpResponse {
+    private int contentLength;
+    private String contentType;
+    private String host;
+    private OutputStream out;
+    private int method;
+    private Map<String,String> parameters;
+    private String path;
+    private URL uri;
+    private int port;
+    private Map<String,String> headers;
+    private int statusCode;
+    private String statusMessage;
+
+    public AxisResponse(String contentType, String host, String path, URL uri, int port, OutputStream out) {
+        this.contentType = contentType;
+        this.host = host;
+        this.parameters = new HashMap<String,String>();
+        this.path = path;
+        this.uri = uri;
+        this.port = port;
+        this.headers = new HashMap<String,String>();
+        this.out = out;
+    }
+
+    public int getContentLength() {
+        return contentLength;
+    }
+
+
+    public String getHeader(String name) {
+        return headers.get(name);
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public OutputStream getOutputStream() {
+        return out;
+    }
+
+    public int getMethod() {
+        return method;
+    }
+
+    public String getParameter(String name) {
+        return parameters.get(name);
+    }
+
+    public Map getParameters() {
+        return parameters;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public URL getURI() {
+        return uri;
+    }
+
+    public String getContentType() {
+        return contentType;
+    }
+
+    public URL getUri() {
+        return uri;
+    }
+
+    public void setContentLength(int i) {
+        contentLength = i;
+    }
+
+    public void setContentType(String string) {
+        contentType = string;
+    }
+
+    public void setHost(String string) {
+        host = string;
+    }
+
+    public void setMethod(int i) {
+        method = i;
+    }
+
+    public void setParameters(Map<String,String> map) {
+        parameters = map;
+    }
+
+    public void setPath(String string) {
+        path = string;
+    }
+
+    public void setPort(int i) {
+        port = i;
+    }
+
+    public void setUri(URL url) {
+        uri = url;
+    }
+
+    public int getStatusCode() {
+        return statusCode;
+    }
+
+    public void setStatusCode(int code) {
+        statusCode = code;
+
+    }
+
+    public String getStatusMessage() {
+        return statusMessage;
+    }
+
+    public void setStatusMessage(String responseString) {
+        statusMessage = responseString;
+
+    }
+
+    public void flushBuffer() throws java.io.IOException {
+    }
+
+    public void setHeader(String name, String value) {
+        headers.put(name, value);
+    }
+
+
+    public PrintWriter getPrintWriter() throws IOException {
+        throw new UnsupportedOperationException();
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AxisWsContainerTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AxisWsContainerTest.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AxisWsContainerTest.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/AxisWsContainerTest.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,123 @@
+/*
+ *  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.openejb.server.axis;
+
+import org.apache.axis.constants.Style;
+import org.apache.axis.constants.Use;
+import org.apache.axis.description.JavaServiceDesc;
+import org.apache.axis.description.OperationDesc;
+import org.apache.axis.description.ParameterDesc;
+import org.apache.axis.encoding.TypeMapping;
+import org.apache.axis.encoding.TypeMappingRegistryImpl;
+import org.apache.axis.handlers.soap.SOAPService;
+import org.apache.axis.providers.java.RPCProvider;
+import org.apache.openejb.server.webservices.WsConstants;
+
+import javax.xml.namespace.QName;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+public class AxisWsContainerTest extends AbstractTestCase {
+    public AxisWsContainerTest(String testName) {
+        super(testName);
+    }
+
+    public void testInvokeSOAP() throws Exception {
+
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        JavaServiceDesc serviceDesc = new JavaServiceDesc();
+        serviceDesc.setEndpointURL("http://127.0.0.1:8080/axis/services/echo");
+        //serviceDesc.setWSDLFile(portInfo.getWsdlURL().toExternalForm());
+        serviceDesc.setStyle(Style.RPC);
+        serviceDesc.setUse(Use.ENCODED);
+
+        TypeMappingRegistryImpl tmr = new TypeMappingRegistryImpl();
+        tmr.doRegisterFromVersion("1.3");
+        TypeMapping typeMapping = tmr.getOrMakeTypeMapping(serviceDesc.getUse().getEncoding());
+
+        serviceDesc.setTypeMappingRegistry(tmr);
+        serviceDesc.setTypeMapping(typeMapping);
+
+        OperationDesc op = new OperationDesc();
+        op.setName("echoString");
+        op.setStyle(Style.RPC);
+        op.setUse(Use.ENCODED);
+        Class beanClass = EchoBean.class;
+        op.setMethod(beanClass.getMethod("echoString", String.class));
+        ParameterDesc parameter =
+            new ParameterDesc(
+                new QName("http://ws.apache.org/echosample", "in0"),
+                ParameterDesc.IN,
+                typeMapping.getTypeQName(String.class),
+                String.class,
+                false,
+                false);
+        op.addParameter(parameter);
+        serviceDesc.addOperationDesc(op);
+
+        serviceDesc.getOperations();
+        ReadOnlyServiceDesc sd = new ReadOnlyServiceDesc(serviceDesc);
+
+        Class pojoClass = cl.loadClass("org.apache.openejb.server.axis.EchoBean");
+
+        RPCProvider provider = new PojoProvider();
+        SOAPService service = new SOAPService(null, provider, null);
+        service.setServiceDescription(sd);
+        service.setOption("className","org.apache.openejb.server.axis.EchoBean");
+        URL wsdlURL = new URL("http://fake/echo.wsdl");
+        URI location = new URI(serviceDesc.getEndpointURL());
+        Map wsdlMap = new HashMap();
+
+        AxisWsContainer container = new AxisWsContainer(wsdlURL, service, wsdlMap, cl);
+
+        InputStream in = cl.getResourceAsStream("echoString-req.txt");
+
+        try {
+            AxisRequest req =
+                new AxisRequest(
+                    504,
+                    "text/xml; charset=utf-8",
+                    in,
+                    0,
+                    new HashMap<String,String>(),
+                    location,
+                    new HashMap<String,String>(),
+                    "127.0.0.1");
+            
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            AxisResponse res = new AxisResponse("text/xml; charset=utf-8", "127.0.0.1", null, null, 8080, out);
+            req.setAttribute(WsConstants.POJO_INSTANCE, pojoClass.newInstance());
+            container.onMessage(req, res);
+            
+            out.flush();
+//            log.debug(new String(out.toByteArray()));
+        } finally {
+            if (in != null) {
+                try {
+                    in.close();
+                } catch (IOException ignore) {
+                    // ignore
+                }
+            }
+        }
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/Echo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/Echo.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/Echo.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/Echo.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,45 @@
+/**
+ *  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.openejb.server.axis;
+
+
+public interface Echo extends java.rmi.Remote {
+    public void echoVoid() throws java.rmi.RemoteException;
+
+    public int echoInt(int in) throws java.rmi.RemoteException;
+
+    public double echoDouble(double in) throws java.rmi.RemoteException;
+
+    public float echoFloat(float in) throws java.rmi.RemoteException;
+
+    public boolean echoBoolean(boolean in) throws java.rmi.RemoteException;
+
+    public String echoString(String in) throws java.rmi.RemoteException;
+
+    public short echoShort(short in) throws java.rmi.RemoteException;
+
+    public long echoLong(long in) throws java.rmi.RemoteException;
+
+    //public char echoChar(char in);
+    public byte[] echoBytes(byte[] in) throws java.rmi.RemoteException;
+
+    public void echoEvoid() throws java.rmi.RemoteException;
+
+    public EchoStruct echoStruct(EchoStruct in) throws java.rmi.RemoteException;
+    //public EchoStruct[] echoAStruct(EchoStruct[] in)throws java.rmi.RemoteException;
+
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/EchoBean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/EchoBean.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/EchoBean.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/EchoBean.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,84 @@
+/**
+ *  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.openejb.server.axis;
+
+public class EchoBean implements Echo {
+    public void ejbCreate() {
+    }
+
+    public void echoVoid() {
+    }
+
+    public int echoInt(int in) {
+        return in;
+    }
+
+    public double echoDouble(double in) {
+        return in;
+    }
+
+    public float echoFloat(float in) {
+        return in;
+    }
+
+    public boolean echoBoolean(boolean in) {
+        return in;
+    }
+
+    public String echoString(String in) {
+        return in;
+    }
+
+    public short echoShort(short in) {
+        return in;
+    }
+
+    public long echoLong(long in) {
+        return in;
+    }
+
+    public char echoChar(char in) {
+        return in;
+    }
+
+    public byte[] echoBytes(byte[] in) {
+        return in;
+    }
+
+    public void echoEvoid() {
+    }
+
+    public EchoStruct echoStruct(EchoStruct in) {
+        return in;
+    }
+    
+//	public EchoStruct[] echoAStruct(EchoStruct[] in){
+//		return in;
+//	}
+
+    public void ejbActivate() throws javax.ejb.EJBException, java.rmi.RemoteException {
+    }
+
+    public void ejbPassivate() throws javax.ejb.EJBException, java.rmi.RemoteException {
+    }
+
+    public void ejbRemove() throws javax.ejb.EJBException, java.rmi.RemoteException {
+    }
+
+    public void setSessionContext(javax.ejb.SessionContext arg0) throws javax.ejb.EJBException, java.rmi.RemoteException {
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/EchoStruct.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/EchoStruct.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/EchoStruct.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/EchoStruct.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,186 @@
+/**
+ *  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.openejb.server.axis;
+
+public class EchoStruct {
+    private int intVal;
+    private double doubleVal;
+    private byte[] bytesVal;
+    private float floatVal;
+    private long longVal;
+    private short shortVal;
+    private boolean boolaenVal;
+
+    private String strVal;
+
+    private int[] intaVal;
+    private double[] doubleaVal;
+    private byte[][] bytesaVal;
+    private float[] floataVal;
+    private long[] longaVal;
+    private short[] shortaVal;
+    private boolean[] boolaenaVal;
+
+    private String[] straVal;
+
+    private SmallEchoStruct sturctVal;
+    private SmallEchoStruct sturctaVal;
+
+    public boolean[] getBoolaenaVal() {
+        return boolaenaVal;
+    }
+
+    public boolean isBoolaenVal() {
+        return boolaenVal;
+    }
+
+    public byte[][] getBytesaVal() {
+        return bytesaVal;
+    }
+
+    public byte[] getBytesVal() {
+        return bytesVal;
+    }
+
+    public double[] getDoubleaVal() {
+        return doubleaVal;
+    }
+
+    public double getDoubleVal() {
+        return doubleVal;
+    }
+
+    public float[] getFloataVal() {
+        return floataVal;
+    }
+
+    public float getFloatVal() {
+        return floatVal;
+    }
+
+    public int[] getIntaVal() {
+        return intaVal;
+    }
+
+    public int getIntVal() {
+        return intVal;
+    }
+
+    public long[] getLongaVal() {
+        return longaVal;
+    }
+
+    public long getLongVal() {
+        return longVal;
+    }
+
+    public short[] getShortaVal() {
+        return shortaVal;
+    }
+
+    public short getShortVal() {
+        return shortVal;
+    }
+
+    public String[] getStraVal() {
+        return straVal;
+    }
+
+    public String getStrVal() {
+        return strVal;
+    }
+
+    public void setBoolaenaVal(boolean[] bs) {
+        boolaenaVal = bs;
+    }
+
+    public void setBoolaenVal(boolean b) {
+        boolaenVal = b;
+    }
+
+    public void setBytesaVal(byte[][] bs) {
+        bytesaVal = bs;
+    }
+
+    public void setBytesVal(byte[] bs) {
+        bytesVal = bs;
+    }
+
+    public void setDoubleaVal(double[] ds) {
+        doubleaVal = ds;
+    }
+
+    public void setDoubleVal(double d) {
+        doubleVal = d;
+    }
+
+    public void setFloataVal(float[] fs) {
+        floataVal = fs;
+    }
+
+    public void setFloatVal(float f) {
+        floatVal = f;
+    }
+
+    public void setIntaVal(int[] is) {
+        intaVal = is;
+    }
+
+    public void setIntVal(int i) {
+        intVal = i;
+    }
+
+    public void setLongaVal(long[] ls) {
+        longaVal = ls;
+    }
+
+    public void setLongVal(long l) {
+        longVal = l;
+    }
+
+    public void setShortaVal(short[] ses) {
+        shortaVal = ses;
+    }
+
+    public void setShortVal(short s) {
+        shortVal = s;
+    }
+
+    public void setStraVal(String[] strings) {
+        straVal = strings;
+    }
+
+    public void setStrVal(String string) {
+        strVal = string;
+    }
+
+    public SmallEchoStruct getSturctaVal() {
+        return sturctaVal;
+    }
+
+    public SmallEchoStruct getSturctVal() {
+        return sturctVal;
+    }
+
+    public void setSturctaVal(SmallEchoStruct struct) {
+        sturctaVal = struct;
+    }
+
+    public void setSturctVal(SmallEchoStruct struct) {
+        sturctVal = struct;
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/SmallEchoStruct.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/SmallEchoStruct.java?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/SmallEchoStruct.java (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/test/java/org/apache/openejb/server/axis/SmallEchoStruct.java Sun Nov  4 14:41:49 2007
@@ -0,0 +1,38 @@
+/**
+ *  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.openejb.server.axis;
+
+public class SmallEchoStruct {
+    private String val1;
+    private String val2;
+
+    public String getVal1() {
+        return val1;
+    }
+
+    public String getVal2() {
+        return val2;
+    }
+
+    public void setVal1(String string) {
+        val1 = string;
+    }
+
+    public void setVal2(String string) {
+        val2 = string;
+    }
+}

Added: openejb/trunk/openejb3/server/openejb-axis/src/test/resources/echo.wsdl
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/test/resources/echo.wsdl?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/test/resources/echo.wsdl (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/test/resources/echo.wsdl Sun Nov  4 14:41:49 2007
@@ -0,0 +1,539 @@
+<!--
+  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.
+-->
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions targetNamespace="http://ws.apache.org/echosample" xmlns:impl="http://ws.apache.org/echosample" xmlns:intf="http://ws.apache.org/echosample" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
+  <wsdl:types>
+    <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ws.apache.org/echosample">
+      <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
+      <complexType name="ArrayOf_xsd_int">
+        <complexContent>
+          <restriction base="soapenc:Array">
+            <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:int[]"/>
+          </restriction>
+        </complexContent>
+      </complexType>
+      <complexType name="ArrayOf_xsd_long">
+        <complexContent>
+          <restriction base="soapenc:Array">
+            <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:long[]"/>
+          </restriction>
+        </complexContent>
+      </complexType>
+      <complexType name="ArrayOf_soapenc_string">
+        <complexContent>
+          <restriction base="soapenc:Array">
+            <attribute ref="soapenc:arrayType" wsdl:arrayType="soapenc:string[]"/>
+          </restriction>
+        </complexContent>
+      </complexType>
+      <complexType name="SmallEchoStruct">
+        <sequence>
+          <element name="val1" nillable="true" type="soapenc:string"/>
+          <element name="val2" nillable="true" type="soapenc:string"/>
+        </sequence>
+      </complexType>
+      <complexType name="ArrayOf_xsd_short">
+        <complexContent>
+          <restriction base="soapenc:Array">
+            <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:short[]"/>
+          </restriction>
+        </complexContent>
+      </complexType>
+      <complexType name="ArrayOf_xsd_boolean">
+        <complexContent>
+          <restriction base="soapenc:Array">
+            <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:boolean[]"/>
+          </restriction>
+        </complexContent>
+      </complexType>
+      <complexType name="ArrayOf_xsd_double">
+        <complexContent>
+          <restriction base="soapenc:Array">
+            <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:double[]"/>
+          </restriction>
+        </complexContent>
+      </complexType>
+      <complexType name="ArrayOf_xsd_float">
+        <complexContent>
+          <restriction base="soapenc:Array">
+            <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:float[]"/>
+          </restriction>
+        </complexContent>
+      </complexType>
+      <complexType name="ArrayOf_soapenc_base64Binary">
+        <complexContent>
+          <restriction base="soapenc:Array">
+            <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:byte[][]"/>
+          </restriction>
+        </complexContent>
+      </complexType>
+      <complexType name="EchoStruct">
+        <sequence>
+          <element name="intaVal" nillable="true" type="impl:ArrayOf_xsd_int"/>
+          <element name="longaVal" nillable="true" type="impl:ArrayOf_xsd_long"/>
+          <element name="straVal" nillable="true" type="impl:ArrayOf_soapenc_string"/>
+          <element name="sturctaVal" nillable="true" type="impl:SmallEchoStruct"/>
+          <element name="intVal" type="xsd:int"/>
+          <element name="shortaVal" nillable="true" type="impl:ArrayOf_xsd_short"/>
+          <element name="shortVal" type="xsd:short"/>
+          <element name="sturctVal" nillable="true" type="impl:SmallEchoStruct"/>
+          <element name="longVal" type="xsd:long"/>
+          <element name="boolaenVal" type="xsd:boolean"/>
+          <element name="boolaenaVal" nillable="true" type="impl:ArrayOf_xsd_boolean"/>
+          <element name="doubleaVal" nillable="true" type="impl:ArrayOf_xsd_double"/>
+          <element name="floatVal" type="xsd:float"/>
+          <element name="bytesVal" nillable="true" type="soapenc:base64Binary"/>
+          <element name="doubleVal" type="xsd:double"/>
+          <element name="floataVal" nillable="true" type="impl:ArrayOf_xsd_float"/>
+          <element name="bytesaVal" nillable="true" type="impl:ArrayOf_soapenc_base64Binary"/>
+          <element name="strVal" nillable="true" type="soapenc:string"/>
+        </sequence>
+      </complexType>
+    </schema>
+  </wsdl:types>
+
+  <wsdl:message name="echoIntRequest">
+
+    <wsdl:part name="in0" type="xsd:int"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoShortRequest">
+
+    <wsdl:part name="in0" type="xsd:short"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoBytesResponse">
+
+    <wsdl:part name="echoBytesReturn" type="soapenc:base64Binary"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoFloatResponse">
+
+    <wsdl:part name="echoFloatReturn" type="xsd:float"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoShortResponse">
+
+    <wsdl:part name="echoShortReturn" type="xsd:short"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoVoidRequest">
+
+  </wsdl:message>
+
+  <wsdl:message name="echoDoubleRequest">
+
+    <wsdl:part name="in0" type="xsd:double"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoBooleanResponse">
+
+    <wsdl:part name="echoBooleanReturn" type="xsd:boolean"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoDoubleResponse">
+
+    <wsdl:part name="echoDoubleReturn" type="xsd:double"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoStructResponse">
+
+    <wsdl:part name="echoStructReturn" type="impl:EchoStruct"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoBooleanRequest">
+
+    <wsdl:part name="in0" type="xsd:boolean"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoFloatRequest">
+
+    <wsdl:part name="in0" type="xsd:float"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoBytesRequest">
+
+    <wsdl:part name="in0" type="soapenc:base64Binary"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoEvoidResponse">
+
+  </wsdl:message>
+
+  <wsdl:message name="echoEvoidRequest">
+
+  </wsdl:message>
+
+  <wsdl:message name="echoLongRequest">
+
+    <wsdl:part name="in0" type="xsd:long"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoVoidResponse">
+
+  </wsdl:message>
+
+  <wsdl:message name="echoStringRequest">
+
+    <wsdl:part name="in0" type="soapenc:string"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoStructRequest">
+
+    <wsdl:part name="in0" type="impl:EchoStruct"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoLongResponse">
+
+    <wsdl:part name="echoLongReturn" type="xsd:long"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoIntResponse">
+
+    <wsdl:part name="echoIntReturn" type="xsd:int"/>
+
+  </wsdl:message>
+
+  <wsdl:message name="echoStringResponse">
+
+    <wsdl:part name="echoStringReturn" type="soapenc:string"/>
+
+  </wsdl:message>
+
+  <wsdl:portType name="Echo">
+
+    <wsdl:operation name="echoVoid">
+
+      <wsdl:input name="echoVoidRequest" message="impl:echoVoidRequest"/>
+
+      <wsdl:output name="echoVoidResponse" message="impl:echoVoidResponse"/>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoInt" parameterOrder="in0">
+
+      <wsdl:input name="echoIntRequest" message="impl:echoIntRequest"/>
+
+      <wsdl:output name="echoIntResponse" message="impl:echoIntResponse"/>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoDouble" parameterOrder="in0">
+
+      <wsdl:input name="echoDoubleRequest" message="impl:echoDoubleRequest"/>
+
+      <wsdl:output name="echoDoubleResponse" message="impl:echoDoubleResponse"/>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoFloat" parameterOrder="in0">
+
+      <wsdl:input name="echoFloatRequest" message="impl:echoFloatRequest"/>
+
+      <wsdl:output name="echoFloatResponse" message="impl:echoFloatResponse"/>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoBoolean" parameterOrder="in0">
+
+      <wsdl:input name="echoBooleanRequest" message="impl:echoBooleanRequest"/>
+
+      <wsdl:output name="echoBooleanResponse" message="impl:echoBooleanResponse"/>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoString" parameterOrder="in0">
+
+      <wsdl:input name="echoStringRequest" message="impl:echoStringRequest"/>
+
+      <wsdl:output name="echoStringResponse" message="impl:echoStringResponse"/>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoShort" parameterOrder="in0">
+
+      <wsdl:input name="echoShortRequest" message="impl:echoShortRequest"/>
+
+      <wsdl:output name="echoShortResponse" message="impl:echoShortResponse"/>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoLong" parameterOrder="in0">
+
+      <wsdl:input name="echoLongRequest" message="impl:echoLongRequest"/>
+
+      <wsdl:output name="echoLongResponse" message="impl:echoLongResponse"/>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoBytes" parameterOrder="in0">
+
+      <wsdl:input name="echoBytesRequest" message="impl:echoBytesRequest"/>
+
+      <wsdl:output name="echoBytesResponse" message="impl:echoBytesResponse"/>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoEvoid">
+
+      <wsdl:input name="echoEvoidRequest" message="impl:echoEvoidRequest"/>
+
+      <wsdl:output name="echoEvoidResponse" message="impl:echoEvoidResponse"/>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoStruct" parameterOrder="in0">
+
+      <wsdl:input name="echoStructRequest" message="impl:echoStructRequest"/>
+
+      <wsdl:output name="echoStructResponse" message="impl:echoStructResponse"/>
+
+    </wsdl:operation>
+
+  </wsdl:portType>
+
+  <wsdl:binding name="echoSoapBinding" type="impl:Echo">
+
+    <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
+
+    <wsdl:operation name="echoVoid">
+
+      <wsdlsoap:operation soapAction=""/>
+
+      <wsdl:input name="echoVoidRequest">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:input>
+
+      <wsdl:output name="echoVoidResponse">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoInt">
+
+      <wsdlsoap:operation soapAction=""/>
+
+      <wsdl:input name="echoIntRequest">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:input>
+
+      <wsdl:output name="echoIntResponse">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoDouble">
+
+      <wsdlsoap:operation soapAction=""/>
+
+      <wsdl:input name="echoDoubleRequest">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:input>
+
+      <wsdl:output name="echoDoubleResponse">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoFloat">
+
+      <wsdlsoap:operation soapAction=""/>
+
+      <wsdl:input name="echoFloatRequest">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:input>
+
+      <wsdl:output name="echoFloatResponse">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoBoolean">
+
+      <wsdlsoap:operation soapAction=""/>
+
+      <wsdl:input name="echoBooleanRequest">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:input>
+
+      <wsdl:output name="echoBooleanResponse">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoString">
+
+      <wsdlsoap:operation soapAction=""/>
+
+      <wsdl:input name="echoStringRequest">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:input>
+
+      <wsdl:output name="echoStringResponse">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoShort">
+
+      <wsdlsoap:operation soapAction=""/>
+
+      <wsdl:input name="echoShortRequest">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:input>
+
+      <wsdl:output name="echoShortResponse">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoLong">
+
+      <wsdlsoap:operation soapAction=""/>
+
+      <wsdl:input name="echoLongRequest">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:input>
+
+      <wsdl:output name="echoLongResponse">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoBytes">
+
+      <wsdlsoap:operation soapAction=""/>
+
+      <wsdl:input name="echoBytesRequest">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:input>
+
+      <wsdl:output name="echoBytesResponse">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoEvoid">
+
+      <wsdlsoap:operation soapAction=""/>
+
+      <wsdl:input name="echoEvoidRequest">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:input>
+
+      <wsdl:output name="echoEvoidResponse">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+    <wsdl:operation name="echoStruct">
+
+      <wsdlsoap:operation soapAction=""/>
+
+      <wsdl:input name="echoStructRequest">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:input>
+
+      <wsdl:output name="echoStructResponse">
+
+        <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ws.apache.org/echosample"/>
+
+      </wsdl:output>
+
+    </wsdl:operation>
+
+  </wsdl:binding>
+
+  <wsdl:service name="EchoService">
+
+    <wsdl:port name="echo" binding="impl:echoSoapBinding">
+
+      <wsdlsoap:address location="http://localhost:8081/axis/services/echo"/>
+
+    </wsdl:port>
+
+  </wsdl:service>
+
+</wsdl:definitions>

Added: openejb/trunk/openejb3/server/openejb-axis/src/test/resources/echoString-req.txt
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-axis/src/test/resources/echoString-req.txt?rev=591858&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-axis/src/test/resources/echoString-req.txt (added)
+++ openejb/trunk/openejb3/server/openejb-axis/src/test/resources/echoString-req.txt Sun Nov  4 14:41:49 2007
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><ns1:echoString soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://ws.apache.org/echosample"><in0 xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Hello</in0></ns1:echoString></soapenv:Body></soapenv:Envelope>

Propchange: openejb/trunk/openejb3/server/openejb-axis2/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sun Nov  4 14:41:49 2007
@@ -0,0 +1,10 @@
+*.iws
+*.ipr
+*.iml
+.classpath
+.project
+.settings
+*.log
+junit*.properties
+target
+bin



Mime
View raw message