/*=============================================================================*
* 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.Handler;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.soap.SOAPService;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.ws.resource.ResourceContext;
import org.apache.ws.resource.i18n.MessagesImpl;
import org.apache.ws.resource.i18n.Keys;
import org.apache.ws.resource.faults.BaseFaultException;
import org.apache.ws.resource.faults.axis.BaseFaultType;
import org.apache.ws.resource.handler.ResourceHandler;
import org.apache.ws.util.i18n.Messages;
import org.apache.xmlbeans.XmlObject;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
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.SOAPBodyElement;
import javax.xml.soap.SOAPMessage;
import java.util.Hashtable;
import java.util.List;
/**
* LOG-DONE
* Axis provider that dispatches requests to WS-Resources.
*
* @author Ian P. Springer, Sal Campana
*/
public class ResourceProvider
extends ResourceHandler
implements Handler
{
private static final Log LOG = LogFactory.getLog( ResourceProvider.class );
public static final Messages MSG = MessagesImpl.getInstance();
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.init( );
}
/**
* Invokes a Web service operation.
*
* @param msgContext Axis SOAP message context
*
* @throws AxisFault if a SOAP fault needs to be returned
*/
public void invoke( MessageContext msgContext )
throws AxisFault
{
try
{
handleRequest( msgContext );
handleResponse( msgContext );
}
catch ( BaseFaultException bfe )
{
throw new BaseFaultType( bfe );
}
}
/**
* 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 responseMessage = axisMsgContext.getResponseMessage( );
if ( responseMessage == null )
{
responseMessage = createMessage( axisMsgContext );
axisMsgContext.setResponseMessage( responseMessage );
}
return responseMessage;
}
/**
* DOCUMENT_ME
*
* @param soapMsgContext DOCUMENT_ME
*
* @return DOCUMENT_ME
*/
protected ResourceContext createResourceContext( SOAPMessageContext soapMsgContext )
{
return new AxisResourceContext( soapMsgContext );
}
/**
* DOCUMENT_ME
*
* @param responseBodyElem DOCUMENT_ME
*
* @return DOCUMENT_ME
*/
protected SOAPBodyElement createSOAPBodyElement( XmlObject responseBodyElem )
{
return new org.apache.axis.message.SOAPBodyElement( (Element) responseBodyElem.newDomNode( ).getFirstChild( ) );
}
private Message createMessage( MessageContext axisMsgContext )
{
SOAPEnvelope envelope =
new SOAPEnvelope( axisMsgContext.getSOAPConstants( ),
axisMsgContext.getSchemaVersion( ) );
return new Message( envelope );
}
}