Package org.apache.ws.resource.handler.axis

Source Code of org.apache.ws.resource.handler.axis.ResourceProvider

/*=============================================================================*
*  Copyright 2004 The Apache Software Foundation
*
*  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.ws.resource.handler.axis;

import org.apache.axis.AxisFault;
import org.apache.axis.Constants;
import org.apache.axis.Handler;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.encoding.SerializationContext;
import org.apache.axis.handlers.soap.SOAPService;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ws.resource.handler.ResourceHandler;
import org.apache.ws.resource.i18n.Keys;
import org.apache.ws.resource.i18n.MessagesImpl;
import org.apache.ws.util.i18n.Messages;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.namespace.QName;
import javax.xml.rpc.handler.soap.SOAPMessageContext;
import javax.xml.soap.SOAPMessage;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Hashtable;
import java.util.List;

/**
* An Axis provider that dispatches requests to WS-Resources.
*
* @author Ian Springer, Sal Campana
*/
public class ResourceProvider
   extends ResourceHandler
   implements Handler
{
   private static final Log      LOG = LogFactory.getLog( ResourceProvider.class );
   private static final Messages MSG = MessagesImpl.getInstance(  );

   /** DOCUMENT_ME */
   public static final String SYSPROP_AXIS_FAULT_DEBUG = "axis.fault.debug";

   static
   {
      System.setProperty( AxisConstants.AXIS_PLATFORM, "true" );
   }

   private GenericAxisHandler m_axisHelperHandler = new GenericAxisHandler( this );

   /**
    * DOCUMENT_ME
    *
    * @param doc DOCUMENT_ME
    *
    * @return DOCUMENT_ME
    */
   public Element getDeploymentData( Document doc )
   {
      return m_axisHelperHandler.getDeploymentData( doc );
   }

   /**
    * DOCUMENT_ME
    *
    * @param name DOCUMENT_ME
    */
   public void setName( String name )
   {
      m_axisHelperHandler.setName( name );
   }

   /**
    * DOCUMENT_ME
    *
    * @return DOCUMENT_ME
    */
   public String getName(  )
   {
      return m_axisHelperHandler.getName(  );
   }

   /**
    * DOCUMENT_ME
    *
    * @param name  DOCUMENT_ME
    * @param value DOCUMENT_ME
    */
   public void setOption( String name,
                          Object value )
   {
      m_axisHelperHandler.setOption( name, value );
   }

   /**
    * DOCUMENT_ME
    *
    * @param name DOCUMENT_ME
    *
    * @return DOCUMENT_ME
    */
   public Object getOption( String name )
   {
      return m_axisHelperHandler.getOption( name );
   }

   /**
    * DOCUMENT_ME
    *
    * @param opts DOCUMENT_ME
    */
   public void setOptions( Hashtable opts )
   {
      m_axisHelperHandler.setOptions( opts );
   }

   /**
    * DOCUMENT_ME
    *
    * @return DOCUMENT_ME
    */
   public Hashtable getOptions(  )
   {
      return m_axisHelperHandler.getOptions(  );
   }

   /**
    * DOCUMENT_ME
    *
    * @return DOCUMENT_ME
    */
   public List getUnderstoodHeaders(  )
   {
      return m_axisHelperHandler.getUnderstoodHeaders(  );
   }

   /**
    * DOCUMENT_ME
    *
    * @param qname DOCUMENT_ME
    *
    * @return DOCUMENT_ME
    */
   public boolean canHandleBlock( QName qname )
   {
      return m_axisHelperHandler.canHandleBlock( qname );
   }

   /**
    * DOCUMENT_ME
    */
   public void cleanup(  )
   {
      m_axisHelperHandler.cleanup(  );
   }

   /**
    * DOCUMENT_ME
    *
    * @param msgContext DOCUMENT_ME
    *
    * @throws AxisFault DOCUMENT_ME
    */
   public void generateWSDL( MessageContext msgContext )
   throws AxisFault
   {
      SOAPService service = msgContext.getService(  );
      LOG.debug( MSG.getMessage( Keys.RECEIVED_WSDL_REQUEST,
                                 service.getName(  ) ) );
      service.generateWSDL( msgContext );
   }

   /**
    * DOCUMENT_ME
    */
   public void init(  )
   {
      m_axisHelperHandler.setOptions( getOptions(  ) );
      m_axisHelperHandler.init(  );
   }

   /**
    * Invokes a Web service operation.
    *
    * @param msgContext Axis SOAP message context
    *
    * @throws AxisFault if a SOAP fault needs to be returned to the client
    */
   public void invoke( MessageContext msgContext )
   throws AxisFault
   {
      try
      {
         try
         {
            handleRequest( msgContext );
            handleResponse( msgContext );
         }
         catch ( RuntimeException re )
         {
            throw AxisFault.makeFault( re );
         }
      }
      catch ( AxisFault axisFault )
      {
         // only include hostname and stack trace in fault Detail if sysprop axis.fault.debug="true"
         if ( !Boolean.getBoolean( SYSPROP_AXIS_FAULT_DEBUG ) )
         {
            axisFault.removeHostname(  );
            axisFault.removeFaultDetail( Constants.QNAME_FAULTDETAIL_STACKTRACE );
         }

         if ( LOG.isDebugEnabled(  ) )
         {
            try
            {
               LOG.debug( "Sending SOAP fault: \n" + toXML( axisFault, msgContext ) );
            }
            catch ( Exception e )
            {
               LOG.error( "Failed to serialize AxisFault: " + e );
            }
         }

         throw axisFault;
      }
   }

   /**
    * DOCUMENT_ME
    *
    * @param msgContext DOCUMENT_ME
    */
   public void onFault( MessageContext msgContext )
   {
      m_axisHelperHandler.onFault( msgContext );
   }

   /**
    * DOCUMENT_ME
    *
    * @param soapMsgContext DOCUMENT_ME
    *
    * @return DOCUMENT_ME
    */
   protected SOAPMessage getResponseMessage( SOAPMessageContext soapMsgContext )
   {
      MessageContext axisMsgContext = ( (MessageContext) soapMsgContext );
      Message        responseMsg = axisMsgContext.getResponseMessage(  );
      if ( responseMsg == null )
      {
         responseMsg = createMessage( axisMsgContext );
         axisMsgContext.setResponseMessage( responseMsg );
      }

      return responseMsg;
   }

   /**
    * DOCUMENT_ME
    *
    * @param responseBodyElem DOCUMENT_ME
    *
    * @param soapBody
    * @return DOCUMENT_ME
    */

   /*
      protected SOAPBodyElement[] createSOAPBodyElements(XmlObject responseBodyElem, SOAPBody soapBody)
      {
         List     bodyElems  = new ArrayList(  );
         Node     node       = responseBodyElem.newDomNode(  );
         NodeList childNodes = node.getChildNodes(  );
         for ( int i = 0; i < childNodes.getLength(  ); i++ )
         {
            Node child = childNodes.item( i );
  
               //add all child elements
               if ( child.getNodeType(  ) == Node.ELEMENT_NODE )
               {
                  bodyElems.add( new org.apache.axis.message.SOAPBodyElement( (Element) child ) );
               }
            }
  
            return (SOAPBodyElement[]) bodyElems.toArray( new SOAPBodyElement[0] );
         }
    */
   private Message createMessage( MessageContext axisMsgContext )
   {
      SOAPEnvelope envelope =
         new SOAPEnvelope( axisMsgContext.getSOAPConstants(  ),
                           axisMsgContext.getSchemaVersion(  ) );
      return new Message( envelope );
   }

   private String toXML( AxisFault      axisFault,
                         MessageContext msgContext )
   throws Exception
   {
      Writer writer = new StringWriter(  );
      axisFault.output( new SerializationContext( writer, msgContext ) );
      String xml = writer.toString(  );
      writer.close(  );
      return xml;
   }
}
TOP

Related Classes of org.apache.ws.resource.handler.axis.ResourceProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.