You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2007/11/04 23:42:06 UTC
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...
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