You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2008/03/01 00:20:06 UTC
svn commit: r632491 -
/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerResolverImpl.java
Author: dims
Date: Fri Feb 29 15:20:04 2008
New Revision: 632491
URL: http://svn.apache.org/viewvc?rev=632491&view=rev
Log:
[PERF] trying to separate out the finding of the classes for the handlers from the actual instantiation of the handlers. Next step is to cache the list of classes somewhere...
Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerResolverImpl.java
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerResolverImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerResolverImpl.java?rev=632491&r1=632490&r2=632491&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerResolverImpl.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerResolverImpl.java Fri Feb 29 15:20:04 2008
@@ -78,7 +78,34 @@
public List<Handler> getHandlerChain(PortInfo portinfo) {
// TODO: would check and/or build cache here if implemented later
- return resolveHandlers(portinfo);
+ List<Class> handlerClasses = resolveHandlers(portinfo);
+ if (handlerClasses.size() == 0) {
+ return new ArrayList<Handler>();
+ }
+
+ ArrayList<Handler> handlers = new ArrayList<Handler>();
+ // Create temporary MessageContext to pass information to HandlerLifecycleManager
+ MessageContext ctx = new MessageContext();
+ ctx.setEndpointDescription(serviceDesc.getEndpointDescription(portinfo.getPortName()));
+
+ HandlerLifecycleManager hlm = createHandlerlifecycleManager();
+
+ for (Iterator<Class> iterator = handlerClasses.iterator(); iterator.hasNext();) {
+ Class aClass = iterator.next();
+ // instantiate portHandler class
+ try {
+ handlers.add(hlm.createHandlerInstance(ctx, aClass));
+ } catch (Exception e) {
+ // TODO: should we just ignore this problem?
+ // TODO: NLS log and throw
+ throw ExceptionFactory.makeWebServiceException(e);
+ }
+ //TODO NLS
+ if (LoggingControl.debugLoggingAllowed && log.isDebugEnabled())
+ log.debug("Successfully instantiated the class: " + aClass);
+
+ }
+ return handlers;
}
/*
@@ -90,7 +117,7 @@
* running the annotated PostConstruct method, resolving the list,
* and returning it. We do not sort here.
*/
- private ArrayList<Handler> resolveHandlers(PortInfo portinfo) throws WebServiceException {
+ private ArrayList<Class> resolveHandlers(PortInfo portinfo) throws WebServiceException {
/*
A sample XML file for the handler-chains:
@@ -132,7 +159,7 @@
// which is where one might get the portinfo object. We still have the
// passed-in variable, however, due to the spec
- ArrayList<Handler> handlers = new ArrayList<Handler>();
+ ArrayList<Class> handlers = new ArrayList<Class>();
/*
* TODO: do a better job checking that the return value matches up
@@ -214,51 +241,35 @@
List<HandlerType> handlerTypeList = handlerChainType.getHandler();
Iterator ht = handlerTypeList.iterator();
while (ht.hasNext()) {
-
- HandlerType handlerType = (HandlerType)ht.next();
-
+ HandlerType handlerType = (HandlerType) ht.next();
// TODO must do better job comparing the handlerType with the PortInfo param
// to see if the current iterator handler is intended for this service.
-
// TODO review: need to check for null getHandlerClass() return?
// or will schema not allow it?
String portHandler = handlerType.getHandlerClass().getValue();
- Handler handler;
- // Create temporary MessageContext to pass information to HandlerLifecycleManager
- MessageContext ctx = new MessageContext();
- ctx.setEndpointDescription(ed);
-
- HandlerLifecycleManager hlm = createHandlerlifecycleManager();
-
- // instantiate portHandler class
+ Class aClass;
try {
- handler = hlm.createHandlerInstance(ctx, loadClass(portHandler));
+ aClass = loadClass(portHandler);
} catch (Exception e) {
// TODO: should we just ignore this problem?
// TODO: NLS log and throw
throw ExceptionFactory.makeWebServiceException(e);
}
-
- //TODO NLS
- if (LoggingControl.debugLoggingAllowed && log.isDebugEnabled())
- log.debug("Successfully instantiated the class: " + handler.getClass());
-
+
// 9.2.1.2 sort them by Logical, then SOAP
- if (LogicalHandler.class.isAssignableFrom(handler.getClass()))
- handlers.add((LogicalHandler) handler);
- else if (SOAPHandler.class.isAssignableFrom(handler.getClass()))
+ if (LogicalHandler.class.isAssignableFrom(aClass))
+ handlers.add(aClass);
+ else if (SOAPHandler.class.isAssignableFrom(aClass))
// instanceof ProtocolHandler
- handlers.add((SOAPHandler) handler);
- else if (Handler.class.isAssignableFrom(handler.getClass())) {
+ handlers.add(aClass);
+ else if (Handler.class.isAssignableFrom(aClass)) {
// TODO: NLS better error message
throw ExceptionFactory.makeWebServiceException(Messages
- .getMessage("handlerChainErr1", handler
- .getClass().getName()));
+ .getMessage("handlerChainErr1", aClass.getName()));
} else {
// TODO: NLS better error message
throw ExceptionFactory.makeWebServiceException(Messages
- .getMessage("handlerChainErr2", handler
- .getClass().getName()));
+ .getMessage("handlerChainErr2", aClass.getName()));
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org