You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2006/05/03 16:07:41 UTC
svn commit: r399310 - in
/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2:
handler/ util/
Author: antelder
Date: Wed May 3 07:07:39 2006
New Revision: 399310
URL: http://svn.apache.org/viewcvs?rev=399310&view=rev
Log:
First cut at a fix for TUSCANY-258
Added:
incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/ClassLoaderHelper.java
Modified:
incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/Axis2OperationInvoker.java
incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java
incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java
incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/SDODataBinding.java
Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/Axis2OperationInvoker.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/Axis2OperationInvoker.java?rev=399310&r1=399309&r2=399310&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/Axis2OperationInvoker.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/Axis2OperationInvoker.java Wed May 3 07:07:39 2006
@@ -21,6 +21,7 @@
import org.apache.axis2.client.OperationClient;
import org.apache.axis2.client.Options;
import org.apache.axis2.context.MessageContext;
+import org.apache.tuscany.binding.axis2.util.ClassLoaderHelper;
import org.apache.tuscany.binding.axis2.util.DataBinding;
import org.apache.ws.commons.om.OMElement;
import org.apache.ws.commons.soap.SOAPEnvelope;
@@ -68,14 +69,15 @@
operationClient.addMessageContext(requestMC);
- ClassLoader ccl = Thread.currentThread().getContextClassLoader();
+ ClassLoader oldCL = ClassLoaderHelper.setSystemClassLoader();
try {
- Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
operationClient.execute(true);
} finally {
- Thread.currentThread().setContextClassLoader(ccl);
+ if (oldCL != null) {
+ Thread.currentThread().setContextClassLoader(oldCL);
+ }
}
MessageContext responseMC = operationClient.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java?rev=399310&r1=399309&r2=399310&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointInOutSyncMessageReceiver.java Wed May 3 07:07:39 2006
@@ -16,18 +16,17 @@
*/
package org.apache.tuscany.binding.axis2.handler;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver;
+import org.apache.tuscany.binding.axis2.util.ClassLoaderHelper;
import org.apache.tuscany.binding.axis2.util.DataBinding;
import org.apache.tuscany.core.wire.InvocationRuntimeException;
import org.apache.ws.commons.om.OMElement;
import org.apache.ws.commons.soap.SOAPEnvelope;
-import org.apache.ws.commons.soap.SOAPProcessingException;
public class WebServiceEntryPointInOutSyncMessageReceiver extends AbstractInOutSyncMessageReceiver {
@@ -45,38 +44,32 @@
@Override
public void invokeBusinessLogic(MessageContext inMC, MessageContext outMC) throws AxisFault {
- ClassLoader tccl = Thread.currentThread().getContextClassLoader();
- ClassLoader mycl = getClass().getClassLoader();
try {
- if (tccl != mycl) {
- Thread.currentThread().setContextClassLoader(mycl);
- }
- try {
- invokeEntryPoint(inMC, outMC);
+ OMElement requestOM = inMC.getEnvelope().getBody().getFirstElement();
+ Object[] request = dataBinding.fromOMElement(requestOM);
+
+ Object response;
+ ClassLoader oldCL = ClassLoaderHelper.setApplicationClassLoader();
+ try {
+
+ response = operationMethod.invoke(entryPointProxy, request);
- } catch (Exception e) {
- throw new InvocationRuntimeException(e);
+ } finally {
+ if (oldCL != null) {
+ Thread.currentThread().setContextClassLoader(oldCL);
+ }
}
- } finally {
- if (tccl != mycl) {
- Thread.currentThread().setContextClassLoader(tccl);
- }
- }
- }
- protected void invokeEntryPoint(MessageContext inMC, MessageContext outMC) throws IllegalArgumentException, IllegalAccessException,
- InvocationTargetException, SOAPProcessingException, AxisFault {
+ OMElement responseOM = dataBinding.toOMElement(new Object[] { response });
- OMElement requestOM = inMC.getEnvelope().getBody().getFirstElement();
- Object[] request = dataBinding.fromOMElement(requestOM);
- Object response = operationMethod.invoke(entryPointProxy, request);
- OMElement responseOM = dataBinding.toOMElement(new Object[] { response });
-
- SOAPEnvelope soapEnvelope = getSOAPFactory(inMC).getDefaultEnvelope();
- soapEnvelope.getBody().addChild(responseOM);
- outMC.setEnvelope(soapEnvelope);
- outMC.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
- }
+ SOAPEnvelope soapEnvelope = getSOAPFactory(inMC).getDefaultEnvelope();
+ soapEnvelope.getBody().addChild(responseOM);
+ outMC.setEnvelope(soapEnvelope);
+ outMC.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
+ } catch (Exception e) {
+ throw new InvocationRuntimeException(e);
+ }
+ }
}
Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java?rev=399310&r1=399309&r2=399310&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/handler/WebServiceEntryPointServlet.java Wed May 3 07:07:39 2006
@@ -43,6 +43,7 @@
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.transport.http.AxisServlet;
import org.apache.tuscany.binding.axis2.assembly.WebServiceBinding;
+import org.apache.tuscany.binding.axis2.util.ClassLoaderHelper;
import org.apache.tuscany.binding.axis2.util.DataBinding;
import org.apache.tuscany.binding.axis2.util.SDODataBinding;
import org.apache.tuscany.core.context.CompositeContext;
@@ -64,13 +65,10 @@
private boolean tuscanyGetDefaultAxis2xmlChecked;
- public void init(ServletConfig config) throws ServletException {
- ClassLoader tccl = Thread.currentThread().getContextClassLoader();
- ClassLoader mycl = getClass().getClassLoader();
+ public void init(final ServletConfig config) throws ServletException {
+ ClassLoaderHelper.initApplicationClassLoader();
try {
- if (tccl != mycl) {
- Thread.currentThread().setContextClassLoader(mycl);
- }
+ ClassLoaderHelper.setSystemClassLoader();
try {
super.init(config);
@@ -80,9 +78,7 @@
throw new ServletException(e);
}
} finally {
- if (tccl != mycl) {
- Thread.currentThread().setContextClassLoader(tccl);
- }
+ ClassLoaderHelper.setApplicationClassLoader();
}
}
@@ -211,41 +207,30 @@
}
@Override
- protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
-
- ClassLoader tccl = Thread.currentThread().getContextClassLoader();
- ClassLoader mycl = getClass().getClassLoader();
+ protected void doGet(final HttpServletRequest arg0, final HttpServletResponse arg1) throws ServletException, IOException {
+ ClassLoaderHelper.initApplicationClassLoader();
try {
- if (tccl != mycl) {
- Thread.currentThread().setContextClassLoader(mycl);
- }
+ ClassLoaderHelper.setSystemClassLoader();
super.doGet(arg0, arg1);
} catch (Exception e) {
e.printStackTrace();
throw new ServletException(e);
} finally {
- if (tccl != mycl) {
- Thread.currentThread().setContextClassLoader(tccl);
- }
+ ClassLoaderHelper.setApplicationClassLoader();
}
}
@Override
- protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
- ClassLoader tccl = Thread.currentThread().getContextClassLoader();
- ClassLoader mycl = getClass().getClassLoader();
+ protected void doPost(final HttpServletRequest arg0, final HttpServletResponse arg1) throws ServletException, IOException {
+ ClassLoaderHelper.initApplicationClassLoader();
try {
- if (tccl != mycl) {
- Thread.currentThread().setContextClassLoader(mycl);
- }
+ ClassLoaderHelper.setSystemClassLoader();
super.doPost(arg0, arg1);
} catch (Exception e) {
e.printStackTrace();
throw new ServletException(e);
} finally {
- if (tccl != mycl) {
- Thread.currentThread().setContextClassLoader(tccl);
- }
+ ClassLoaderHelper.setApplicationClassLoader();
}
}
}
Added: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/ClassLoaderHelper.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/ClassLoaderHelper.java?rev=399310&view=auto
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/ClassLoaderHelper.java (added)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/ClassLoaderHelper.java Wed May 3 07:07:39 2006
@@ -0,0 +1,76 @@
+/**
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.binding.axis2.util;
+
+public class ClassLoaderHelper {
+
+ private static ThreadLocal<ClassLoader> applicationClassLoader = new ThreadLocal<ClassLoader>() {
+ protected synchronized ClassLoader initialValue() {
+ return Thread.currentThread().getContextClassLoader();
+ }
+ };
+
+ public static void initApplicationClassLoader() {
+ applicationClassLoader.set(Thread.currentThread().getContextClassLoader());
+ }
+
+ public static ClassLoader setApplicationClassLoader() {
+ ClassLoader oldCL = null;
+ ClassLoader cl = applicationClassLoader.get();
+ if (cl != Thread.currentThread().getContextClassLoader()) {
+ oldCL = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(cl);
+ }
+ return oldCL;
+ }
+
+ public static ClassLoader setSystemClassLoader() {
+ ClassLoader oldCL = null;
+ ClassLoader cl = ClassLoaderHelper.class.getClassLoader();
+ if (cl != Thread.currentThread().getContextClassLoader()) {
+ oldCL = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(cl);
+ }
+ return oldCL;
+ }
+
+ public static void applicationInvoke(Runnable runnable) {
+ ClassLoader currentCL = Thread.currentThread().getContextClassLoader();
+ ClassLoader appCL = applicationClassLoader.get();
+ invoke(runnable, currentCL, appCL);
+ }
+
+ public static void systemInvoke(Runnable runnable) {
+ ClassLoader currentCL = Thread.currentThread().getContextClassLoader();
+ ClassLoader sysCL = ClassLoaderHelper.class.getClassLoader();
+ invoke(runnable, currentCL, sysCL);
+ }
+
+ private static void invoke(Runnable runnable, ClassLoader old, ClassLoader newCL) {
+ try {
+ if (newCL != old) {
+ Thread.currentThread().setContextClassLoader(newCL);
+ }
+
+ runnable.run();
+
+ }finally {
+ if (newCL != old) {
+ Thread.currentThread().setContextClassLoader(old);
+ }
+ }
+ }
+}
Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/SDODataBinding.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/SDODataBinding.java?rev=399310&r1=399309&r2=399310&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/SDODataBinding.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/util/SDODataBinding.java Wed May 3 07:07:39 2006
@@ -33,13 +33,27 @@
}
public Object[] fromOMElement(OMElement omElement) {
- Object[] args = AxiomHelper.toObjects(typeHelper, omElement);
- return args;
+ ClassLoader oldCL = ClassLoaderHelper.setApplicationClassLoader();
+ try {
+ Object[] args = AxiomHelper.toObjects(typeHelper, omElement);
+ return args;
+ } finally {
+ if (oldCL != null) {
+ Thread.currentThread().setContextClassLoader(oldCL);
+ }
+ }
}
public OMElement toOMElement(Object[] args) {
- OMElement omElement = AxiomHelper.toOMElement(typeHelper, args, typeQN);
- return omElement;
+ ClassLoader oldCL = ClassLoaderHelper.setApplicationClassLoader();
+ try {
+ OMElement omElement = AxiomHelper.toOMElement(typeHelper, args, typeQN);
+ return omElement;
+ } finally {
+ if (oldCL != null) {
+ Thread.currentThread().setContextClassLoader(oldCL);
+ }
+ }
}
}