You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2008/04/01 02:29:28 UTC
svn commit: r643229 - in
/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws:
framework/JAXWSDeployer.java message/databinding/JAXBUtils.java
server/JAXWSMessageReceiver.java
Author: dims
Date: Mon Mar 31 17:29:26 2008
New Revision: 643229
URL: http://svn.apache.org/viewvc?rev=643229&view=rev
Log:
Problem #1: SERVICE_TCCL is very expensive
Problem #2: When the jaxws-calculator sample throws the business exception TCCL is not picked up, so we get JAXBException saying AddressingException class not found in context
Problem #3: We keep creating JAXBContexts / key to innerMap is wrong
HACK - If we don't find the classes in the specified TCCL class loader then we look into the cached class loader set in the deployer.
Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/JAXWSMessageReceiver.java
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java?rev=643229&r1=643228&r2=643229&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java Mon Mar 31 17:29:26 2008
@@ -291,7 +291,7 @@
axisService.setElementFormDefault(false);
axisService.setFileName(serviceLocation);
axisService.setClassLoader(classLoader);
- axisService.addParameter(new Parameter(Constants.SERVICE_TCCL, Constants.TCCL_COMPOSITE));
+ axisService.addParameter(new Parameter(org.apache.axis2.jaxws.spi.Constants.CACHE_CLASSLOADER, classLoader));
}
return axisService;
}
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java?rev=643229&r1=643228&r2=643229&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java Mon Mar 31 17:29:26 2008
@@ -162,8 +162,10 @@
if(innerMap==null) {
adjustPoolSize(jaxbMap);
innerMap = new ConcurrentHashMap<String, JAXBContextValue>();
- jaxbMap.put(cl, innerMap);
- }
+ if(cacheKey != null) {
+ jaxbMap.put(cacheKey, innerMap);
+ }
+ }
}
}
@@ -185,8 +187,14 @@
TreeSet<String> validContextPackages = new TreeSet<String>(contextPackages);
contextValue = createJAXBContextValue(validContextPackages, cl);
-
- // Put the new context in the map keyed by both the original and valid list of packages
+
+ // If we don't get all the classes, try the cached classloader
+ if (cacheKey != null && validContextPackages.size() != contextPackages.size()) {
+ validContextPackages = new TreeSet<String>(contextPackages);
+ contextValue = createJAXBContextValue(validContextPackages, cacheKey);
+ }
+
+ // Put the new context in the map keyed by both the original and valid list of packages
String validPackagesKey = validContextPackages.toString();
innerMap.put(key, contextValue);
innerMap.put(validPackagesKey, contextValue);
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/JAXWSMessageReceiver.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/JAXWSMessageReceiver.java?rev=643229&r1=643228&r2=643229&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/JAXWSMessageReceiver.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/JAXWSMessageReceiver.java Mon Mar 31 17:29:26 2008
@@ -20,7 +20,6 @@
package org.apache.axis2.jaxws.server;
import org.apache.axis2.AxisFault;
-import org.apache.axis2.receivers.AbstractMessageReceiver;
import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.context.OperationContext;
import org.apache.axis2.description.AxisOperation;
@@ -56,34 +55,20 @@
* The JAXWSMessageReceiver is the entry point, from the server's perspective, to the JAX-WS code.
* This will be called by the Axis Engine and is the end of the chain from an Axis2 perspective.
*/
-public class JAXWSMessageReceiver extends AbstractMessageReceiver implements MessageReceiver {
+public class JAXWSMessageReceiver implements MessageReceiver {
private static final Log log = LogFactory.getLog(JAXWSMessageReceiver.class);
private static String PARAM_SERVICE_CLASS = "ServiceClass";
public static String PARAM_BINDING = "Binding";
- protected void invokeBusinessLogic(org.apache.axis2.context.MessageContext messageCtx) throws AxisFault {
- // DUMMY.
- }
-
- public void receive(org.apache.axis2.context.MessageContext messageCtx)
- throws AxisFault {
- ThreadContextDescriptor tc = setThreadContext(messageCtx);
- try {
- receiveInternal(messageCtx);
- } finally {
- restoreThreadContext(tc);
- }
- }
-
/**
* We should have already determined which AxisService we're targetting at this point. So now,
* just get the service implementation and invoke the appropriate method.
* @param axisRequestMsgCtx
* @throws org.apache.axis2.AxisFault
*/
- public void receiveInternal(org.apache.axis2.context.MessageContext axisRequestMsgCtx)
+ public void receive(org.apache.axis2.context.MessageContext axisRequestMsgCtx)
throws AxisFault {
AxisFault faultToReturn = null;
@@ -113,9 +98,8 @@
ServiceDescription serviceDesc =
DescriptionFactory.createServiceDescriptionFromServiceImpl(
clazz, service);
- if (service.getParameter(org.apache.axis2.Constants.SERVICE_TCCL) != null) {
- service.addParameter(new Parameter(org.apache.axis2.Constants.SERVICE_TCCL, org.apache.axis2.Constants.TCCL_COMPOSITE));
- }
+ service.addParameter(new Parameter(org.apache.axis2.jaxws.spi.Constants.CACHE_CLASSLOADER,
+ service.getClassLoader()));
} catch (ClassNotFoundException e) {
throw new RuntimeException(
Messages.getMessage("JAXWSMessageReceiverNoServiceClass"));
@@ -141,7 +125,11 @@
MessageContext requestMsgCtx = new MessageContext(axisRequestMsgCtx);
requestMsgCtx.setServer(true);
requestMsgCtx.setMEPContext(new MEPContext(requestMsgCtx));
-
+ ClassLoader loader = getCachedClassLoader(axisRequestMsgCtx);
+ if (loader != null) {
+ requestMsgCtx.setProperty(org.apache.axis2.jaxws.spi.Constants.CACHE_CLASSLOADER,
+ loader);
+ }
// The adapters need to be installed on the new request Message Context
AttachmentsAdapter.install(requestMsgCtx);
TransportHeadersAdapter.install(requestMsgCtx);
@@ -187,7 +175,10 @@
MessageContext responseMsgCtx = eic.getResponseMessageContext();
org.apache.axis2.context.MessageContext axisResponseMsgCtx =
responseMsgCtx.getAxisMessageContext();
-
+ if (loader != null) {
+ responseMsgCtx.setProperty(org.apache.axis2.jaxws.spi.Constants.CACHE_CLASSLOADER,
+ loader);
+ }
MessageUtils.putMessageOnMessageContext(responseMsgCtx.getMessage(),
axisResponseMsgCtx);
@@ -269,4 +260,7 @@
eic.setInvocationListenerFactories(InvocationListenerRegistry.getFactories());
}
+ public ClassLoader getCachedClassLoader(org.apache.axis2.context.MessageContext msgContext) {
+ return (ClassLoader) msgContext.getAxisService().getParameterValue(org.apache.axis2.jaxws.spi.Constants.CACHE_CLASSLOADER);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org