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 Jarek Gawor <jg...@gmail.com> on 2007/07/03 19:48:31 UTC
Re: svn commit: r552920 - in /webservices/axis2/trunk/java/modules: jaxws/src/org/apache/axis2/jaxws/ jaxws/src/org/apache/axis2/jaxws/binding/ jaxws/src/org/apache/axis2/jaxws/handler/ jaxws/src/org/apache/axis2/jaxws/server/ jaxws/src/org/apache/ax
I'm sorry, I have to object to this commit. This is removing some of
the changes I've made before (and one change just got removed for the
second time!). For example I've added support for
HandlerLifecycleManager that works just like EndpointLifecycleManager
and can do injection/call PostConstruct and this commit just removed
calls to it. Please explain why is this necessary.
Jarek
On 7/3/07, nthaker@apache.org <nt...@apache.org> wrote:
> Author: nthaker
> Date: Tue Jul 3 10:14:00 2007
> New Revision: 552920
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=552920
> Log:
> JIRA = AXIS2-2894
>
> Modified:
> webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java
> webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java
> webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerResolverImpl.java
> webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/EndpointController.java
> webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java
> webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersHandlerTests.java
> webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java
> webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java
>
> Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java?view=diff&rev=552920&r1=552919&r2=552920
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java (original)
> +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java Tue Jul 3 10:14:00 2007
> @@ -18,6 +18,11 @@
> */
> package org.apache.axis2.jaxws;
>
> +import java.util.Hashtable;
> +import java.util.Map;
> +
> +import javax.xml.ws.Binding;
> +import javax.xml.ws.handler.HandlerResolver;
> import org.apache.axis2.jaxws.binding.BindingUtils;
> import org.apache.axis2.jaxws.binding.SOAPBinding;
> import org.apache.axis2.jaxws.client.PropertyValidator;
> @@ -29,11 +34,8 @@
> import org.apache.axis2.jaxws.spi.ServiceDelegate;
> import org.apache.axis2.transport.http.HTTPConstants;
>
> -import javax.xml.ws.Binding;
> -import javax.xml.ws.handler.HandlerResolver;
> -
> -import java.util.Hashtable;
> -import java.util.Map;
> +import org.apache.commons.logging.Log;
> +import org.apache.commons.logging.LogFactory;
>
> public class BindingProvider implements org.apache.axis2.jaxws.spi.BindingProvider {
>
> @@ -46,7 +48,7 @@
> protected ServiceDelegate serviceDelegate;
>
> private Binding binding = null;
> -
> + private static final Log log = LogFactory.getLog(BindingProvider.class);
> public BindingProvider(ServiceDelegate svcDelegate, EndpointDescription epDesc) {
> endpointDesc = epDesc;
> serviceDelegate = svcDelegate;
> @@ -75,11 +77,23 @@
> // so we can also set the handlerchain
> if (binding == null) {
> binding = BindingUtils.createBinding(endpointDesc);
> -
> + if(log.isDebugEnabled()){
> + log.debug("Lookign for Handler Resolver");
> + }
> // TODO should we allow the ServiceDelegate to figure out the default handlerresolver? Probably yes, since a client app may look for one there.
> - HandlerResolver handlerResolver =
> - serviceDelegate.getHandlerResolver() != null ? serviceDelegate.getHandlerResolver()
> - : new HandlerResolverImpl(endpointDesc);
> + HandlerResolver handlerResolver = null;
> + if(serviceDelegate.getHandlerResolver() != null){
> + if(log.isDebugEnabled()){
> + log.debug("Reading default Handler Resolver ");
> + }
> + handlerResolver= serviceDelegate.getHandlerResolver();
> + }
> + else{
> + handlerResolver = new HandlerResolverImpl(endpointDesc.getServiceDescription());
> + if(log.isDebugEnabled()){
> + log.debug("Creating new Handler Resolver using HandlerResolverImpl");
> + }
> + }
> binding.setHandlerChain(handlerResolver.getHandlerChain(endpointDesc.getPortInfo()));
> }
>
>
> Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java?view=diff&rev=552920&r1=552919&r2=552920
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java (original)
> +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java Tue Jul 3 10:14:00 2007
> @@ -19,16 +19,15 @@
>
> package org.apache.axis2.jaxws.binding;
>
> -import org.apache.axis2.jaxws.description.EndpointDescription;
> -import org.apache.axis2.jaxws.handler.HandlerResolverImpl;
> +import java.util.ArrayList;
> +import java.util.List;
> +import java.util.Set;
>
> import javax.xml.ws.Binding;
> import javax.xml.ws.handler.Handler;
>
> -import java.net.URI;
> -import java.util.ArrayList;
> -import java.util.List;
> -import java.util.Set;
> +import org.apache.axis2.jaxws.description.EndpointDescription;
> +import org.apache.axis2.jaxws.handler.HandlerResolverImpl;
>
> /**
> * @author rott classes that would normally "implement javax.xml.ws.Binding"
> @@ -63,11 +62,10 @@
> }
>
> public List<Handler> getHandlerChain() {
> - if (handlers == null && endpointDesc != null) {
> - handlers = new HandlerResolverImpl(endpointDesc).getHandlerChain(endpointDesc
> - .getPortInfo());
> - }
> if (handlers == null) {
> + handlers =
> + new HandlerResolverImpl(endpointDesc.getServiceDescription()).getHandlerChain(endpointDesc.getPortInfo());
> + if (handlers == null)
> handlers = new ArrayList<Handler>(); // non-null so client
> // apps can manipulate
> }
>
> 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?view=diff&rev=552920&r1=552919&r2=552920
> ==============================================================================
> --- 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 Tue Jul 3 10:14:00 2007
> @@ -18,36 +18,37 @@
> */
> package org.apache.axis2.jaxws.handler;
>
> -import java.security.PrivilegedActionException;
> -import java.security.PrivilegedExceptionAction;
> -import java.util.ArrayList;
> -import java.util.HashMap;
> -import java.util.Iterator;
> -import java.util.List;
> -import java.util.Map;
> -
> -import javax.xml.namespace.QName;
> -import javax.xml.ws.WebServiceException;
> -import javax.xml.ws.handler.Handler;
> -import javax.xml.ws.handler.HandlerResolver;
> -import javax.xml.ws.handler.LogicalHandler;
> -import javax.xml.ws.handler.PortInfo;
> -import javax.xml.ws.handler.soap.SOAPHandler;
> -
> +import org.apache.axis2.client.OperationClient;
> import org.apache.axis2.java.security.AccessController;
> import org.apache.axis2.jaxws.ExceptionFactory;
> -import org.apache.axis2.jaxws.core.MessageContext;
> import org.apache.axis2.jaxws.description.EndpointDescription;
> +import org.apache.axis2.jaxws.description.ServiceDescription;
> import org.apache.axis2.jaxws.description.xml.handler.HandlerChainType;
> import org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType;
> import org.apache.axis2.jaxws.description.xml.handler.HandlerType;
> -import org.apache.axis2.jaxws.handler.lifecycle.factory.HandlerLifecycleManager;
> -import org.apache.axis2.jaxws.handler.lifecycle.factory.HandlerLifecycleManagerFactory;
> import org.apache.axis2.jaxws.i18n.Messages;
> -import org.apache.axis2.jaxws.registry.FactoryRegistry;
> +import org.apache.axis2.jaxws.runtime.description.injection.ResourceInjectionServiceRuntimeDescription;
> +import org.apache.axis2.jaxws.runtime.description.injection.impl.ResourceInjectionServiceRuntimeDescriptionBuilder;
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> +import javax.xml.namespace.QName;
> +import javax.xml.ws.WebServiceException;
> +import javax.xml.ws.handler.Handler;
> +import javax.xml.ws.handler.HandlerResolver;
> +import javax.xml.ws.handler.LogicalHandler;
> +import javax.xml.ws.handler.PortInfo;
> +import javax.xml.ws.handler.soap.SOAPHandler;
> +
> +import java.lang.reflect.InvocationTargetException;
> +import java.lang.reflect.Method;
> +import java.security.PrivilegedActionException;
> +import java.security.PrivilegedExceptionAction;
> +import java.util.ArrayList;
> +import java.util.HashMap;
> +import java.util.Iterator;
> +import java.util.List;
> +import java.util.Map;
> /*
> * This class should be created by the ServiceDelegate.
> * HandlerResolverImpl.getHandlerChain(PortInfo) will be called by the
> @@ -78,10 +79,12 @@
> */
>
> // we'll need to refer to this object to get the port, and thus handlers
> - private EndpointDescription endpointDesc;
> + //private EndpointDescription endpointDesc;
> + private ServiceDescription serviceDesc;
>
> - public HandlerResolverImpl(EndpointDescription ed) {
> - this.endpointDesc = ed;
> + public HandlerResolverImpl(ServiceDescription sd) { //EndpointDescription ed) {
> + //this.endpointDesc = ed;
> + this.serviceDesc = sd;
> }
>
> public ArrayList<Handler> getHandlerChain(PortInfo portinfo) {
> @@ -142,12 +145,25 @@
>
> ArrayList<Handler> handlers = new ArrayList<Handler>();
>
> - /*
> - * TODO: do a better job checking that the return value matches up
> + /*
> + * TODO: do a better job checking that the return value matches up
> * with the PortInfo object before we add it to the chain.
> - */
> -
> - HandlerChainsType handlerCT = endpointDesc.getHandlerChain();
> + */
> +
> + HandlerChainsType handlerCT = serviceDesc.getHandlerChain();
> + // if there's a handlerChain on the serviceDesc, it means the WSDL defined an import for a HandlerChain.
> + // the spec indicates that if a handlerchain also appears on the SEI on the client.
> + EndpointDescription ed = null;
> + if(portinfo !=null){
> + ed = serviceDesc.getEndpointDescription(portinfo.getPortName());
> + }
> +
> + if (ed != null) {
> + HandlerChainsType handlerCT_fromEndpointDesc = ed.getHandlerChain();
> + if (handlerCT == null) {
> + handlerCT = handlerCT_fromEndpointDesc;
> + }
> + }
>
> Iterator it = handlerCT == null ? null : handlerCT.getHandlerChain().iterator();
>
> @@ -171,17 +187,21 @@
> // 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(endpointDesc);
> -
> - HandlerLifecycleManager hlm = createHandlerlifecycleManager();
> -
> - // instantiate portHandler class
> + // instantiate portHandler class
> try {
> - handler = hlm.createHandlerInstance(ctx, loadClass(portHandler));
> - } catch (Exception e) {
> + // TODO: review: ok to use system classloader?
> + handler = (Handler) loadClass(portHandler).newInstance();
> + // TODO: must also do resource injection according to JAXWS 9.3.1
> + callHandlerPostConstruct(handler, serviceDesc);
> + } catch (ClassNotFoundException e) {
> + // TODO: should we just ignore this problem?
> + // TODO: NLS log and throw
> + throw ExceptionFactory.makeWebServiceException(e);
> + } catch (InstantiationException ie) {
> + // TODO: should we just ignore this problem?
> + // TODO: NLS log and throw
> + throw ExceptionFactory.makeWebServiceException(ie);
> + } catch (IllegalAccessException e) {
> // TODO: should we just ignore this problem?
> // TODO: NLS log and throw
> throw ExceptionFactory.makeWebServiceException(e);
> @@ -210,11 +230,6 @@
> return handlers;
> }
>
> - private HandlerLifecycleManager createHandlerlifecycleManager() {
> - HandlerLifecycleManagerFactory elmf = (HandlerLifecycleManagerFactory)FactoryRegistry
> - .getFactory(HandlerLifecycleManagerFactory.class);
> - return elmf.createHandlerLifecycleManager();
> - }
>
> private static Class loadClass(String clazz) throws ClassNotFoundException {
> try {
> @@ -272,6 +287,60 @@
> }
>
> return cl;
> + }
> +
> + private static void callHandlerPostConstruct(Handler handler, ServiceDescription serviceDesc)
> + throws WebServiceException {
> + ResourceInjectionServiceRuntimeDescription resInj =
> + ResourceInjectionServiceRuntimeDescriptionBuilder.create(serviceDesc,
> + handler.getClass());
> + if (resInj != null) {
> + Method pcMethod = resInj.getPostConstructMethod();
> + if (pcMethod != null) {
> + if (log.isDebugEnabled()) {
> + log.debug("Invoking Method with @PostConstruct annotation");
> + }
> + invokeMethod(handler, pcMethod, null);
> + if (log.isDebugEnabled()) {
> + log.debug("Completed invoke on Method with @PostConstruct annotation");
> + }
> + }
> + }
> + }
> + /*
> + * Helper method to destroy all instantiated Handlers once the runtime
> + * is done with them.
> + */
> + private static void callHandlerPreDestroy(Handler handler, ServiceDescription serviceDesc)
> + throws WebServiceException {
> + ResourceInjectionServiceRuntimeDescription resInj =
> + ResourceInjectionServiceRuntimeDescriptionBuilder.create(serviceDesc,
> + handler.getClass());
> + if (resInj != null) {
> + Method pcMethod = resInj.getPreDestroyMethod();
> + if (pcMethod != null) {
> + if (log.isDebugEnabled()) {
> + log.debug("Invoking Method with @PostConstruct annotation");
> + }
> + invokeMethod(handler, pcMethod, null);
> + if (log.isDebugEnabled()) {
> + log.debug("Completed invoke on Method with @PostConstruct annotation");
> + }
> + }
> + }
> + }
> +
> + private static void invokeMethod(Handler handlerInstance, Method m, Object[] params)
> + throws WebServiceException {
> + try {
> + m.invoke(handlerInstance, params);
> + } catch (InvocationTargetException e) {
> + // TODO perhaps a "HandlerLifecycleException" would be better?
> + throw ExceptionFactory.makeWebServiceException(e);
> + } catch (IllegalAccessException e) {
> + // TODO perhaps a "HandlerLifecycleException" would be better?
> + throw ExceptionFactory.makeWebServiceException(e);
> + }
> }
>
> private static boolean chainResolvesToPort(HandlerChainType handlerChainType, PortInfo portinfo) {
>
> Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/EndpointController.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/EndpointController.java?view=diff&rev=552920&r1=552919&r2=552920
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/EndpointController.java (original)
> +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/EndpointController.java Tue Jul 3 10:14:00 2007
> @@ -110,9 +110,7 @@
> * Since we're on the server, and there apparently is no Binding object
> * anywhere to be found...
> */
> - if (ic.getHandlers() == null) {
> - ic.setHandlers(new HandlerResolverImpl(endpointDesc).getHandlerChain(endpointDesc.getPortInfo()));
> - }
> + ic.setHandlers(new HandlerResolverImpl(endpointDesc.getServiceDescription()).getHandlerChain(endpointDesc.getPortInfo()));
>
> if (!bindingTypesMatch(requestMsgCtx, endpointDesc.getServiceDescription())) {
> Protocol protocol = requestMsgCtx.getMessage().getProtocol();
>
> Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java?view=diff&rev=552920&r1=552919&r2=552920
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java (original)
> +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java Tue Jul 3 10:14:00 2007
> @@ -282,6 +282,9 @@
> * @see javax.xml.ws.spi.ServiceDelegate#getHandlerResolver()
> */
> public HandlerResolver getHandlerResolver() {
> + if (handlerResolver == null) {
> + handlerResolver = new HandlerResolverImpl(serviceDescription);
> + }
> return handlerResolver;
> }
>
>
> Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersHandlerTests.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersHandlerTests.java?view=diff&rev=552920&r1=552919&r2=552920
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersHandlerTests.java (original)
> +++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersHandlerTests.java Tue Jul 3 10:14:00 2007
> @@ -492,4 +492,19 @@
>
> return new StreamSource(new StringReader(reqString));
> }
> +
> + public void testAddNumbersHandlerHandlerResolver() {
> + try {
> + System.out.println("----------------------------------");
> + System.out.println("test: " + getName());
> + AddNumbersHandlerService service = new AddNumbersHandlerService(); // will give NPE:
> + List<Handler> handlers = service.getHandlerResolver().getHandlerChain(null);
> + assertNotNull("Default handlers list should not be null but empty.", handlers);
> + System.out.println("----------------------------------");
> + } catch (Exception e) {
> + e.printStackTrace();
> + fail(e.getMessage());
> + }
> + }
> +
> }
>
> Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java?view=diff&rev=552920&r1=552919&r2=552920
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java (original)
> +++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java Tue Jul 3 10:14:00 2007
> @@ -20,7 +20,7 @@
>
> import org.apache.axis2.client.ServiceClient;
> import org.apache.axis2.context.ConfigurationContext;
> -
> +import org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType;
> import javax.xml.namespace.QName;
> import java.util.Collection;
> import java.util.List;
> @@ -84,6 +84,7 @@
>
> public abstract QName getServiceQName();
>
> + public abstract HandlerChainsType getHandlerChain();
> /**
> * Returns a list of the ports for this serivce. The ports returned are the - Ports declared
> * ports for this Service. They can be delcared in the WSDL or via annotations. - Dynamic ports
>
> Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java?view=diff&rev=552920&r1=552919&r2=552920
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java (original)
> +++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java Tue Jul 3 10:14:00 2007
> @@ -18,6 +18,39 @@
> */
> package org.apache.axis2.jaxws.description.impl;
>
> +import static org.apache.axis2.jaxws.description.builder.MDQConstants.RETURN_TYPE_FUTURE;
> +import static org.apache.axis2.jaxws.description.builder.MDQConstants.RETURN_TYPE_RESPONSE;
> +
> +import java.io.FileNotFoundException;
> +import java.io.IOException;
> +import java.io.InputStream;
> +import java.net.ConnectException;
> +import java.net.URL;
> +import java.net.UnknownHostException;
> +import java.util.ArrayList;
> +import java.util.Collection;
> +import java.util.Collections;
> +import java.util.Enumeration;
> +import java.util.HashMap;
> +import java.util.Hashtable;
> +import java.util.Iterator;
> +import java.util.List;
> +import java.util.Map;
> +import java.util.concurrent.ConcurrentHashMap;
> +
> +import javax.jws.HandlerChain;
> +import javax.wsdl.Definition;
> +import javax.wsdl.Port;
> +import javax.wsdl.PortType;
> +import javax.wsdl.Service;
> +import javax.wsdl.WSDLException;
> +import javax.wsdl.extensions.ExtensibilityElement;
> +import javax.xml.bind.JAXBContext;
> +import javax.xml.bind.JAXBElement;
> +import javax.xml.bind.Unmarshaller;
> +import javax.xml.namespace.QName;
> +import javax.xml.ws.soap.SOAPBinding;
> +
> import org.apache.axis2.client.ServiceClient;
> import org.apache.axis2.context.ConfigurationContext;
> import org.apache.axis2.description.AxisService;
> @@ -32,36 +65,15 @@
> import org.apache.axis2.jaxws.description.ServiceRuntimeDescription;
> import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
> import org.apache.axis2.jaxws.description.builder.MDQConstants;
> -import static org.apache.axis2.jaxws.description.builder.MDQConstants.RETURN_TYPE_FUTURE;
> -import static org.apache.axis2.jaxws.description.builder.MDQConstants.RETURN_TYPE_RESPONSE;
> import org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite;
> import org.apache.axis2.jaxws.description.builder.ParameterDescriptionComposite;
> +import org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType;
> import org.apache.axis2.jaxws.i18n.Messages;
> import org.apache.axis2.jaxws.util.WSDL4JWrapper;
> import org.apache.axis2.jaxws.util.WSDLWrapper;
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> -import javax.wsdl.Definition;
> -import javax.wsdl.Port;
> -import javax.wsdl.PortType;
> -import javax.wsdl.Service;
> -import javax.wsdl.WSDLException;
> -import javax.wsdl.extensions.ExtensibilityElement;
> -import javax.xml.namespace.QName;
> -import javax.xml.ws.soap.SOAPBinding;
> -import java.io.FileNotFoundException;
> -import java.io.IOException;
> -import java.net.ConnectException;
> -import java.net.URL;
> -import java.net.UnknownHostException;
> -import java.util.ArrayList;
> -import java.util.Collection;
> -import java.util.Collections;
> -import java.util.HashMap;
> -import java.util.Iterator;
> -import java.util.List;
> -import java.util.Map;
>
> /** @see ../ServiceDescription */
> class ServiceDescriptionImpl
> @@ -79,6 +91,10 @@
> // TODO: Possibly remove Definition and delegate to the Defn on the AxisSerivce set as a paramater by WSDLtoAxisServicBuilder?
> private WSDLWrapper wsdlWrapper;
> private WSDLWrapper generatedWsdlWrapper;
> +
> + //ANNOTATION: @HandlerChain
> + private HandlerChain handlerChainAnnotation;
> + private HandlerChainsType handlerChainsType;
>
> private Map<QName, EndpointDescription> endpointDescriptions =
> new HashMap<QName, EndpointDescription>();
> @@ -1322,8 +1338,87 @@
> return wsdlSpecified;
> }
>
> +
> + // ===========================================
> + // ANNOTATION: HandlerChain
> + // ===========================================
> +
> /**
> - * Returns the WSDL definiton as specified in the metadata. Note that this WSDL may not be
> + * Returns a schema derived java class containing the the handler configuration filel
> + *
> + * @return HandlerChainsType This is the top-level element for the Handler configuration file
> + *
> + */
> + public HandlerChainsType getHandlerChain() {
> +
> + if (handlerChainsType == null) {
> +
> + getAnnoHandlerChainAnnotation();
> + if (handlerChainAnnotation != null) {
> +
> + String handlerFileName = handlerChainAnnotation.file();
> +
> + // TODO RAS & NLS
> + if (log.isDebugEnabled()) {
> + if (composite != null) {
> + log.debug("EndpointDescriptionImpl.getHandlerChain: fileName: "
> + + handlerFileName + " className: " + composite.getClassName());
> + }
> + else {
> + log.debug("EndpointDescriptionImpl.getHandlerChain: fileName: "
> + + handlerFileName + " className: " + serviceClass.getName());
> + }
> + }
> +
> + String className =
> + (composite != null) ? composite.getClassName() : serviceClass.getName();
> +
> + ClassLoader classLoader =
> + (composite != null) ? composite.getClassLoader() : this.getClass()
> + .getClassLoader();
> +
> + InputStream is =
> + DescriptionUtils.openHandlerConfigStream(handlerFileName,
> + className,
> + classLoader);
> +
> + try {
> +
> + // All the classes we need should be part of this package
> + JAXBContext jc =
> + JAXBContext.newInstance("org.apache.axis2.jaxws.description.xml.handler",
> + this.getClass().getClassLoader());
> +
> + Unmarshaller u = jc.createUnmarshaller();
> +
> + JAXBElement<?> o = (JAXBElement<?>) u.unmarshal(is);
> + handlerChainsType = (HandlerChainsType) o.getValue();
> +
> + } catch (Exception e) {
> + throw ExceptionFactory.makeWebServiceException("EndpointDescriptionImpl: getHandlerChain: thrown when attempting to unmarshall JAXB content");
> + }
> + }
> + }
> + return handlerChainsType;
> + }
> +
> +
> + /*
> + * This is a client side only method. The generated service class may contain
> + * handler chain annotations
> + */
> + public HandlerChain getAnnoHandlerChainAnnotation() {
> + if (this.handlerChainAnnotation == null) {
> + if (serviceClass != null) {
> + handlerChainAnnotation =
> + (HandlerChain) serviceClass.getAnnotation(HandlerChain.class);
> + }
> + }
> +
> + return handlerChainAnnotation;
> + }
> +
> + /* Returns the WSDL definiton as specified in the metadata. Note that this WSDL may not be
> * complete.
> */
> public Definition getWSDLDefinition() {
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-cvs-help@ws.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org
Re: svn commit: r552920 - in /webservices/axis2/trunk/java/modules: jaxws/src/org/apache/axis2/jaxws/ jaxws/src/org/apache/axis2/jaxws/binding/ jaxws/src/org/apache/axis2/jaxws/handler/ jaxws/src/org/apache/axis2/jaxws/server/ jaxws/src/org/apache/ax
Posted by Nikhil V Thaker <ni...@us.ibm.com>.
Jarek - This patch adds implementation for getHandlerChainResolver() in
HandlerResolver. I have restored the HandlerLifeCycleManager code from
HandlerResolverImpl in revision 552952.
Thanks,
Nikhil Thaker
office: 512 838 9964
nvthaker@us.ibm.com
"Jarek Gawor" <jg...@gmail.com>
07/03/2007 12:48 PM
Please respond to
axis-dev@ws.apache.org
To
"axis-dev@ws.apache.org" <ax...@ws.apache.org>
cc
Subject
Re: svn commit: r552920 - in /webservices/axis2/trunk/java/modules:
jaxws/src/org/apache/axis2/jaxws/
jaxws/src/org/apache/axis2/jaxws/binding/
jaxws/src/org/apache/axis2/jaxws/handler/
jaxws/src/org/apache/axis2/jaxws/server/ jaxws/src/org/apache/ax
I'm sorry, I have to object to this commit. This is removing some of
the changes I've made before (and one change just got removed for the
second time!). For example I've added support for
HandlerLifecycleManager that works just like EndpointLifecycleManager
and can do injection/call PostConstruct and this commit just removed
calls to it. Please explain why is this necessary.
Jarek
On 7/3/07, nthaker@apache.org <nt...@apache.org> wrote:
> Author: nthaker
> Date: Tue Jul 3 10:14:00 2007
> New Revision: 552920
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=552920
> Log:
> JIRA = AXIS2-2894
>
> Modified:
>
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java
>
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java
>
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerResolverImpl.java
>
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/EndpointController.java
>
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java
>
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersHandlerTests.java
>
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java
>
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java
>
> Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java
> URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java?view=diff&rev=552920&r1=552919&r2=552920
>
==============================================================================
> ---
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java
(original)
> +++
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java
Tue Jul 3 10:14:00 2007
> @@ -18,6 +18,11 @@
> */
> package org.apache.axis2.jaxws;
>
> +import java.util.Hashtable;
> +import java.util.Map;
> +
> +import javax.xml.ws.Binding;
> +import javax.xml.ws.handler.HandlerResolver;
> import org.apache.axis2.jaxws.binding.BindingUtils;
> import org.apache.axis2.jaxws.binding.SOAPBinding;
> import org.apache.axis2.jaxws.client.PropertyValidator;
> @@ -29,11 +34,8 @@
> import org.apache.axis2.jaxws.spi.ServiceDelegate;
> import org.apache.axis2.transport.http.HTTPConstants;
>
> -import javax.xml.ws.Binding;
> -import javax.xml.ws.handler.HandlerResolver;
> -
> -import java.util.Hashtable;
> -import java.util.Map;
> +import org.apache.commons.logging.Log;
> +import org.apache.commons.logging.LogFactory;
>
> public class BindingProvider implements
org.apache.axis2.jaxws.spi.BindingProvider {
>
> @@ -46,7 +48,7 @@
> protected ServiceDelegate serviceDelegate;
>
> private Binding binding = null;
> -
> + private static final Log log =
LogFactory.getLog(BindingProvider.class);
> public BindingProvider(ServiceDelegate svcDelegate,
EndpointDescription epDesc) {
> endpointDesc = epDesc;
> serviceDelegate = svcDelegate;
> @@ -75,11 +77,23 @@
> // so we can also set the handlerchain
> if (binding == null) {
> binding = BindingUtils.createBinding(endpointDesc);
> -
> + if(log.isDebugEnabled()){
> + log.debug("Lookign for Handler Resolver");
> + }
> // TODO should we allow the ServiceDelegate to figure out
the default handlerresolver? Probably yes, since a client app may look
for one there.
> - HandlerResolver handlerResolver =
> - serviceDelegate.getHandlerResolver() != null ?
serviceDelegate.getHandlerResolver()
> - : new HandlerResolverImpl(endpointDesc);
> + HandlerResolver handlerResolver = null;
> + if(serviceDelegate.getHandlerResolver() != null){
> + if(log.isDebugEnabled()){
> + log.debug("Reading default Handler Resolver ");
> + }
> + handlerResolver= serviceDelegate.getHandlerResolver();
> + }
> + else{
> + handlerResolver = new
HandlerResolverImpl(endpointDesc.getServiceDescription());
> + if(log.isDebugEnabled()){
> + log.debug("Creating new Handler Resolver using
HandlerResolverImpl");
> + }
> + }
>
binding.setHandlerChain(handlerResolver.getHandlerChain(endpointDesc.getPortInfo()));
> }
>
>
> Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java
> URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java?view=diff&rev=552920&r1=552919&r2=552920
>
==============================================================================
> ---
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java
(original)
> +++
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java
Tue Jul 3 10:14:00 2007
> @@ -19,16 +19,15 @@
>
> package org.apache.axis2.jaxws.binding;
>
> -import org.apache.axis2.jaxws.description.EndpointDescription;
> -import org.apache.axis2.jaxws.handler.HandlerResolverImpl;
> +import java.util.ArrayList;
> +import java.util.List;
> +import java.util.Set;
>
> import javax.xml.ws.Binding;
> import javax.xml.ws.handler.Handler;
>
> -import java.net.URI;
> -import java.util.ArrayList;
> -import java.util.List;
> -import java.util.Set;
> +import org.apache.axis2.jaxws.description.EndpointDescription;
> +import org.apache.axis2.jaxws.handler.HandlerResolverImpl;
>
> /**
> * @author rott classes that would normally "implement
javax.xml.ws.Binding"
> @@ -63,11 +62,10 @@
> }
>
> public List<Handler> getHandlerChain() {
> - if (handlers == null && endpointDesc != null) {
> - handlers = new
HandlerResolverImpl(endpointDesc).getHandlerChain(endpointDesc
> - .getPortInfo());
> - }
> if (handlers == null) {
> + handlers =
> + new
HandlerResolverImpl(endpointDesc.getServiceDescription()).getHandlerChain(endpointDesc.getPortInfo());
> + if (handlers == null)
> handlers = new ArrayList<Handler>(); // non-null so client
> // apps can manipulate
> }
>
> 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?view=diff&rev=552920&r1=552919&r2=552920
>
==============================================================================
> ---
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
Tue Jul 3 10:14:00 2007
> @@ -18,36 +18,37 @@
> */
> package org.apache.axis2.jaxws.handler;
>
> -import java.security.PrivilegedActionException;
> -import java.security.PrivilegedExceptionAction;
> -import java.util.ArrayList;
> -import java.util.HashMap;
> -import java.util.Iterator;
> -import java.util.List;
> -import java.util.Map;
> -
> -import javax.xml.namespace.QName;
> -import javax.xml.ws.WebServiceException;
> -import javax.xml.ws.handler.Handler;
> -import javax.xml.ws.handler.HandlerResolver;
> -import javax.xml.ws.handler.LogicalHandler;
> -import javax.xml.ws.handler.PortInfo;
> -import javax.xml.ws.handler.soap.SOAPHandler;
> -
> +import org.apache.axis2.client.OperationClient;
> import org.apache.axis2.java.security.AccessController;
> import org.apache.axis2.jaxws.ExceptionFactory;
> -import org.apache.axis2.jaxws.core.MessageContext;
> import org.apache.axis2.jaxws.description.EndpointDescription;
> +import org.apache.axis2.jaxws.description.ServiceDescription;
> import org.apache.axis2.jaxws.description.xml.handler.HandlerChainType;
> import
org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType;
> import org.apache.axis2.jaxws.description.xml.handler.HandlerType;
> -import
org.apache.axis2.jaxws.handler.lifecycle.factory.HandlerLifecycleManager;
> -import
org.apache.axis2.jaxws.handler.lifecycle.factory.HandlerLifecycleManagerFactory;
> import org.apache.axis2.jaxws.i18n.Messages;
> -import org.apache.axis2.jaxws.registry.FactoryRegistry;
> +import
org.apache.axis2.jaxws.runtime.description.injection.ResourceInjectionServiceRuntimeDescription;
> +import
org.apache.axis2.jaxws.runtime.description.injection.impl.ResourceInjectionServiceRuntimeDescriptionBuilder;
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> +import javax.xml.namespace.QName;
> +import javax.xml.ws.WebServiceException;
> +import javax.xml.ws.handler.Handler;
> +import javax.xml.ws.handler.HandlerResolver;
> +import javax.xml.ws.handler.LogicalHandler;
> +import javax.xml.ws.handler.PortInfo;
> +import javax.xml.ws.handler.soap.SOAPHandler;
> +
> +import java.lang.reflect.InvocationTargetException;
> +import java.lang.reflect.Method;
> +import java.security.PrivilegedActionException;
> +import java.security.PrivilegedExceptionAction;
> +import java.util.ArrayList;
> +import java.util.HashMap;
> +import java.util.Iterator;
> +import java.util.List;
> +import java.util.Map;
> /*
> * This class should be created by the ServiceDelegate.
> * HandlerResolverImpl.getHandlerChain(PortInfo) will be called by the
> @@ -78,10 +79,12 @@
> */
>
> // we'll need to refer to this object to get the port, and thus
handlers
> - private EndpointDescription endpointDesc;
> + //private EndpointDescription endpointDesc;
> + private ServiceDescription serviceDesc;
>
> - public HandlerResolverImpl(EndpointDescription ed) {
> - this.endpointDesc = ed;
> + public HandlerResolverImpl(ServiceDescription sd) {
//EndpointDescription ed) {
> + //this.endpointDesc = ed;
> + this.serviceDesc = sd;
> }
>
> public ArrayList<Handler> getHandlerChain(PortInfo portinfo) {
> @@ -142,12 +145,25 @@
>
> ArrayList<Handler> handlers = new ArrayList<Handler>();
>
> - /*
> - * TODO: do a better job checking that the return value
matches up
> + /*
> + * TODO: do a better job checking that the return value matches
up
> * with the PortInfo object before we add it to the chain.
> - */
> -
> - HandlerChainsType handlerCT = endpointDesc.getHandlerChain();
> + */
> +
> + HandlerChainsType handlerCT = serviceDesc.getHandlerChain();
> + // if there's a handlerChain on the serviceDesc, it means the
WSDL defined an import for a HandlerChain.
> + // the spec indicates that if a handlerchain also appears on
the SEI on the client.
> + EndpointDescription ed = null;
> + if(portinfo !=null){
> + ed =
serviceDesc.getEndpointDescription(portinfo.getPortName());
> + }
> +
> + if (ed != null) {
> + HandlerChainsType handlerCT_fromEndpointDesc =
ed.getHandlerChain();
> + if (handlerCT == null) {
> + handlerCT = handlerCT_fromEndpointDesc;
> + }
> + }
>
> Iterator it = handlerCT == null ? null :
handlerCT.getHandlerChain().iterator();
>
> @@ -171,17 +187,21 @@
> // 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(endpointDesc);
> -
> - HandlerLifecycleManager hlm =
createHandlerlifecycleManager();
> -
> - // instantiate portHandler class
> + // instantiate portHandler class
> try {
> - handler = hlm.createHandlerInstance(ctx,
loadClass(portHandler));
> - } catch (Exception e) {
> + // TODO: review: ok to use system classloader?
> + handler = (Handler)
loadClass(portHandler).newInstance();
> + // TODO: must also do resource injection according
to JAXWS 9.3.1
> + callHandlerPostConstruct(handler, serviceDesc);
> + } catch (ClassNotFoundException e) {
> + // TODO: should we just ignore this problem?
> + // TODO: NLS log and throw
> + throw ExceptionFactory.makeWebServiceException(e);
> + } catch (InstantiationException ie) {
> + // TODO: should we just ignore this problem?
> + // TODO: NLS log and throw
> + throw ExceptionFactory.makeWebServiceException(ie);
> + } catch (IllegalAccessException e) {
> // TODO: should we just ignore this problem?
> // TODO: NLS log and throw
> throw ExceptionFactory.makeWebServiceException(e);
> @@ -210,11 +230,6 @@
> return handlers;
> }
>
> - private HandlerLifecycleManager createHandlerlifecycleManager() {
> - HandlerLifecycleManagerFactory elmf =
(HandlerLifecycleManagerFactory)FactoryRegistry
> - .getFactory(HandlerLifecycleManagerFactory.class);
> - return elmf.createHandlerLifecycleManager();
> - }
>
> private static Class loadClass(String clazz) throws
ClassNotFoundException {
> try {
> @@ -272,6 +287,60 @@
> }
>
> return cl;
> + }
> +
> + private static void callHandlerPostConstruct(Handler handler,
ServiceDescription serviceDesc)
> + throws WebServiceException {
> + ResourceInjectionServiceRuntimeDescription resInj =
> + ResourceInjectionServiceRuntimeDescriptionBuilder.create(serviceDesc,
> + handler.getClass());
> + if (resInj != null) {
> + Method pcMethod = resInj.getPostConstructMethod();
> + if (pcMethod != null) {
> + if (log.isDebugEnabled()) {
> + log.debug("Invoking Method with @PostConstruct
annotation");
> + }
> + invokeMethod(handler, pcMethod, null);
> + if (log.isDebugEnabled()) {
> + log.debug("Completed invoke on Method with
@PostConstruct annotation");
> + }
> + }
> + }
> + }
> + /*
> + * Helper method to destroy all instantiated Handlers once the
runtime
> + * is done with them.
> + */
> + private static void callHandlerPreDestroy(Handler handler,
ServiceDescription serviceDesc)
> + throws WebServiceException {
> + ResourceInjectionServiceRuntimeDescription resInj =
> + ResourceInjectionServiceRuntimeDescriptionBuilder.create(serviceDesc,
> + handler.getClass());
> + if (resInj != null) {
> + Method pcMethod = resInj.getPreDestroyMethod();
> + if (pcMethod != null) {
> + if (log.isDebugEnabled()) {
> + log.debug("Invoking Method with @PostConstruct
annotation");
> + }
> + invokeMethod(handler, pcMethod, null);
> + if (log.isDebugEnabled()) {
> + log.debug("Completed invoke on Method with
@PostConstruct annotation");
> + }
> + }
> + }
> + }
> +
> + private static void invokeMethod(Handler handlerInstance, Method m,
Object[] params)
> + throws WebServiceException {
> + try {
> + m.invoke(handlerInstance, params);
> + } catch (InvocationTargetException e) {
> + // TODO perhaps a "HandlerLifecycleException" would be
better?
> + throw ExceptionFactory.makeWebServiceException(e);
> + } catch (IllegalAccessException e) {
> + // TODO perhaps a "HandlerLifecycleException" would be
better?
> + throw ExceptionFactory.makeWebServiceException(e);
> + }
> }
>
> private static boolean chainResolvesToPort(HandlerChainType
handlerChainType, PortInfo portinfo) {
>
> Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/EndpointController.java
> URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/EndpointController.java?view=diff&rev=552920&r1=552919&r2=552920
>
==============================================================================
> ---
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/EndpointController.java
(original)
> +++
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/EndpointController.java
Tue Jul 3 10:14:00 2007
> @@ -110,9 +110,7 @@
> * Since we're on the server, and there apparently is no
Binding object
> * anywhere to be found...
> */
> - if (ic.getHandlers() == null) {
> - ic.setHandlers(new
HandlerResolverImpl(endpointDesc).getHandlerChain(endpointDesc.getPortInfo()));
> - }
> + ic.setHandlers(new
HandlerResolverImpl(endpointDesc.getServiceDescription()).getHandlerChain(endpointDesc.getPortInfo()));
>
> if (!bindingTypesMatch(requestMsgCtx,
endpointDesc.getServiceDescription())) {
> Protocol protocol =
requestMsgCtx.getMessage().getProtocol();
>
> Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java
> URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java?view=diff&rev=552920&r1=552919&r2=552920
>
==============================================================================
> ---
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java
(original)
> +++
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java
Tue Jul 3 10:14:00 2007
> @@ -282,6 +282,9 @@
> * @see javax.xml.ws.spi.ServiceDelegate#getHandlerResolver()
> */
> public HandlerResolver getHandlerResolver() {
> + if (handlerResolver == null) {
> + handlerResolver = new
HandlerResolverImpl(serviceDescription);
> + }
> return handlerResolver;
> }
>
>
> Modified:
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersHandlerTests.java
> URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersHandlerTests.java?view=diff&rev=552920&r1=552919&r2=552920
>
==============================================================================
> ---
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersHandlerTests.java
(original)
> +++
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersHandlerTests.java
Tue Jul 3 10:14:00 2007
> @@ -492,4 +492,19 @@
>
> return new StreamSource(new StringReader(reqString));
> }
> +
> + public void testAddNumbersHandlerHandlerResolver() {
> + try {
> + System.out.println("----------------------------------");
> + System.out.println("test: " + getName());
> + AddNumbersHandlerService service = new
AddNumbersHandlerService(); // will give NPE:
> + List<Handler> handlers =
service.getHandlerResolver().getHandlerChain(null);
> + assertNotNull("Default handlers list should not be null but
empty.", handlers);
> + System.out.println("----------------------------------");
> + } catch (Exception e) {
> + e.printStackTrace();
> + fail(e.getMessage());
> + }
> + }
> +
> }
>
> Modified:
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java
> URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java?view=diff&rev=552920&r1=552919&r2=552920
>
==============================================================================
> ---
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java
(original)
> +++
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java
Tue Jul 3 10:14:00 2007
> @@ -20,7 +20,7 @@
>
> import org.apache.axis2.client.ServiceClient;
> import org.apache.axis2.context.ConfigurationContext;
> -
> +import
org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType;
> import javax.xml.namespace.QName;
> import java.util.Collection;
> import java.util.List;
> @@ -84,6 +84,7 @@
>
> public abstract QName getServiceQName();
>
> + public abstract HandlerChainsType getHandlerChain();
> /**
> * Returns a list of the ports for this serivce. The ports
returned are the - Ports declared
> * ports for this Service. They can be delcared in the WSDL or via
annotations. - Dynamic ports
>
> Modified:
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java
> URL:
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java?view=diff&rev=552920&r1=552919&r2=552920
>
==============================================================================
> ---
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java
(original)
> +++
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java
Tue Jul 3 10:14:00 2007
> @@ -18,6 +18,39 @@
> */
> package org.apache.axis2.jaxws.description.impl;
>
> +import static
org.apache.axis2.jaxws.description.builder.MDQConstants.RETURN_TYPE_FUTURE;
> +import static
org.apache.axis2.jaxws.description.builder.MDQConstants.RETURN_TYPE_RESPONSE;
> +
> +import java.io.FileNotFoundException;
> +import java.io.IOException;
> +import java.io.InputStream;
> +import java.net.ConnectException;
> +import java.net.URL;
> +import java.net.UnknownHostException;
> +import java.util.ArrayList;
> +import java.util.Collection;
> +import java.util.Collections;
> +import java.util.Enumeration;
> +import java.util.HashMap;
> +import java.util.Hashtable;
> +import java.util.Iterator;
> +import java.util.List;
> +import java.util.Map;
> +import java.util.concurrent.ConcurrentHashMap;
> +
> +import javax.jws.HandlerChain;
> +import javax.wsdl.Definition;
> +import javax.wsdl.Port;
> +import javax.wsdl.PortType;
> +import javax.wsdl.Service;
> +import javax.wsdl.WSDLException;
> +import javax.wsdl.extensions.ExtensibilityElement;
> +import javax.xml.bind.JAXBContext;
> +import javax.xml.bind.JAXBElement;
> +import javax.xml.bind.Unmarshaller;
> +import javax.xml.namespace.QName;
> +import javax.xml.ws.soap.SOAPBinding;
> +
> import org.apache.axis2.client.ServiceClient;
> import org.apache.axis2.context.ConfigurationContext;
> import org.apache.axis2.description.AxisService;
> @@ -32,36 +65,15 @@
> import org.apache.axis2.jaxws.description.ServiceRuntimeDescription;
> import
org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
> import org.apache.axis2.jaxws.description.builder.MDQConstants;
> -import static
org.apache.axis2.jaxws.description.builder.MDQConstants.RETURN_TYPE_FUTURE;
> -import static
org.apache.axis2.jaxws.description.builder.MDQConstants.RETURN_TYPE_RESPONSE;
> import
org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite;
> import
org.apache.axis2.jaxws.description.builder.ParameterDescriptionComposite;
> +import
org.apache.axis2.jaxws.description.xml.handler.HandlerChainsType;
> import org.apache.axis2.jaxws.i18n.Messages;
> import org.apache.axis2.jaxws.util.WSDL4JWrapper;
> import org.apache.axis2.jaxws.util.WSDLWrapper;
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> -import javax.wsdl.Definition;
> -import javax.wsdl.Port;
> -import javax.wsdl.PortType;
> -import javax.wsdl.Service;
> -import javax.wsdl.WSDLException;
> -import javax.wsdl.extensions.ExtensibilityElement;
> -import javax.xml.namespace.QName;
> -import javax.xml.ws.soap.SOAPBinding;
> -import java.io.FileNotFoundException;
> -import java.io.IOException;
> -import java.net.ConnectException;
> -import java.net.URL;
> -import java.net.UnknownHostException;
> -import java.util.ArrayList;
> -import java.util.Collection;
> -import java.util.Collections;
> -import java.util.HashMap;
> -import java.util.Iterator;
> -import java.util.List;
> -import java.util.Map;
>
> /** @see ../ServiceDescription */
> class ServiceDescriptionImpl
> @@ -79,6 +91,10 @@
> // TODO: Possibly remove Definition and delegate to the Defn on the
AxisSerivce set as a paramater by WSDLtoAxisServicBuilder?
> private WSDLWrapper wsdlWrapper;
> private WSDLWrapper generatedWsdlWrapper;
> +
> + //ANNOTATION: @HandlerChain
> + private HandlerChain handlerChainAnnotation;
> + private HandlerChainsType handlerChainsType;
>
> private Map<QName, EndpointDescription> endpointDescriptions =
> new HashMap<QName, EndpointDescription>();
> @@ -1322,8 +1338,87 @@
> return wsdlSpecified;
> }
>
> +
> + // ===========================================
> + // ANNOTATION: HandlerChain
> + // ===========================================
> +
> /**
> - * Returns the WSDL definiton as specified in the metadata. Note
that this WSDL may not be
> + * Returns a schema derived java class containing the the handler
configuration filel
> + *
> + * @return HandlerChainsType This is the top-level element for the
Handler configuration file
> + *
> + */
> + public HandlerChainsType getHandlerChain() {
> +
> + if (handlerChainsType == null) {
> +
> + getAnnoHandlerChainAnnotation();
> + if (handlerChainAnnotation != null) {
> +
> + String handlerFileName = handlerChainAnnotation.file();
> +
> + // TODO RAS & NLS
> + if (log.isDebugEnabled()) {
> + if (composite != null) {
> + log.debug("EndpointDescriptionImpl.getHandlerChain: fileName: "
> + + handlerFileName + " className: " +
composite.getClassName());
> + }
> + else {
> + log.debug("EndpointDescriptionImpl.getHandlerChain: fileName: "
> + + handlerFileName + " className: " +
serviceClass.getName());
> + }
> + }
> +
> + String className =
> + (composite != null) ? composite.getClassName()
: serviceClass.getName();
> +
> + ClassLoader classLoader =
> + (composite != null) ?
composite.getClassLoader() : this.getClass()
> + .getClassLoader();
> +
> + InputStream is =
> + DescriptionUtils.openHandlerConfigStream(handlerFileName,
> + className,
> + classLoader);
> +
> + try {
> +
> + // All the classes we need should be part of this
package
> + JAXBContext jc =
> +
JAXBContext.newInstance("org.apache.axis2.jaxws.description.xml.handler",
> + this.getClass().getClassLoader());
> +
> + Unmarshaller u = jc.createUnmarshaller();
> +
> + JAXBElement<?> o = (JAXBElement<?>)
u.unmarshal(is);
> + handlerChainsType = (HandlerChainsType)
o.getValue();
> +
> + } catch (Exception e) {
> + throw
ExceptionFactory.makeWebServiceException("EndpointDescriptionImpl:
getHandlerChain: thrown when attempting to unmarshall JAXB content");
> + }
> + }
> + }
> + return handlerChainsType;
> + }
> +
> +
> + /*
> + * This is a client side only method. The generated service class
may contain
> + * handler chain annotations
> + */
> + public HandlerChain getAnnoHandlerChainAnnotation() {
> + if (this.handlerChainAnnotation == null) {
> + if (serviceClass != null) {
> + handlerChainAnnotation =
> + (HandlerChain)
serviceClass.getAnnotation(HandlerChain.class);
> + }
> + }
> +
> + return handlerChainAnnotation;
> + }
> +
> + /* Returns the WSDL definiton as specified in the metadata. Note
that this WSDL may not be
> * complete.
> */
> public Definition getWSDLDefinition() {
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-cvs-help@ws.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org