Author: ips
Date: Mon Feb 7 13:10:38 2005
New Revision: 151759
URL: http://svn.apache.org/viewcvs?view=rev&rev=151759
Log:
Stefan's mods to allow void return types
Modified:
incubator/apollo/trunk/src/java/org/apache/ws/resource/handler/ResourceHandler.java
Modified:
incubator/apollo/trunk/src/java/org/apache/ws/resource/handler/ResourceHandler.java
URL:
http://svn.apache.org/viewcvs/incubator/apollo/trunk/src/java/org/apache/ws/resource/handler/ResourceHandler.java?view=diff&r1=151758&r2=151759
==============================================================================
---
incubator/apollo/trunk/src/java/org/apache/ws/resource/handler/ResourceHandler.java
(original)
+++
incubator/apollo/trunk/src/java/org/apache/ws/resource/handler/ResourceHandler.java
Mon Feb 7 13:10:38 2005
@@ -28,6 +28,7 @@
import org.xmlsoap.schemas.soap.envelope.Body;
import org.xmlsoap.schemas.soap.envelope.Envelope;
import org.xmlsoap.schemas.soap.envelope.EnvelopeDocument;
+
import javax.xml.namespace.QName;
import javax.xml.rpc.JAXRPCException;
import javax.xml.rpc.handler.GenericHandler;
@@ -37,7 +38,6 @@
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
-import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
@@ -46,357 +46,363 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
/**
- * LOG-DONE
- * Base class for platform-specific providers; also is a JAX-RPC Handler for
more flexibility.
+ * LOG-DONE Base class for platform-specific providers; also is a JAX-RPC
Handler for more flexibility.
*
* @author Ian P. Springer
* @author Sal Campana
*/
public abstract class ResourceHandler
- extends GenericHandler
+ extends GenericHandler
{
- private static final Log LOG = LogFactory.getLog( ResourceHandler.class
);
+ private static final Log LOG = LogFactory.getLog( ResourceHandler.class );
+
+ /**
+ * DOCUMENT_ME
+ */
+ public static final Messages MSG = MessagesImpl.getInstance();
+
+ /**
+ * DOCUMENT_ME
+ */
+ private static final String WSRF_RESPONSE_XMLOBJECT_LIST =
"WSRF_RESPONSE_XMLOBJECT_LIST";
+
+ /**
+ * DOCUMENT_ME
+ */
+ public static final String SERVICE_OPT_WSDL_TARGET_NAMESPACE =
"wsdlTargetNamespace";
+
+ /**
+ * DOCUMENT_ME
+ */
+ public static final String SERVICE_OPT_SERVICE_CLASS_NAME =
"serviceClassName";
+
+ /**
+ * DOCUMENT_ME
+ */
+ public static final String SERVICE_OPT_RESOURCE_KEY_QNAME =
"resourceKeyQname";
+
+ /**
+ * DOCUMENT_ME
+ */
+ public static final String SERVICE_OPT_RESOURCE_KEY_CLASS_NAME =
"resourceKeyClass";
+
+ /**
+ * DOCUMENT_ME
+ */
+ public static final String SERVICE_OPT_RESOURCE_HOME_CLASS_NAME =
"resourceHomeClass";
+
+ /**
+ * DOCUMENT_ME
+ */
+ public static final String SOAP_ENVELOPE_XMLBEAN =
"apollo.soapEnvelopeXmlBean";
+
+ /**
+ * DOCUMENT_ME
+ *
+ * @return DOCUMENT_ME
+ */
+ public QName[] getHeaders()
+ {
+ return new QName[0];
+ }
+
+ /**
+ * DOCUMENT_ME
+ *
+ * @param msgContext DOCUMENT_ME
+ *
+ * @return DOCUMENT_ME
+ */
+ public boolean handleRequest( MessageContext msgContext )
+ {
+ try
+ {
+ LOG.debug( MSG.getMessage( Keys.RECEIVED_REQUEST ) );
+ SOAPMessageContext soapMsgContext = (SOAPMessageContext)
msgContext;
+ SOAPEnvelope envelope =
soapMsgContext.getMessage().getSOAPPart().getEnvelope();
+ EnvelopeDocument envelopeDocXmlBean =
EnvelopeDocument.Factory.parse( envelope.toString() );
+ Envelope envelopeXmlBean = envelopeDocXmlBean.getEnvelope();
+ Body body = envelopeXmlBean.getBody();
+
+ ResourceContext resourceContext = createResourceContext(
soapMsgContext );
+ resourceContext.setProperty( SOAP_ENVELOPE_XMLBEAN,
envelopeXmlBean );
+ List responseBodyElems = new ArrayList();
- /** DOCUMENT_ME */
- public static final Messages MSG = MessagesImpl.getInstance( );
+ XmlObject[] childElements = XmlBeanUtils.getChildElements( body );
- /**
- * DOCUMENT_ME
- */
- private static final String WSRF_RESPONSE_XMLOBJECT_LIST =
"WSRF_RESPONSE_XMLOBJECT_LIST";
-
- /**
- * DOCUMENT_ME
- */
- public static final String SERVICE_OPT_WSDL_TARGET_NAMESPACE =
"wsdlTargetNamespace";
-
- /**
- * DOCUMENT_ME
- */
- public static final String SERVICE_OPT_SERVICE_CLASS_NAME =
"serviceClassName";
-
- /**
- * DOCUMENT_ME
- */
- public static final String SERVICE_OPT_RESOURCE_KEY_QNAME =
"resourceKeyQname";
-
- /**
- * DOCUMENT_ME
- */
- public static final String SERVICE_OPT_RESOURCE_KEY_CLASS_NAME =
"resourceKeyClass";
-
- /**
- * DOCUMENT_ME
- */
- public static final String SERVICE_OPT_RESOURCE_HOME_CLASS_NAME =
"resourceHomeClass";
-
- /** DOCUMENT_ME */
- public static final String XMLBBEAN_SOAP_ENVELOPE =
"XMLBBEAN_SOAP_ENVELOPE";
-
- /**
- * DOCUMENT_ME
- *
- * @return DOCUMENT_ME
- */
- public QName[] getHeaders( )
- {
- return new QName[0];
- }
-
- /**
- * DOCUMENT_ME
- *
- * @param msgContext DOCUMENT_ME
- *
- * @return DOCUMENT_ME
- */
- public boolean handleRequest( MessageContext msgContext )
- {
- try
- {
- LOG.debug( MSG.getMessage( Keys.RECEIVED_REQUEST ) );
- SOAPMessageContext soapMsgContext = (SOAPMessageContext)
msgContext;
- SOAPEnvelope envelope = soapMsgContext.getMessage(
).getSOAPPart( ).getEnvelope( );
- EnvelopeDocument envelopeDocXmlBean =
EnvelopeDocument.Factory.parse( envelope.toString( ) );
- Envelope envelopeXmlBean =
envelopeDocXmlBean.getEnvelope( );
- Body body = envelopeXmlBean.getBody( );
-
- ResourceContext resourceContext = createResourceContext(
soapMsgContext );
- resourceContext.setProperty( XMLBBEAN_SOAP_ENVELOPE, envelopeXmlBean
);
- List responseBodyElems = new ArrayList( );
-
- XmlObject[] childElements = XmlBeanUtils.getChildElements( body );
-
- for ( int i = 0; i < childElements.length; i++ )
- {
- XmlObject requestXBean = childElements[i];
-
- //todo probably need to change method signatures to take types
instead of documents to avoid this,
- requestXBean = XmlObject.Factory.parse( requestXBean.xmlText( new
XmlOptions( ).setSaveOuter( ) ) );
- if ( requestXBean != null )
+ for ( int i = 0; i < childElements.length; i++ )
{
- Class serviceClass = getServiceClassName(
resourceContext );
- WsrfService service = createService( serviceClass,
resourceContext );
- Method serviceMethod = getServiceMethod( service,
requestXBean );
- LOG.debug( MSG.getMessage( Keys.INVOKE_RESOURCE_METHOD,
- serviceMethod.getName( ) ) );
- XmlObject responseXBean = null;
- try
- {
- responseXBean = (XmlObject) serviceMethod.invoke( service,
- new
Object[]
- {
-
requestXBean
- } );
- }
- catch ( InvocationTargetException ite )
- {
- LOG.error( MSG.getMessage(
Keys.ERROR_INVOKING_METHOD_ON_SERVICE,
- serviceMethod.getName( ),
- serviceClass.getName( ),
- ite ) );
- throw ite.getCause( );
- }
+ XmlObject requestXBean = childElements[i];
- responseBodyElems.add( responseXBean );
+ //todo probably need to change method signatures to take types
instead of documents to avoid this,
+ requestXBean = XmlObject.Factory.parse( requestXBean.xmlText(
new XmlOptions().setSaveOuter() ) );
+ if ( requestXBean != null )
+ {
+ Class serviceClass = getServiceClassName( resourceContext
);
+ WsrfService service = createService( serviceClass,
resourceContext );
+ Method serviceMethod = getServiceMethod( service,
requestXBean );
+ LOG.debug( MSG.getMessage( Keys.INVOKE_RESOURCE_METHOD,
+ serviceMethod.getName() ) );
+ XmlObject responseXBean = null;
+ try
+ {
+ responseXBean = (XmlObject) serviceMethod.invoke(
service,
+ new Object[]
+ {
+ requestXBean
+ } );
+ }
+ catch ( InvocationTargetException ite )
+ {
+ LOG.error( MSG.getMessage(
Keys.ERROR_INVOKING_METHOD_ON_SERVICE,
+ serviceMethod.getName(),
+ serviceClass.getName(),
+ ite ) );
+ throw ite.getCause();
+ }
+ if ( responseXBean != null )
+ {
+ responseBodyElems.add( responseXBean );
+ }
+ }
}
- }
-
- msgContext.setProperty( WSRF_RESPONSE_XMLOBJECT_LIST,
responseBodyElems );
- }
- catch ( Throwable t )
- {
- if ( t instanceof SOAPFaultException )
- {
- throw (SOAPFaultException) t;
- }
- else
- {
- t.printStackTrace( );
- throw new JAXRPCException( MSG.getMessage(
Keys.UNEXPECTED_ERROR_WITH_EXCEPTION, t ) );
- }
- }
-
- return false;
- }
-
- /**
- * DOCUMENT_ME
- *
- * @param messageContext DOCUMENT_ME
- *
- * @return DOCUMENT_ME
- */
- public boolean handleResponse( MessageContext messageContext )
- {
- LOG.debug( MSG.getMessage( Keys.HANDLING_RESPONSE ) );
- SOAPEnvelope responseEnvelope = getResponseEnvelope(
(SOAPMessageContext) messageContext );
- List responseBodyElems = (List) messageContext.getProperty(
WSRF_RESPONSE_XMLOBJECT_LIST );
- LOG.debug( MSG.getMessage( Keys.FOUND_RESP_ELEMS,
- Integer.toString( responseBodyElems.size( )
) ) );
-
- if ( responseBodyElems != null )
- {
- try
- {
- SOAPBody body = responseEnvelope.getBody( );
- for ( int i = 0; i < responseBodyElems.size( ); i++ )
+ if ( ! responseBodyElems.isEmpty() )
{
- XmlObject responseBodyElem = (XmlObject) responseBodyElems.get(
i );
- body.addChildElement( createSOAPBodyElement( responseBodyElem )
);
+ msgContext.setProperty( WSRF_RESPONSE_XMLOBJECT_LIST,
responseBodyElems );
}
- }
- catch ( Exception e )
- {
- if ( e instanceof SOAPFaultException )
+ }
+ catch ( Throwable t )
+ {
+ if ( t instanceof SOAPFaultException )
{
- throw (SOAPFaultException) e;
+ throw (SOAPFaultException) t;
}
else
{
- e.printStackTrace( );
- throw new JAXRPCException( MSG.getMessage(
Keys.UNEXPECTED_ERROR_WITH_EXCEPTION, e ) );
+ t.printStackTrace();
+ throw new JAXRPCException( MSG.getMessage(
Keys.UNEXPECTED_ERROR_WITH_EXCEPTION, t ) );
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * DOCUMENT_ME
+ *
+ * @param messageContext DOCUMENT_ME
+ *
+ * @return DOCUMENT_ME
+ */
+ public boolean handleResponse( MessageContext messageContext )
+ {
+ LOG.debug( MSG.getMessage( Keys.HANDLING_RESPONSE ) );
+ SOAPEnvelope responseEnvelope = getResponseEnvelope(
(SOAPMessageContext) messageContext );
+ List responseBodyElems = (List) messageContext.getProperty(
WSRF_RESPONSE_XMLOBJECT_LIST );
+ LOG.debug( MSG.getMessage( Keys.FOUND_RESP_ELEMS,
+ Integer.toString( responseBodyElems.size() ) ) );
+
+ if ( responseBodyElems != null )
+ {
+ try
+ {
+ SOAPBody body = responseEnvelope.getBody();
+ for ( int i = 0; i < responseBodyElems.size(); i++ )
+ {
+ XmlObject responseBodyElem = (XmlObject)
responseBodyElems.get( i );
+ body.addChildElement( createSOAPBodyElement(
responseBodyElem ) );
+ }
+ }
+ catch ( Exception e )
+ {
+ if ( e instanceof SOAPFaultException )
+ {
+ throw (SOAPFaultException) e;
+ }
+ else
+ {
+ e.printStackTrace();
+ throw new JAXRPCException( MSG.getMessage(
Keys.UNEXPECTED_ERROR_WITH_EXCEPTION, e ) );
+ }
}
- }
- }
+ }
- return true;
- }
+ return true;
+ }
+
+ /**
+ * Creates a [EMAIL PROTECTED] ResourceContext} for this request.
+ *
+ * @param soapMsgContext the JAX-RPC SOAP message context for this request
+ *
+ * @return a ResourceContext for this request
+ */
+ protected abstract ResourceContext createResourceContext(
SOAPMessageContext soapMsgContext );
+
+ /**
+ * DOCUMENT_ME
+ *
+ * @param responseBodyElem DOCUMENT_ME
+ *
+ * @return DOCUMENT_ME
+ */
+ protected abstract SOAPBodyElement createSOAPBodyElement( XmlObject
responseBodyElem );
+
+ /**
+ * DOCUMENT_ME
+ *
+ * @param resourceContext DOCUMENT_ME
+ *
+ * @return DOCUMENT_ME
+ */
+ protected Class getServiceClassName( ResourceContext resourceContext )
+ throws ResourceContextException,
+ ClassNotFoundException
+ {
+ String serviceClassName =
resourceContext.getResourceHome().getServiceClassName();
+ LOG.debug( MSG.getMessage( Keys.RETRIEVED_SERVICE_CLASSNAME,
serviceClassName ) );
+ if ( serviceClassName == null )
+ {
+ throw new JAXRPCException( MSG.getMessage(
Keys.SERVICE_OPT_UNDEFINED_IN_HOME,
+ SERVICE_OPT_SERVICE_CLASS_NAME ) );
+ }
+
+ Class serviceClass = Class.forName( serviceClassName );
+ return serviceClass;
+ }
+
+ /**
+ * @param resourceContext
+ * @param key
+ *
+ * @return
+ */
+ protected final String getServiceOption( ResourceContext resourceContext,
+ String key )
+ {
+ return (String) resourceContext.getProperty( key );
+ }
+
+ /**
+ * DOCUMENT_ME
+ *
+ * @param soapMsgContext DOCUMENT_ME
+ *
+ * @return DOCUMENT_ME
+ */
+ protected SOAPEnvelope getResponseEnvelope( SOAPMessageContext
soapMsgContext )
+ {
+ return ( getEnvelope( getResponseMessage( soapMsgContext ) ) );
+ }
+
+ /**
+ * @param soapMsgContext the response's JAX-RPC message context
+ *
+ * @return response JAX-RPC SOAP message
+ */
+ protected SOAPMessage getResponseMessage( SOAPMessageContext
soapMsgContext )
+ {
+ SOAPMessage soapMsg = soapMsgContext.getMessage();
+ if ( soapMsg == null )
+ {
+ soapMsg = createSOAPMessage();
+ soapMsgContext.setMessage( soapMsg );
+ }
+
+ return ( soapMsg );
+ }
+
+ /**
+ * @param soap_msg a SAAJ SOAP message
+ *
+ * @return
+ */
+ private SOAPEnvelope getEnvelope( SOAPMessage soap_msg )
+ {
+ SOAPEnvelope soap_envelope = null;
+
+ try
+ {
+ SOAPPart soap_part = soap_msg.getSOAPPart();
+
+ soap_envelope = soap_part.getEnvelope();
+ }
+ catch ( SOAPException soape )
+ {
+ }
+
+ return ( soap_envelope );
+ }
+
+ private Method getServiceMethod( WsrfService service,
+ XmlObject requestXBean )
+ {
+ if ( LOG.isDebugEnabled() )
+ {
+ LOG.debug( MSG.getMessage( Keys.DERIVE_SERVICE_NAME_FROM_REQ,
+ requestXBean.toString() ) );
+ }
+
+ Method serviceMethod = null;
+ String serviceMethodName =
+ service.getMethodNameMap().getMethodName(
XmlBeanUtils.getName( requestXBean ) );
+
+ Method[] methods = service.getClass().getMethods();
+ for ( int i = 0; i < methods.length; i++ )
+ {
+ Method method = methods[i];
+ if ( method.getName().equals( serviceMethodName )
+ && ( method.getParameterTypes().length == 1 )
+ && method.getParameterTypes()[0].isInstance( requestXBean
) )
+ {
+ serviceMethod = method;
+ break;
+ }
+ }
- /**
- * Creates a [EMAIL PROTECTED] ResourceContext} for this request.
- *
- * @param soapMsgContext the JAX-RPC SOAP message context for this request
- *
- * @return a ResourceContext for this request
- */
- protected abstract ResourceContext createResourceContext(
SOAPMessageContext soapMsgContext );
-
- /**
- * DOCUMENT_ME
- *
- * @param responseBodyElem DOCUMENT_ME
- *
- * @return DOCUMENT_ME
- */
- protected abstract SOAPBodyElement createSOAPBodyElement( XmlObject
responseBodyElem );
-
- /**
- * DOCUMENT_ME
- *
- * @param resourceContext DOCUMENT_ME
- *
- * @return DOCUMENT_ME
- */
- protected Class getServiceClassName( ResourceContext resourceContext )
- throws ResourceContextException,
- ClassNotFoundException
- {
- String serviceClassName = resourceContext.getResourceHome(
).getServiceClassName( );
- LOG.debug( MSG.getMessage( Keys.RETRIEVED_SERVICE_CLASSNAME,
serviceClassName ) );
- if ( serviceClassName == null )
- {
- throw new JAXRPCException( MSG.getMessage(
Keys.SERVICE_OPT_UNDEFINED_IN_HOME,
-
SERVICE_OPT_SERVICE_CLASS_NAME ) );
- }
-
- Class serviceClass = Class.forName( serviceClassName );
- return serviceClass;
- }
-
- /**
- * @param resourceContext
- * @param key
- *
- * @return
- */
- protected final String getServiceOption( ResourceContext resourceContext,
- String key )
- {
- return (String) resourceContext.getProperty( key );
- }
-
- /**
- * DOCUMENT_ME
- *
- * @param soapMsgContext DOCUMENT_ME
- *
- * @return DOCUMENT_ME
- */
- protected SOAPEnvelope getResponseEnvelope( SOAPMessageContext
soapMsgContext )
- {
- return ( getEnvelope( getResponseMessage( soapMsgContext ) ) );
- }
-
- /**
- * @param soapMsgContext the response's JAX-RPC message context
- *
- * @return response JAX-RPC SOAP message
- */
- protected SOAPMessage getResponseMessage( SOAPMessageContext soapMsgContext
)
- {
- SOAPMessage soapMsg = soapMsgContext.getMessage( );
- if ( soapMsg == null )
- {
- soapMsg = createSOAPMessage( );
- soapMsgContext.setMessage( soapMsg );
- }
-
- return ( soapMsg );
- }
-
- /**
- * @param soap_msg a SAAJ SOAP message
- *
- * @return
- */
- private SOAPEnvelope getEnvelope( SOAPMessage soap_msg )
- {
- SOAPEnvelope soap_envelope = null;
-
- try
- {
- SOAPPart soap_part = soap_msg.getSOAPPart( );
-
- soap_envelope = soap_part.getEnvelope( );
- }
- catch ( SOAPException soape )
- {
- }
-
- return ( soap_envelope );
- }
-
- private Method getServiceMethod( WsrfService service,
- XmlObject requestXBean )
- {
- if ( LOG.isDebugEnabled( ) )
- {
- LOG.debug( MSG.getMessage( Keys.DERIVE_SERVICE_NAME_FROM_REQ,
- requestXBean.toString( ) ) );
- }
-
- Method serviceMethod = null;
- String serviceMethodName =
- service.getMethodNameMap( ).getMethodName( XmlBeanUtils.getName(
requestXBean ) );
-
- Method[] methods = service.getClass( ).getMethods( );
- for ( int i = 0; i < methods.length; i++ )
- {
- Method method = methods[i];
- if ( method.getName( ).equals( serviceMethodName )
- && ( method.getParameterTypes( ).length == 1 )
- && method.getParameterTypes( )[0].isInstance( requestXBean ) )
- {
- serviceMethod = method;
- break;
- }
- }
-
- if ( serviceMethod == null )
- {
- throw new JAXRPCException( MSG.getMessage(
Keys.UNABLE_TO_FIND_METHOD_IN_SERVICE,
- serviceMethodName,
- service.getClass(
).getName( ) ) );
- }
-
- LOG.debug( MSG.getMessage( Keys.FOUND_SERVICE_METHOD,
- serviceMethod.getName( ) ) );
- return serviceMethod;
- }
-
- private SOAPMessage createSOAPMessage( )
- {
- try
- {
- return MessageFactory.newInstance( ).createMessage( );
- }
- catch ( SOAPException soape )
- {
- throw new JAXRPCException( MSG.getMessage(
Keys.FAILED_TO_CREATE_SOAP_MSG ) );
- }
- }
-
- private WsrfService createService( Class serviceClass,
- ResourceContext resourceContext )
- throws NoSuchMethodException,
- InstantiationException,
- IllegalAccessException,
- InvocationTargetException
- {
- LOG.debug( MSG.getMessage( Keys.CREATING_INSTANCE_OF_SERVICE,
serviceClass ) );
- Constructor serviceCtor = serviceClass.getConstructor( new Class[]
- {
-
ResourceContext.class
- } );
- WsrfService service = (WsrfService) serviceCtor.newInstance( new Object[]
- {
-
resourceContext
- } );
- return service;
- }
+ if ( serviceMethod == null )
+ {
+ throw new JAXRPCException( MSG.getMessage(
Keys.UNABLE_TO_FIND_METHOD_IN_SERVICE,
+ serviceMethodName,
+ service.getClass().getName() ) );
+ }
+
+ LOG.debug( MSG.getMessage( Keys.FOUND_SERVICE_METHOD,
+ serviceMethod.getName() ) );
+ return serviceMethod;
+ }
+
+ private SOAPMessage createSOAPMessage()
+ {
+ try
+ {
+ return MessageFactory.newInstance().createMessage();
+ }
+ catch ( SOAPException soape )
+ {
+ throw new JAXRPCException( MSG.getMessage(
Keys.FAILED_TO_CREATE_SOAP_MSG ) );
+ }
+ }
+
+ private WsrfService createService( Class serviceClass,
+ ResourceContext resourceContext )
+ throws NoSuchMethodException,
+ InstantiationException,
+ IllegalAccessException,
+ InvocationTargetException
+ {
+ LOG.debug( MSG.getMessage( Keys.CREATING_INSTANCE_OF_SERVICE,
serviceClass ) );
+ Constructor serviceCtor = serviceClass.getConstructor( new Class[]
+ {
+ ResourceContext.class
+ } );
+ WsrfService service = (WsrfService) serviceCtor.newInstance( new
Object[]
+ {
+ resourceContext
+ } );
+ return service;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]