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 Ruchith Fernando <ru...@gmail.com> on 2007/03/27 03:37:22 UTC

Re: Copyright statements [Re: svn commit: r522411 - in /webservices/axis2/trunk/java/modules: jaxws/src/org/apache/axis2/jaxws/core/controller/ jaxws/src/org/apache/axis2/jaxws/handler/ jaxws/src/org/apache/axis2/jaxws/server/ jaxws/src/org/apache/ax

FYI :
jaxws/src/ -> grep -r "Copyright 2006 International Business Machines Corp" *
http://rafb.net/p/agM5o249.html

Thanks,
Ruchith

On 3/27/07, Nicholas L Gallardo <nl...@us.ibm.com> wrote:
>
> Fixed...  Thanks for catching it.
>
> Nicholas Gallardo
>  WebSphere  -  WebServices Development
>  nlgallar@us.ibm.com
>  Phone: 512-838-1182
>  Building: 901 / 5G-016
>
>
>
>  "Davanum Srinivas" <da...@gmail.com>
>
> 03/26/2007 07:03 PM
>
> Please respond to
>  axis-dev@ws.apache.org
>
>
> To "ngallardo@apache.org" <ng...@apache.org>
>
> cc "axis-dev@ws.apache.org" <ax...@ws.apache.org>
>
> Subject Copyright statements [Re: svn commit: r522411 - in /webservices/axis2/trunk/java/modules: jaxws/src/org/apache/axis2/jaxws/core/controller/ jaxws/src/org/apache/axis2/jaxws/handler/ jaxws/src/org/apache/axis2/jaxws/server/ jaxws/src/org/apache/axis2/
>
>
>
>
>
>
>
>
> Nick,
>
>  A couple of copyright staments have crept in...Please rectify.
>
>  + * Copyright 2006 International Business Machines Corp.
>
>  thanks,
>  dims
>
>  On 3/26/07, ngallardo@apache.org <ng...@apache.org> wrote:
>  > Author: ngallardo
>  > Date: Sun Mar 25 21:25:20 2007
>  > New Revision: 522411
>  >
>  > URL: http://svn.apache.org/viewvc?view=rev&rev=522411
>  > Log:
>  > AXIS2-2218
>  > Contributor: Mike Rheinhiemer
>  >
>  > The first portion of the server side handler chain integration.
>  >
>  > Added:
>  >     webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerInvokerUtils.java
>  >     webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/addnumbers/AddNumbersLogicalHandler.java
>  > Modified:
>  >     webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java
>  >     webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/InvocationController.java
>  >     webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerChainProcessor.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/handler/LogicalMessageContext.java
>  >     webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/ProtectedMessageContext.java
>  >     webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/SoapMessageContext.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/server/dispatcher/ProviderDispatcher.java
>  >     webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/utility/SAAJFactory.java
>  >     webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java
>  >     webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersTests.java
>  >     webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/addnumbers/AddNumbersFault_Exception.java
>  >     webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/addnumbers/AddNumbersPortType.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/core/controller/AxisInvocationController.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java?view=diff&rev=522411&r1=522410&r2=522411
>  > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java (original)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java Sun Mar 25 21:25:20 2007
>  > @@ -216,7 +216,7 @@
>  >                  || opClient.getOptions().isUseSeparateListener()) {
>  >              configureAsyncListener(opClient, request.getAxisMessageContext());
>  >          }
>  > -               else {
>  > +       else {
>  >              if (log.isDebugEnabled()) {
>  >                  log.debug("Asynchronous message exchange not enabled.  The invocation will be synchronous.");
>  >              }
>  > @@ -292,6 +292,11 @@
>  >          if((useAsyncMep != null && useAsyncMep.booleanValue())
>  >                  || opClient.getOptions().isUseSeparateListener()) {
>  >              configureAsyncListener(opClient, request.getAxisMessageContext());
>  > +        }
>  > +        else {
>  > +            if (log.isDebugEnabled()) {
>  > +                log.debug("Asynchronous message exchange not enabled.  The invocation will be synchronous.");
>  > +            }
>  >          }
>  >
>  >          AsyncResponse resp = ic.getAsyncResponseListener();
>  >
>  > Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/InvocationController.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/InvocationController.java?view=diff&rev=522411&r1=522410&r2=522411
>  > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/InvocationController.java (original)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/InvocationController.java Sun Mar 25 21:25:20 2007
>  > @@ -152,7 +152,7 @@
>  >       */
>  >      public Response invokeAsync(InvocationContext ic) {
>  >          if (log.isDebugEnabled()) {
>  > -            log.debug("Invocation pattern: asynchronous(callback)");
>  > +            log.debug("Invocation pattern: asynchronous(polling)");
>  >          }
>  >
>  >          // Check to make sure we at least have a valid InvocationContext
>  >
>  > Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerChainProcessor.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerChainProcessor.java?view=diff&rev=522411&r1=522410&r2=522411
>  > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerChainProcessor.java (original)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerChainProcessor.java Sun Mar 25 21:25:20 2007
>  > @@ -1,7 +1,30 @@
>  > +/*
>  > + * 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.axis2.jaxws.handler;
>  >
>  >  import java.util.ArrayList;
>  >
>  > +import javax.xml.soap.SOAPBody;
>  > +import javax.xml.soap.SOAPConstants;
>  > +import javax.xml.soap.SOAPException;
>  > +import javax.xml.soap.SOAPFault;
>  > +import javax.xml.soap.SOAPMessage;
>  >  import javax.xml.ws.ProtocolException;
>  >  import javax.xml.ws.WebServiceException;
>  >  import javax.xml.ws.handler.Handler;
>  > @@ -12,6 +35,11 @@
>  >
>  >  import org.apache.axis2.jaxws.ExceptionFactory;
>  >  import org.apache.axis2.jaxws.i18n.Messages;
>  > +import org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils;
>  > +import org.apache.axis2.jaxws.message.Protocol;
>  > +import org.apache.axis2.jaxws.message.XMLFault;
>  > +import org.apache.axis2.jaxws.message.util.XMLFaultUtils;
>  > +import org.apache.axis2.jaxws.utility.SAAJFactory;
>  >
>  >  public class HandlerChainProcessor {
>  >
>  > @@ -40,7 +68,7 @@
>  >         private final static int OTHER_EXCEPTION = 3;
>  >         // save it if Handler.handleMessage throws one in HandlerChainProcessor.handleMessage
>  >         private RuntimeException savedException;
>  > -
>  > +
>  >         /*
>  >          * HandlerChainProcess expects null, empty list, or an already-sorted
>  >          * list.  If the chain passed into here came from our HandlerChainResolver,
>  > @@ -94,7 +122,7 @@
>  >          * 1.  Has the MessageContext.MESSAGE_OUTBOUND_PROPERTY changed, indicating reversal of message direction
>  >          * 2.  Has the message been converted to a fault message? (indicated by a flag in the message)
>  >          */
>  > -       public void processChain(MessageContext mc, Direction direction, MEP mep, boolean expectResponse) {
>  > +       public MessageContext processChain(MessageContext mc, Direction direction, MEP mep, boolean expectResponse) {
>  >                 // make sure it's set:
>  >                 mc.put(MessageContext.MESSAGE_OUTBOUND_PROPERTY, (direction == Direction.OUT));
>  >
>  > @@ -117,6 +145,9 @@
>  >                                 callGenericHandlers(mep, expectResponse, logicalLength-1, 0, direction);
>  >                         }
>  >                 }
>  > +               // message context may have been changed to be response, and message converted
>  > +               // according to the JAXWS spec 9.3.2.1 footnote 2
>  > +               return this.mc;
>  >         }
>  >
>  >
>  > @@ -139,7 +170,7 @@
>  >
>  >                 if (direction == Direction.OUT) {
>  >                         while ((i <= end) && (result == SUCCESSFUL)) {
>  > -                               result = handleMessage(((Handler)handlers.get(i)), mc, direction, expectResponse);
>  > +                               result = handleMessage(((Handler)handlers.get(i)), direction, expectResponse);
>  >                                 newStart = i-1;
>  >                                 newStart_inclusive = i;
>  >                                 newEnd = 0;
>  > @@ -149,7 +180,7 @@
>  >                 }
>  >                 else { // IN case
>  >                         while ((i >= end) && (result == SUCCESSFUL)) {
>  > -                               result = handleMessage(((Handler)handlers.get(i)), mc, direction, expectResponse);
>  > +                               result = handleMessage(((Handler)handlers.get(i)), direction, expectResponse);
>  >                                 newStart = i+1;
>  >                                 newStart_inclusive = i;
>  >                                 newEnd = handlers.size()-1;
>  > @@ -192,8 +223,8 @@
>  >
>  >         /*
>  >          * callGenericHandlers_avoidRecursion should ONLY be called from one place.
>  > -        * We can safely assume no false returns and no exceptions will be thrown
>  > -        * from here since the handlers we will be calling have all already
>  > +        * TODO:  We cannot necessarily assume no false returns and no exceptions will be
>  > +     * thrown from here even though the handlers we will be calling have all already
>  >          * succeeded in callGenericHandlers.
>  >          */
>  >         private void callGenericHandlers_avoidRecursion(int start,
>  > @@ -217,7 +248,7 @@
>  >          * If an exception is thrown and a response is expected, the MessageContext is updated with the handler information
>  >          * @returns SUCCESSFUL if successfully, UNSUCCESSFUL if false, EXCEPTION if exception thrown
>  >          */
>  > -       private int handleMessage(Handler handler, MessageContext mc, Direction direction,
>  > +       private int handleMessage(Handler handler, Direction direction,
>  >                         boolean expectResponse) throws RuntimeException {
>  >                 try {
>  >                         boolean success = handler.handleMessage(mc);
>  > @@ -231,9 +262,10 @@
>  >                 } catch (RuntimeException re) {  // RuntimeException and ProtocolException
>  >                         savedException = re;
>  >                         if (expectResponse)
>  > +                // mark it as reverse direction
>  >                                 mc.put(MessageContext.MESSAGE_OUTBOUND_PROPERTY, (direction != Direction.OUT));
>  >                         if (ProtocolException.class.isAssignableFrom(re.getClass())) {
>  > -                               convertToFaultMessage(mc, re);
>  > +                               convertToFaultMessage(re);
>  >                                 return PROTOCOL_EXCEPTION;
>  >                         }
>  >                         return OTHER_EXCEPTION;
>  > @@ -276,7 +308,7 @@
>  >          * opposite direction as this call to callHandleFault, and thus
>  >          * should be closed.
>  >          */
>  > -       public void processFault(SOAPMessageContext mc, Direction direction) {
>  > +       public void processFault(MessageContext mc, Direction direction) {
>  >
>  >                 // direction.IN = client
>  >                 // direction.OUT = server
>  > @@ -336,10 +368,48 @@
>  >         }
>  >
>  >
>  > -       private void convertToFaultMessage(MessageContext mc, Exception e) {
>  > -               // TODO: implement
>  > +       private void convertToFaultMessage(Exception e) {
>  > +
>  >                 // need to check if message is already a fault message or not,
>  >                 // probably by way of a flag (isFault) in the MessageContext or Message
>  > +        try {
>  > +
>  > +               /* TODO TODO TODO
>  > +                * There has GOT to be a better way to do this.
>  > +                */
>  > +
>  > +               // TODO how do we figure out the soap version on the MessageContext without
>  > +               // using the message itself?  Reason for not using the message itself is that
>  > +               // most of the SAAJ methods in Axis2 that we need are unimplemented.
>  > +               // for testing, I'm gonna use soap11.
>  > +               Protocol protocol = Protocol.soap11;
>  > +
>  > +               if (protocol == Protocol.soap11 || protocol == Protocol.soap12) {
>  > +                String protocolNS = (protocol == Protocol.soap11) ?
>  > +                        SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE :
>  > +                            SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE;
>  > +
>  > +                // The following set of instructions is used to avoid
>  > +                // some unimplemented methods in the Axis2 SAAJ implementation
>  > +                XMLFault xmlFault = MethodMarshallerUtils.createXMLFaultFromSystemException(e);
>  > +                javax.xml.soap.MessageFactory mf = SAAJFactory.createMessageFactory(protocolNS);
>  > +                SOAPMessage message = mf.createMessage();
>  > +                SOAPBody body = message.getSOAPBody();
>  > +                SOAPFault soapFault = XMLFaultUtils.createSAAJFault(xmlFault, body);
>  > +
>  > +                // TODO something is wrong here.  The message should be a response message, not
>  > +                // a request message.  I don't see how to change that.  (see the debugger...)
>  > +                // TODO probably also need to turn on message.WRITE_XML_DECLARATION
>  > +                ((SoapMessageContext)mc).setMessage(message);
>  > +
>  > +               } else {
>  > +                       // TODO throw an exception, because we only support SOAP11 and SOAP12, I think.
>  > +               }
>  > +
>  > +        } catch (SOAPException soapex) {
>  > +            // TODO not too sure what to do here.
>  > +        }
>  > +
>  >         }
>  >
>  >
>  >
>  > Added: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerInvokerUtils.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerInvokerUtils.java?view=auto&rev=522411
>  > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerInvokerUtils.java (added)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/HandlerInvokerUtils.java Sun Mar 25 21:25:20 2007
>  > @@ -0,0 +1,194 @@
>  > +package org.apache.axis2.jaxws.handler;
>  > +
>  > +import java.util.ArrayList;
>  > +import java.util.List;
>  > +
>  > +import javax.xml.stream.XMLStreamException;
>  > +import javax.xml.ws.WebServiceContext;
>  > +import javax.xml.ws.handler.Handler;
>  > +import javax.xml.ws.handler.soap.SOAPMessageContext;
>  > +
>  > +import org.apache.axis2.context.ServiceContext;
>  > +import org.apache.axis2.jaxws.ExceptionFactory;
>  > +import org.apache.axis2.jaxws.context.factory.MessageContextFactory;
>  > +import org.apache.axis2.jaxws.context.utils.ContextUtils;
>  > +import org.apache.axis2.jaxws.core.MessageContext;
>  > +import org.apache.axis2.jaxws.description.EndpointDescription;
>  > +import org.apache.axis2.jaxws.message.Message;
>  > +import org.apache.axis2.jaxws.message.factory.MessageFactory;
>  > +import org.apache.axis2.jaxws.registry.FactoryRegistry;
>  > +import org.apache.axis2.jaxws.server.endpoint.lifecycle.impl.EndpointLifecycleManagerImpl;
>  > +
>  > +public class HandlerInvokerUtils {
>  > +
>  > +    /**
>  > +     * Invoke Inbound Handlers
>  > +     * @param requestMsgCtx
>  > +     */
>  > +    public static boolean invokeInboundHandlers(MessageContext msgCtx,
>  > +            EndpointDescription endpointDesc, HandlerChainProcessor.MEP mep, boolean isOneWay) {
>  > +        List<String> handlers = endpointDesc.getHandlerList();
>  > +
>  > +        // TODO MIKE TEST -- REMOVE - for testing until we get a list of objects from EndpointDescription.getHandlerList();
>  > +        /*
>  > +        if (endpointDesc.getServiceQName().getLocalPart().contains("AddNumber"))
>  > +            handlers.add("org.apache.axis2.jaxws.sample.addnumbers.AddNumbersLogicalHandler");
>  > +        */
>  > +        // TODO END MIKE TEST
>  > +
>  > +        int numHandlers = handlers.size();
>  > +        javax.xml.ws.handler.MessageContext handlerMessageContext = null;
>  > +
>  > +        if (numHandlers > 0) {
>  > +            handlerMessageContext = findOrCreateMessageContext(msgCtx);
>  > +        } else {
>  > +            return true;
>  > +        }
>  > +
>  > +        // TODO remove this.  Handlers will have already been instantiated when
>  > +        // we start using the handlerresolver to get our list.
>  > +        ArrayList<Handler> handlerInstances = createHandlerInstances(endpointDesc);
>  > +
>  > +        HandlerChainProcessor processor = new HandlerChainProcessor(
>  > +                handlerInstances);
>  > +
>  > +        // if not one-way, expect a response
>  > +        if (msgCtx.getMessage().isFault()) {
>  > +                processor.processFault(handlerMessageContext,
>  > +                    HandlerChainProcessor.Direction.IN);
>  > +        } else {
>  > +                handlerMessageContext = processor.processChain(handlerMessageContext,
>  > +                                HandlerChainProcessor.Direction.IN,
>  > +                                mep,
>  > +                                !isOneWay);
>  > +        }
>  > +
>  > +        if (handlerMessageContext.get(javax.xml.ws.handler.MessageContext.MESSAGE_OUTBOUND_PROPERTY).equals(true)
>  > +                        && mep.equals(HandlerChainProcessor.MEP.REQUEST)) {
>  > +            // uh-oh.  We've changed directions on the server inbound handler processing,
>  > +            // This means we're now on an outbound flow, and the endpoint will not
>  > +            // be called.  Be sure to mark the context and message as such.
>  > +            try {
>  > +                Message msg = ((MessageFactory)FactoryRegistry.getFactory(MessageFactory.class)).createFrom(((SOAPMessageContext)handlerMessageContext).getMessage());
>  > +                msgCtx.setMessage(msg);
>  > +                return false;
>  > +            } catch (XMLStreamException e) {
>  > +                // TODO log it
>  > +                throw ExceptionFactory.makeWebServiceException(e);
>  > +            }
>  > +        }
>  > +
>  > +        return true;
>  > +    }
>  > +
>  > +    /**
>  > +     * Invoke OutboundHandlers
>  > +     *
>  > +     * @param msgCtx
>  > +     */
>  > +    public static boolean invokeOutboundHandlers(MessageContext msgCtx,
>  > +            EndpointDescription endpointDesc, HandlerChainProcessor.MEP mep, boolean isOneWay) {
>  > +        List<String> handlers = endpointDesc.getHandlerList();
>  > +
>  > +        // TODO you may need to hard-code add some handlers until we
>  > +        // actually have useful code under EndpointDescription.getHandlerList()
>  > +        int numHandlers = handlers.size();
>  > +
>  > +        javax.xml.ws.handler.MessageContext handlerMessageContext = null;
>  > +        if (numHandlers > 0) {
>  > +            handlerMessageContext = findOrCreateMessageContext(msgCtx);
>  > +        } else {
>  > +            return true;
>  > +        }
>  > +
>  > +        // TODO probably don't want to make the newInstances here -- use
>  > +        // RuntimeDescription instead?
>  > +        // make instances of all the handlers
>  > +        ArrayList<Handler> handlerInstances = createHandlerInstances(endpointDesc);
>  > +
>  > +        HandlerChainProcessor processor = new HandlerChainProcessor(
>  > +                handlerInstances);
>  > +
>  > +        // if not one-way, expect a response
>  > +        if (msgCtx.getMessage().isFault()) {
>  > +                processor.processFault(handlerMessageContext,
>  > +                    HandlerChainProcessor.Direction.OUT);
>  > +        } else {
>  > +                handlerMessageContext = processor.processChain(handlerMessageContext,
>  > +                                HandlerChainProcessor.Direction.OUT,
>  > +                                mep, !isOneWay);
>  > +        }
>  > +
>  > +        if (handlerMessageContext.get(javax.xml.ws.handler.MessageContext.MESSAGE_OUTBOUND_PROPERTY).equals(false)
>  > +                        && mep.equals(HandlerChainProcessor.MEP.REQUEST)) {
>  > +                // uh-oh.  We've changed directions on the client outbound handler processing,
>  > +                // This means we're now on an inbound flow, and the service will not
>  > +                // be called.  Be sure to mark the context and message as such.
>  > +                try {
>  > +                        Message msg = ((MessageFactory)FactoryRegistry.getFactory(MessageFactory.class)).createFrom(((SOAPMessageContext)handlerMessageContext).getMessage());
>  > +                        msgCtx.setMessage(msg);
>  > +                        return false;
>  > +                } catch (XMLStreamException e) {
>  > +                        // TODO log it
>  > +                        throw ExceptionFactory.makeWebServiceException(e);
>  > +                }
>  > +        }
>  > +
>  > +        return true;
>  > +    }
>  > +
>  > +    /**
>  > +     * Find or Create Handler Message Context
>  > +     * @param mc
>  > +     * @return javax.xml.ws.handler.MessageContext
>  > +     */
>  > +    private static javax.xml.ws.handler.MessageContext findOrCreateMessageContext(MessageContext mc) {
>  > +        // See if a soap message context is already present on the WebServiceContext
>  > +        javax.xml.ws.handler.MessageContext handlerMessageContext = null;
>  > +        ServiceContext serviceContext = mc.getAxisMessageContext().getServiceContext();
>  > +        WebServiceContext ws = (WebServiceContext)serviceContext.getProperty(EndpointLifecycleManagerImpl.WEBSERVICE_MESSAGE_CONTEXT);
>  > +
>  > +        if (ws != null) {
>  > +            handlerMessageContext = ws.getMessageContext();
>  > +        }
>  > +
>  > +        if (handlerMessageContext == null) {
>  > +            handlerMessageContext = createSOAPMessageContext(mc);
>  > +        }
>  > +
>  > +        return handlerMessageContext;
>  > +    }
>  > +
>  > +    /**
>  > +     * @param mc
>  > +     * @return new SOAPMessageContext
>  > +     */
>  > +    private static javax.xml.ws.handler.MessageContext createSOAPMessageContext(MessageContext mc){
>  > +        SoapMessageContext soapMessageContext = (SoapMessageContext)MessageContextFactory.createSoapMessageContext(mc);
>  > +        ContextUtils.addProperties(soapMessageContext, mc);
>  > +        return soapMessageContext;
>  > +     }
>  > +
>  > +    // TODO method is for TEST only.  instances will be created elsewhere
>  > +    private static ArrayList<Handler> createHandlerInstances(EndpointDescription ed) {
>  > +        // TODO remove this.  Handlers will have already been instantiated when
>  > +        // we start using the handlerresolver to get our list.
>  > +
>  > +        List<String> handlers = ed.getHandlerList();
>  > +        int numHandlers = handlers.size();
>  > +
>  > +        ArrayList<Handler> handlerInstances = new ArrayList<Handler>();
>  > +        try {
>  > +                for (int i = 0; i < numHandlers; i++) {
>  > +                        handlerInstances.add((Handler) Class.forName(handlers.get(i)).newInstance());
>  > +                }
>  > +        } catch (Exception e) {
>  > +                e.printStackTrace();
>  > +        }
>  > +
>  > +        return handlerInstances;
>  > +    }
>  > +
>  > +}
>  > +
>  > +
>  >
>  > 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=522411&r1=522410&r2=522411
>  > ==============================================================================
>  > --- 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 Sun Mar 25 21:25:20 2007
>  > @@ -1,3 +1,21 @@
>  > +/*
>  > + * 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.axis2.jaxws.handler;
>  >
>  >  import java.security.PrivilegedActionException;
>  >
>  > Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/LogicalMessageContext.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/LogicalMessageContext.java?view=diff&rev=522411&r1=522410&r2=522411
>  > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/LogicalMessageContext.java (original)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/LogicalMessageContext.java Sun Mar 25 21:25:20 2007
>  > @@ -1,18 +1,20 @@
>  >  /*
>  > - * Copyright 2006 The Apache Software Foundation.
>  > - * Copyright 2006 International Business Machines Corp.
>  > - *
>  > - * 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
>  > - *
>  > + * 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.
>  > + *
>  > + * 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.axis2.jaxws.handler;
>  >
>  > @@ -36,7 +38,7 @@
>  >                 super(mc);
>  >         }
>  >
>  > -       public LogicalMessage getMessage() {
>  > +       public LogicalMessage getSource() {
>  >          return null;
>  >      }
>  >  }
>  >
>  > Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/ProtectedMessageContext.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/ProtectedMessageContext.java?view=diff&rev=522411&r1=522410&r2=522411
>  > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/ProtectedMessageContext.java (original)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/ProtectedMessageContext.java Sun Mar 25 21:25:20 2007
>  > @@ -1,18 +1,20 @@
>  >  /*
>  > - * Copyright 2006 The Apache Software Foundation.
>  > - * Copyright 2006 International Business Machines Corp.
>  > - *
>  > - * 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
>  > - *
>  > + * 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.
>  > + *
>  > + * 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.axis2.jaxws.handler;
>  >
>  > @@ -33,7 +35,7 @@
>  >   */
>  >  public class ProtectedMessageContext implements javax.xml.ws.handler.MessageContext {
>  >
>  > -    private MessageContext msgContext;
>  > +    protected MessageContext msgContext;
>  >      private Map<String, Scope> scope = new Hashtable<String, Scope>();
>  >      public ProtectedMessageContext() {
>  >          //do nothing
>  >
>  > Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/SoapMessageContext.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/SoapMessageContext.java?view=diff&rev=522411&r1=522410&r2=522411
> > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/SoapMessageContext.java (original)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/handler/SoapMessageContext.java Sun Mar 25 21:25:20 2007
>  > @@ -1,18 +1,20 @@
>  >  /*
>  > - * Copyright 2006 The Apache Software Foundation.
>  > - * Copyright 2006 International Business Machines Corp.
>  > - *
>  > - * 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
>  > - *
>  > + * 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.
>  > + *
>  > + * 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.axis2.jaxws.handler;
>  >
>  > @@ -22,11 +24,15 @@
>  >  import javax.xml.bind.JAXBContext;
>  >  import javax.xml.namespace.QName;
>  >  import javax.xml.soap.SOAPMessage;
>  > +import javax.xml.stream.XMLStreamException;
>  >  import javax.xml.ws.WebServiceException;
>  > +import javax.xml.ws.handler.soap.SOAPMessageContext;
>  >
>  >  import org.apache.axis2.jaxws.ExceptionFactory;
>  >  import org.apache.axis2.jaxws.core.MessageContext;
>  >  import org.apache.axis2.jaxws.message.Message;
>  > +import org.apache.axis2.jaxws.message.factory.MessageFactory;
>  > +import org.apache.axis2.jaxws.registry.FactoryRegistry;
>  >
>  >  /**
>  >   * The SOAPMessageContext is the context handed to SOAP-based application
>  > @@ -60,5 +66,12 @@
>  >      }
>  >
>  >      public void setMessage(SOAPMessage soapmessage) {
>  > +       // TODO I don't like this at all.
>  > +       try {
>  > +               Message msg = ((MessageFactory)FactoryRegistry.getFactory(MessageFactory.class)).createFrom(soapmessage);
>  > +               msgContext.setMessage(msg);
>  > +       } catch (XMLStreamException e) {
>  > +               // TODO log it, and throw something?
>  > +       }
>  >      }
>  >  }
>  >
>  > 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=522411&r1=522410&r2=522411
>  > ==============================================================================
>  > --- 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 Sun Mar 25 21:25:20 2007
>  > @@ -31,6 +31,7 @@
>  >  import org.apache.axiom.soap.SOAPEnvelope;
>  >  import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
>  >  import org.apache.axis2.context.ServiceContext;
>  > +import org.apache.axis2.description.AxisOperation;
>  >  import org.apache.axis2.description.AxisService;
>  >  import org.apache.axis2.description.Parameter;
>  >  import org.apache.axis2.java.security.AccessController;
>  > @@ -44,6 +45,8 @@
>  >  import org.apache.axis2.jaxws.description.DescriptionFactory;
>  >  import org.apache.axis2.jaxws.description.EndpointDescription;
>  >  import org.apache.axis2.jaxws.description.ServiceDescription;
>  > +import org.apache.axis2.jaxws.handler.HandlerChainProcessor;
>  > +import org.apache.axis2.jaxws.handler.HandlerInvokerUtils;
>  >  import org.apache.axis2.jaxws.handler.SoapMessageContext;
>  >  import org.apache.axis2.jaxws.i18n.Messages;
>  >  import org.apache.axis2.jaxws.message.Message;
>  > @@ -57,13 +60,12 @@
>  >  import org.apache.axis2.jaxws.server.dispatcher.factory.EndpointDispatcherFactory;
>  >  import org.apache.axis2.jaxws.server.endpoint.lifecycle.EndpointLifecycleManager;
>  >  import org.apache.axis2.jaxws.server.endpoint.lifecycle.factory.EndpointLifecycleManagerFactory;
>  > -import org.apache.axis2.jaxws.server.endpoint.lifecycle.impl.EndpointLifecycleManagerImpl;
>  >  import org.apache.axis2.jaxws.spi.Constants;
>  > +import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004_Constants;
>  > +import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2006Constants;
>  >  import org.apache.commons.logging.Log;
>  >  import org.apache.commons.logging.LogFactory;
>  >
>  > -
>  > -
>  >  /**
>  >   * The EndpointController is the server side equivalent to the
>  >   * InvocationController on the client side.  It is an abstraction of the server
>  > @@ -78,8 +80,12 @@
>  >  public class EndpointController {
>  >
>  >      private static final Log log = LogFactory.getLog(EndpointController.class);
>  > -       private static final String PARAM_SERVICE_CLASS = "ServiceClass";
>  > -    public EndpointController() {}
>  > +
>  > +    private static final String PARAM_SERVICE_CLASS = "ServiceClass";
>  > +
>  > +    public EndpointController() {
>  > +        //do nothing
>  > +    }
>  >
>  >      /**
>  >       * This method is used to start the JAX-WS invocation of a target endpoint.
>  > @@ -137,20 +143,29 @@
>  >              // the request message if appropriate.
>  >              saveRequestMessage(requestMsgCtx);
>  >
>  > -            // Invoke inbound application handlers.
>  > -            invokeInboundHandlers(requestMsgCtx);
>  > -
>  > -            // Dispatch to the
>  > -            EndpointDispatcher dispatcher = getEndpointDispatcher(implClass, serviceInstance);
>  > -            try {
>  > -                responseMsgContext = dispatcher.invoke(requestMsgCtx);
>  > -            } finally {
>  > -                // Passed pivot point
>  > -                requestMsgCtx.getMessage().setPostPivot();
>  > -            }
>  > +            // Invoke inbound application handlers.  It's safe to use the first object on the iterator because there is
>  > +            // always exactly one EndpointDescription on a server invoke
>  > +            boolean success = HandlerInvokerUtils.invokeInboundHandlers(requestMsgCtx, serviceDesc.getEndpointDescriptions_AsCollection().iterator().next(), HandlerChainProcessor.MEP.REQUEST, isOneWay(requestMsgCtx.getAxisMessageContext()));
>  > +
>  > +            if (success) {
>  >
>  > -            // Invoke outbound application handlers
>  > -            invokeOutboundHandlers(requestMsgCtx);
>  > +               // Dispatch to the
>  > +               EndpointDispatcher dispatcher = getEndpointDispatcher(implClass, serviceInstance);
>  > +               try {
>  > +                       responseMsgContext = dispatcher.invoke(requestMsgCtx);
>  > +               } finally {
>  > +                       // Passed pivot point
>  > +                       requestMsgCtx.getMessage().setPostPivot();
>  > +               }
>  > +
>  > +               // Invoke outbound application handlers.  It's safe to use the first object on the iterator because there is
>  > +               // always exactly one EndpointDescription on a server invoke
>  > +               HandlerInvokerUtils.invokeOutboundHandlers(responseMsgContext, serviceDesc.getEndpointDescriptions_AsCollection().iterator().next(), HandlerChainProcessor.MEP.RESPONSE, false);
>  > +            } else { // the inbound handler chain must have had a problem, and we've reversed directions
>  > +               responseMsgContext = MessageContextUtils.createResponseMessageContext(requestMsgCtx);
>  > +               // since we've reversed directions, the message has "become a response message" (section 9.3.2.1, footnote superscript 2)
>  > +               responseMsgContext.setMessage(requestMsgCtx.getMessage());
>  > +            }
>  >
>  >          } catch (Exception e) {
>  >              // TODO for now, throw it.  We probably should try to make an XMLFault object and set it on the message
>  > @@ -165,68 +180,6 @@
>  >          return ic;
>  >      }
>  >
>  > -    /**
>  > -     * Invoke Inbound Handlers
>  > -     * @param requestMsgCtx
>  > -     */
>  > -    private void invokeInboundHandlers(MessageContext requestMsgCtx) {
>  > -        // Stubbed out code
>  > -        int numHandlers = 0;
>  > -
>  > -        javax.xml.ws.handler.MessageContext handlerMessageContext = null;
>  > -        if (numHandlers > 0) {
>  > -            handlerMessageContext =findOrCreateMessageContext(requestMsgCtx);
>  > -        }
>  > -
>  > -        // TODO Invoke Handlers
>  > -    }
>  > -
>  > -
>  > -
>  > -    /**
>  > -     * Invoke OutboundHandlers
>  > -     * @param responseMsgCtx
>  > -     */
>  > -    private void invokeOutboundHandlers(MessageContext responseMsgCtx) {
>  > -        // Stubbed out code
>  > -        int numHandlers = 0;
>  > -
>  > -        javax.xml.ws.handler.MessageContext handlerMessageContext = null;
>  > -        if (numHandlers > 0) {
>  > -            handlerMessageContext =findOrCreateMessageContext(responseMsgCtx);
>  > -        }
>  > -
>  > -        // TODO Invoke Handlers
>  > -    }
>  > -
>  > -    /**
>  > -     * Find or Create Handler Message Context
>  > -     * @param mc
>  > -     * @return javax.xml.ws.handler.MessageContext
>  > -     */
>  > -    private javax.xml.ws.handler.MessageContext findOrCreateMessageContext(MessageContext mc) {
>  > -        // See if a soap message context is already present on the WebServiceContext
>  > -        javax.xml.ws.handler.MessageContext handlerMessageContext = null;
>  > -        ServiceContext serviceContext = mc.getAxisMessageContext().getServiceContext();
>  > -        WebServiceContext ws = (WebServiceContext)serviceContext.getProperty(EndpointLifecycleManagerImpl.WEBSERVICE_MESSAGE_CONTEXT);
>  > -        if (ws != null) {
>  > -            handlerMessageContext = ws.getMessageContext();
>  > -        }
>  > -        if (handlerMessageContext == null) {
>  > -            handlerMessageContext = createSOAPMessageContext(mc);
>  > -        }
>  > -        return handlerMessageContext;
>  > -    }
>  > -
>  > -    /**
>  > -     * @param mc
>  > -     * @return new SOAPMessageContext
>  > -     */
>  > -    private javax.xml.ws.handler.MessageContext createSOAPMessageContext(MessageContext mc){
>  > -        SoapMessageContext soapMessageContext = (SoapMessageContext)MessageContextFactory.createSoapMessageContext(mc);
>  > -        ContextUtils.addProperties(soapMessageContext, mc);
>  > -        return soapMessageContext;
>  > -     }
>  >      /*
>  >          * Get the appropriate EndpointDispatcher for a given service endpoint.
>  >          */
>  > @@ -316,8 +269,8 @@
>  >              return sd;
>  >          }
>  >          else {
>  > -            ServiceDescription sd = DescriptionFactory.
>  > -                createServiceDescriptionFromServiceImpl(implClass, axisSvc);
>  > +            ServiceDescription sd = DescriptionFactory.createServiceDescriptionFromServiceImpl(implClass, axisSvc);
>  > +                //createServiceDescriptionFromServiceImpl(implClass, axisSvc);
>  >              return sd;
>  >          }
>  >      }
>  > @@ -371,7 +324,7 @@
>  >     */
>  >     private void saveRequestMessage(MessageContext requestMsgContext) {
>  >
>  > -       // TESTING...FORCE SAVING THE REQUEST MESSAGE
>  > +       // TODO: TESTING...FORCE SAVING THE REQUEST MESSAGE
>  >         // requestMsgContext.getAxisMessageContext().setProperty(Constants.SAVE_REQUEST_MSG, Boolean.TRUE);
>  >         // END TESTING
>  >
>  > @@ -415,5 +368,23 @@
>  >         // String text = requestMsgContext.getMessage().getAsOMElement().toString();
>  >         // System.out.println("Persist Message" + text);
>  >         // END TESTING
>  > +   }
>  > +
>  > +   /*
>  > +    * Determine if this is a one-way invocation or not.
>  > +    */
>  > +   public static boolean isOneWay(org.apache.axis2.context.MessageContext mc) {
>  > +       if (mc != null) {
>  > +           AxisOperation op = mc.getAxisOperation();
>  > +           String mep = op.getMessageExchangePattern();
>  > +
>  > +           if (mep.equals(WSDL20_2004_Constants.MEP_URI_ROBUST_IN_ONLY) ||
>  > +               mep.equals(WSDL20_2004_Constants.MEP_URI_IN_ONLY) ||
>  > +               mep.equals(WSDL20_2006Constants.MEP_URI_ROBUST_IN_ONLY) ||
>  > +               mep.equals(WSDL20_2006Constants.MEP_URI_IN_ONLY)) {
>  > +               return true;
>  > +           }
>  > +       }
>  > +       return false;
>  >     }
>  >  }
>  >
>  > Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/dispatcher/ProviderDispatcher.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/dispatcher/ProviderDispatcher.java?view=diff&rev=522411&r1=522410&r2=522411
>  > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/dispatcher/ProviderDispatcher.java (original)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/dispatcher/ProviderDispatcher.java Sun Mar 25 21:25:20 2007
>  > @@ -50,6 +50,7 @@
>  >  import org.apache.axis2.jaxws.message.factory.SourceBlockFactory;
>  >  import org.apache.axis2.jaxws.message.factory.XMLStringBlockFactory;
>  >  import org.apache.axis2.jaxws.registry.FactoryRegistry;
>  > +import org.apache.axis2.jaxws.server.EndpointController;
>  >  import org.apache.axis2.jaxws.utility.ClassUtils;
>  >  import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004_Constants;
>  >  import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2006Constants;
>  > @@ -187,7 +188,7 @@
>  >
>  >          // Create the response MessageContext
>  >          MessageContext responseMsgCtx = null;
>  > -        if (!isOneWay(mc.getAxisMessageContext())) {
>  > +        if (!EndpointController.isOneWay(mc.getAxisMessageContext())) {
>  >              if (faultThrown) {
>  >                  // If a fault was thrown, we need to create a slightly different
>  >                  // MessageContext, than in the response path.
>  > @@ -416,21 +417,4 @@
>  >          return blockFactory;
>  >      }
>  >
>  > -    /*
>  > -     * Determine if this is a one-way invocation or not.
>  > -     */
>  > -    private boolean isOneWay(org.apache.axis2.context.MessageContext mc) {
>  > -        if (mc != null) {
>  > -            AxisOperation op = mc.getAxisOperation();
>  > -            String mep = op.getMessageExchangePattern();
>  > -
>  > -            if (mep.equals(WSDL20_2004_Constants.MEP_URI_ROBUST_IN_ONLY) ||
>  > -                mep.equals(WSDL20_2004_Constants.MEP_URI_IN_ONLY) ||
>  > -                mep.equals(WSDL20_2006Constants.MEP_URI_ROBUST_IN_ONLY) ||
>  > -                mep.equals(WSDL20_2006Constants.MEP_URI_IN_ONLY)) {
>  > -                return true;
>  > -            }
>  > -        }
>  > -        return false;
>  > -    }
>  >  }
>  >
>  > Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/utility/SAAJFactory.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/utility/SAAJFactory.java?view=diff&rev=522411&r1=522410&r2=522411
>  > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/utility/SAAJFactory.java (original)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/utility/SAAJFactory.java Sun Mar 25 21:25:20 2007
>  > @@ -1,144 +1,144 @@
>  > -/*
>  > - * Copyright 2004,2005 The Apache Software Foundation.
>  > - * Copyright 2006 International Business Machines Corp.
>  > - *
>  > - * 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.axis2.jaxws.utility;
>  > -
>  > -import java.lang.reflect.Method;
>  > -
>  > -import javax.xml.soap.MessageFactory;
>  > -import javax.xml.soap.SOAPException;
>  > -import javax.xml.soap.SOAPFactory;
>  > -import javax.xml.ws.WebServiceException;
>  > -
>  > -import org.apache.axis2.jaxws.ExceptionFactory;
>  > -import org.apache.axis2.jaxws.i18n.Messages;
>  > -
>  > -/**
>  > - * Provides convenience methods to construct a SOAP 1.1 or SOAP 1.2 SAAJ MessageFactory or SOAPFactory.
>  > - * The code uses reflection; thus, when Axis2 upgrades to SAAJ 1.3, no changes will be neded to this class.
>  > - *
>  > - */
>  > -public class SAAJFactory {
>  > -
>  > -    private static final String SOAP11_ENV_NS = "http://schemas.xmlsoap.org/soap/envelope/";
>  > -    private static final String SOAP12_ENV_NS = "http://www.w3.org/2003/05/soap-envelope";
>  > -
>  > -    // Protocol Names per the SAAJ 1.3 specification.
>  > -    public static final String SOAP_1_1_PROTOCOL = "SOAP 1.1 Protocol";
>  > -    public static final String SOAP_1_2_PROTOCOL = "SOAP 1.2 Protocol";
>  > -    public static final String DYNAMIC_PROTOCOL  = "Dynamic Protocol";
>  > -
>  > -    /**
>  > -     * Create SOAPFactory using information from the envelope namespace
>  > -     * @param namespace
>  > -     * @return
>  > -     */
>  > -    public static SOAPFactory createSOAPFactory(String namespace) throws WebServiceException, SOAPException {
>  > -        Method m = getSOAPFactoryNewInstanceProtocolMethod();
>  > -        SOAPFactory sf = null;
>  > -        if (m == null) {
>  > -            if (namespace.equals(SOAP11_ENV_NS)) {
>  > -                sf = SOAPFactory.newInstance();
>  > -            } else {
>  > -                throw ExceptionFactory.makeWebServiceException(Messages.getMessage("SOAP12WithSAAJ12Err"));
>  > -            }
>  > -        } else {
>  > -            String protocol = DYNAMIC_PROTOCOL;
>  > -            if (namespace.equals(SOAP11_ENV_NS)) {
>  > -                protocol = SOAP_1_1_PROTOCOL;
>  > -            } else if (namespace.equals(SOAP12_ENV_NS)) {
>  > -                protocol = SOAP_1_2_PROTOCOL;
>  > -            }
>  > -            try {
>  > -                sf = (SOAPFactory) m.invoke(null, new Object[] {protocol});
>  > -            } catch (Exception e) {
>  > -                throw ExceptionFactory.makeWebServiceException(e);
>  > -            }
>  > -        }
>  > -        return sf;
>  > -    }
>  > -
>  > -    /**
>  > -     * Create MessageFactory using information from the envelope namespace
>  > -     * @param namespace
>  > -     * @return
>  > -     */
>  > -    public static MessageFactory createMessageFactory(String namespace) throws WebServiceException, SOAPException {
>  > -        Method m = getMessageFactoryNewInstanceProtocolMethod();
>  > -        MessageFactory mf = null;
>  > -        if (m == null) {
>  > -            if (namespace.equals(SOAP11_ENV_NS)) {
>  > -                mf = MessageFactory.newInstance();
>  > -            } else {
>  > -                throw ExceptionFactory.makeWebServiceException(Messages.getMessage("SOAP12WithSAAJ12Err"));
>  > -            }
>  > -        } else {
>  > -            String protocol = DYNAMIC_PROTOCOL;
>  > -            if (namespace.equals(SOAP11_ENV_NS)) {
>  > -                protocol = SOAP_1_1_PROTOCOL;
>  > -            } else if (namespace.equals(SOAP12_ENV_NS)) {
>  > -                protocol = SOAP_1_2_PROTOCOL;
>  > -            }
>  > -            try {
>  > -                mf = (MessageFactory) m.invoke(null, new Object[] {protocol});
>  > -            } catch (Exception e) {
>  > -                throw ExceptionFactory.makeWebServiceException(e);
>  > -            }
>  > -        }
>  > -        return mf;
>  > -    }
>  > -
>  > -    private static Method messageFactoryNewInstanceProtocolMethod = null;
>  > -
>  > -    /**
>  > -     * SAAJ 1.3 has a newInstance method that has a protocol parameter.
>  > -     * @return newInstance(String) method if available
>  > -     */
>  > -    private static Method getMessageFactoryNewInstanceProtocolMethod() {
>  > -        if (messageFactoryNewInstanceProtocolMethod == null) {
>  > -            try {
>  > -                messageFactoryNewInstanceProtocolMethod = MessageFactory.class.getMethod("newInstance", new Class[] {String.class});
>  > -            } catch (Exception e) {
>  > -                // TODO Might want to log this.
>  > -                // Flow to here indicates that the installed SAAJ model does not support version 1.3
>  > -                messageFactoryNewInstanceProtocolMethod = null;
>  > -            }
>  > -        }
>  > -        return messageFactoryNewInstanceProtocolMethod;
>  > -    }
>  > -
>  > -    private static Method soapFactoryNewInstanceProtocolMethod = null;
>  > -
>  > -    /**
>  > -     * SAAJ 1.3 has a newInstance method that has a protocol parameter.
>  > -     * @return newInstance(String) method if available
>  > -     */
>  > -    private static Method getSOAPFactoryNewInstanceProtocolMethod() {
>  > -        if (soapFactoryNewInstanceProtocolMethod == null) {
>  > -            try {
>  > -                soapFactoryNewInstanceProtocolMethod = SOAPFactory.class.getMethod("newInstance", new Class[] {String.class});
>  > -            } catch (Exception e) {
>  > -                // TODO Might want to log this.
>  > -                // Flow to here indicates that the installed SAAJ model does not support version 1.3
>  > -                soapFactoryNewInstanceProtocolMethod = null;
>  > -            }
>  > -        }
>  > -        return soapFactoryNewInstanceProtocolMethod;
>  > -    }
>  > -
>  > -
>  > -}
>  > +/*
>  > + * Copyright 2004,2005 The Apache Software Foundation.
>  > + * Copyright 2006 International Business Machines Corp.
>  > + *
>  > + * 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.axis2.jaxws.utility;
>  > +
>  > +import java.lang.reflect.Method;
>  > +
>  > +import javax.xml.soap.MessageFactory;
>  > +import javax.xml.soap.SOAPException;
>  > +import javax.xml.soap.SOAPFactory;
>  > +import javax.xml.ws.WebServiceException;
>  > +
>  > +import org.apache.axis2.jaxws.ExceptionFactory;
>  > +import org.apache.axis2.jaxws.i18n.Messages;
>  > +
>  > +/**
>  > + * Provides convenience methods to construct a SOAP 1.1 or SOAP 1.2 SAAJ MessageFactory or SOAPFactory.
>  > + * The code uses reflection; thus, when Axis2 upgrades to SAAJ 1.3, no changes will be neded to this class.
>  > + *
>  > + */
>  > +public class SAAJFactory {
>  > +
>  > +    private static final String SOAP11_ENV_NS = "http://schemas.xmlsoap.org/soap/envelope/";
>  > +    private static final String SOAP12_ENV_NS = "http://www.w3.org/2003/05/soap-envelope";
>  > +
>  > +    // Protocol Names per the SAAJ 1.3 specification.
>  > +    public static final String SOAP_1_1_PROTOCOL = "SOAP 1.1 Protocol";
>  > +    public static final String SOAP_1_2_PROTOCOL = "SOAP 1.2 Protocol";
>  > +    public static final String DYNAMIC_PROTOCOL  = "Dynamic Protocol";
>  > +
>  > +    /**
>  > +     * Create SOAPFactory using information from the envelope namespace
>  > +     * @param namespace
>  > +     * @return
>  > +     */
>  > +    public static SOAPFactory createSOAPFactory(String namespace) throws WebServiceException, SOAPException {
>  > +        Method m = getSOAPFactoryNewInstanceProtocolMethod();
>  > +        SOAPFactory sf = null;
>  > +        if (m == null) {
>  > +            if (namespace.equals(SOAP11_ENV_NS)) {
>  > +                sf = SOAPFactory.newInstance();
>  > +            } else {
>  > +                throw ExceptionFactory.makeWebServiceException(Messages.getMessage("SOAP12WithSAAJ12Err"));
>  > +            }
>  > +        } else {
>  > +            String protocol = DYNAMIC_PROTOCOL;
>  > +            if (namespace.equals(SOAP11_ENV_NS)) {
>  > +                protocol = SOAP_1_1_PROTOCOL;
>  > +            } else if (namespace.equals(SOAP12_ENV_NS)) {
>  > +                protocol = SOAP_1_2_PROTOCOL;
>  > +            }
>  > +            try {
>  > +                sf = (SOAPFactory) m.invoke(null, new Object[] {protocol});
>  > +            } catch (Exception e) {
>  > +                throw ExceptionFactory.makeWebServiceException(e);
>  > +            }
>  > +        }
>  > +        return sf;
>  > +    }
>  > +
>  > +    /**
>  > +     * Create MessageFactory using information from the envelope namespace
>  > +     * @param namespace
>  > +     * @return
>  > +     */
>  > +    public static MessageFactory createMessageFactory(String namespace) throws WebServiceException, SOAPException {
>  > +        Method m = getMessageFactoryNewInstanceProtocolMethod();
>  > +        MessageFactory mf = null;
>  > +        if (m == null) {
>  > +            if (namespace.equals(SOAP11_ENV_NS)) {
>  > +                mf = MessageFactory.newInstance();
>  > +            } else {
>  > +                throw ExceptionFactory.makeWebServiceException(Messages.getMessage("SOAP12WithSAAJ12Err"));
>  > +            }
>  > +        } else {
>  > +            String protocol = DYNAMIC_PROTOCOL;
>  > +            if (namespace.equals(SOAP11_ENV_NS)) {
>  > +                protocol = SOAP_1_1_PROTOCOL;
>  > +            } else if (namespace.equals(SOAP12_ENV_NS)) {
>  > +                protocol = SOAP_1_2_PROTOCOL;
>  > +            }
>  > +            try {
>  > +                mf = (MessageFactory) m.invoke(null, new Object[] {protocol});
>  > +            } catch (Exception e) {
>  > +                throw ExceptionFactory.makeWebServiceException(e);
>  > +            }
>  > +        }
>  > +        return mf;
>  > +    }
>  > +
>  > +    private static Method messageFactoryNewInstanceProtocolMethod = null;
>  > +
>  > +    /**
>  > +     * SAAJ 1.3 has a newInstance method that has a protocol parameter.
>  > +     * @return newInstance(String) method if available
>  > +     */
>  > +    private static Method getMessageFactoryNewInstanceProtocolMethod() {
>  > +        if (messageFactoryNewInstanceProtocolMethod == null) {
>  > +            try {
>  > +                messageFactoryNewInstanceProtocolMethod = MessageFactory.class.getMethod("newInstance", new Class[] {String.class});
>  > +            } catch (Exception e) {
>  > +                // TODO Might want to log this.
>  > +                // Flow to here indicates that the installed SAAJ model does not support version 1.3
>  > +                messageFactoryNewInstanceProtocolMethod = null;
>  > +            }
>  > +        }
>  > +        return messageFactoryNewInstanceProtocolMethod;
>  > +    }
>  > +
>  > +    private static Method soapFactoryNewInstanceProtocolMethod = null;
>  > +
>  > +    /**
>  > +     * SAAJ 1.3 has a newInstance method that has a protocol parameter.
>  > +     * @return newInstance(String) method if available
> > +     */
>  > +    private static Method getSOAPFactoryNewInstanceProtocolMethod() {
>  > +        if (soapFactoryNewInstanceProtocolMethod == null) {
>  > +            try {
>  > +                soapFactoryNewInstanceProtocolMethod = SOAPFactory.class.getMethod("newInstance", new Class[] {String.class});
>  > +            } catch (Exception e) {
>  > +                // TODO Might want to log this.
>  > +                // Flow to here indicates that the installed SAAJ model does not support version 1.3
>  > +                soapFactoryNewInstanceProtocolMethod = null;
>  > +            }
>  > +        }
>  > +        return soapFactoryNewInstanceProtocolMethod;
>  > +    }
>  > +
>  > +
>  > +}
>  >
>  > Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java?view=diff&rev=522411&r1=522410&r2=522411
>  > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java (original)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSTest.java Sun Mar 25 21:25:20 2007
>  > @@ -145,17 +145,19 @@
>  >
>  >          suite.addTestSuite(AddressBookTests.class);
>  >          suite.addTestSuite(MtomSampleTests.class);
>  > +
>  >          // TODO: This test fails only on Solaris
>  > -//        suite.addTestSuite(MtomSampleByteArrayTests.class);
>  > +        //suite.addTestSuite(MtomSampleByteArrayTests.class);
>  >          suite.addTestSuite(BareTests.class);
>  >          suite.addTestSuite(NonWrapTests.class);
>  >          suite.addTestSuite(WSGenTests.class);
>  >          suite.addTestSuite(WrapTests.class);
>  >          suite.addTestSuite(DLWMinTests.class);
>  >          suite.addTestSuite(NonAnonymousComplexTypeTests.class);
>  > -        suite.addTestSuite(AddNumbersTests.class);
>  > +        //suite.addTestSuite(AddNumbersTests.class);
>  > +
>  >          // TODO: This test intermittently fails on Linux and with trace enabled.
>  > -//        suite.addTestSuite(ParallelAsyncTests.class);
>  > +        //suite.addTestSuite(ParallelAsyncTests.class);
>  >          suite.addTestSuite(FaultyWebServiceTests.class);
>  >          suite.addTestSuite(FaultsServiceTests.class);
>  >
>  >
>  > Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersTests.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersTests.java?view=diff&rev=522411&r1=522410&r2=522411
>  > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersTests.java (original)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/AddNumbersTests.java Sun Mar 25 21:25:20 2007
>  > @@ -19,6 +19,7 @@
>  >  package org.apache.axis2.jaxws.sample;
>  >
>  >  import javax.xml.ws.BindingProvider;
>  > +import javax.xml.ws.soap.SOAPFaultException;
>  >
>  >  import junit.framework.TestCase;
>  >  import org.apache.axis2.jaxws.sample.addnumbers.AddNumbersPortType;
>  > @@ -41,13 +42,40 @@
>  >                      axisEndpoint);
>  >                         int total = proxy.addNumbers(10,10);
>  >
>  > -                       System.out.println("Total =" +total);
>  > +            assertEquals("With handler manipulation, total should be 2 less than a proper sumation.", 18, total);
>  > +                       System.out.println("Total (after handler manipulation) = " +total);
>  >                         System.out.println("----------------------------------");
>  >                 } catch(Exception e) {
>  >                         e.printStackTrace();
>  >                         fail();
>  >                 }
>  >         }
>  > +
>  > +    public void testAddNumbersWithFault() {
>  > +        try{
>  > +            System.out.println("----------------------------------");
>  > +            System.out.println("test: " + getName());
>  > +
>  > +            AddNumbersService service = new AddNumbersService();
>  > +            AddNumbersPortType proxy = service.getAddNumbersPort();
>  > +
>  > +            BindingProvider p = (BindingProvider)proxy;
>  > +            p.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
>  > +                    axisEndpoint);
>  > +            // value 99 triggers the handler to throw an exception, but does
>  > +            // NOT trigger the AddNumbersHandler.handlefault method.
>  > +            // The spec does not call the handlefault method of a handler that
>  > +            // causes a flow reversal
>  > +            int total = proxy.addNumbers(99,10);
>  > +
>  > +            fail("We should have got an exception due to the handler.");
>  > +        } catch(Exception e) {
>  > +            e.printStackTrace();
>  > +            assertTrue("Exception should be SOAPFaultException", e instanceof SOAPFaultException);
>  > +            assertEquals(((SOAPFaultException)e).getMessage(), "I don't like the value 99");
>  > +        }
>  > +        System.out.println("----------------------------------");
>  > +    }
>  >
>  >      public void testOneWay() {
>  >          try {
>  >
>  > Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/addnumbers/AddNumbersFault_Exception.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/addnumbers/AddNumbersFault_Exception.java?view=diff&rev=522411&r1=522410&r2=522411
>  > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/addnumbers/AddNumbersFault_Exception.java (original)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/addnumbers/AddNumbersFault_Exception.java Sun Mar 25 21:25:20 2007
>  > @@ -1,4 +1,21 @@
>  > -
>  > +/*
>  > + * 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.axis2.jaxws.sample.addnumbers;
>  >
>  >  import javax.xml.ws.WebFault;
>  >
>  > Added: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/addnumbers/AddNumbersLogicalHandler.java
>  > URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/addnumbers/AddNumbersLogicalHandler.java?view=auto&rev=522411
>  > ==============================================================================
>  > --- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/addnumbers/AddNumbersLogicalHandler.java (added)
>  > +++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/sample/addnumbers/AddNumbersLogicalHandler.java Sun Mar 25 21:25:20 2007
>  > @@ -0,0 +1,76 @@
>  > +/*
>  > + * 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.axis2.jaxws.sample.addnumbers;
>  > +
>  > +import javax.xml.soap.SOAPMessage;
>  > +import javax.xml.soap.SOAPPart;
>  > +import javax.xml.ws.ProtocolException;
>  > +import javax.xml.ws.handler.MessageContext;
>  > +
>  > +import org.apache.axis2.jaxws.handler.SoapMessageContext;
>  > +
>  > +public class AddNumbersLogicalHandler implements javax.xml.ws.handler.LogicalHandler {
>  > +
>  > +    public void close(MessageContext messagecontext) {
>  > +
>  > +    }
>  > +
>  > +    public boolean handleFault(MessageContext messagecontext) {
>  > +        Boolean outbound = (Boolean)messagecontext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
>  > +        if (outbound) {  // outbound response if we're on the server
>  > +            SOAPMessage msg = ((SoapMessageContext)messagecontext).getMessage();
>  > +            SOAPPart part = msg.getSOAPPart();
>  > +            part.getFirstChild().getFirstChild().getFirstChild().setTextContent("a handler was here");
>  > +        }
>  > +        return true;
>  > +    }
>  > +
>  > +    /*
>  > +     * this test handleMessage method is obviously not what a customer might write, but it does
>  > +     * the trick for kicking the tires in the handler framework.  The AddNumbers service takes two
>  > +     * ints as incoming params, adds them, and returns the sum.  This method subtracts 1 from the
>  > +     * first int on the inbound request, and subtracts 1 from the int on the outbound response.
>  > +     * So the client app should expect a sum 2 less than a sum without this handler manipulating
>  > +     * the SOAP message.
>  > +     */
>  > +    public boolean handleMessage(MessageContext messagecontext) {
>  > +        Boolean outbound = (Boolean)messagecontext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
>  > +        if (!outbound) {  // inbound request if we're on the server
>  > +            SOAPMessage msg = ((SoapMessageContext)messagecontext).getMessage();
>  > +            SOAPPart part = msg.getSOAPPart();
>  > +            // hack-ish change, but it's for testing, so who cares.
>  > +            String txt = part.getFirstChild().getFirstChild().getFirstChild().getFirstChild().getTextContent();
>  > +            if (txt.equals("99")) {
>  > +                throw new ProtocolException("I don't like the value 99");
>  > +            }
>  > +            txt = String.valueOf(Integer.valueOf(txt) - 1);
>  > +            part.getFirstChild().getFirstChild().getFirstChild().getFirstChild().setTextContent(txt);
>  > +            return true;
>  > +        } else { // outbound response if we're on the server
>  > +            SOAPMessage msg = ((SoapMessageContext)messagecontext).getMessage();
>  > +            SOAPPart part = msg.getSOAPPart();
>  > +         ...
>
> [Message clipped]



-- 
www.ruchith.org
www.wso2.org

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org