Author: scamp
Date: Tue Feb 1 09:27:26 2005
New Revision: 149422
URL: http://svn.apache.org/viewcvs?view=rev&rev=149422
Log:
updated to change to use the XmlBean version of SOAP Envelope
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=149421&r2=149422
==============================================================================
---
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
Tue Feb 1 09:27:26 2005
@@ -19,12 +19,15 @@
import org.apache.commons.logging.LogFactory;
import org.apache.ws.resource.ResourceContext;
import org.apache.ws.resource.ResourceContextException;
-import org.apache.ws.resource.i18n.MessagesImpl;
import org.apache.ws.resource.i18n.Keys;
+import org.apache.ws.resource.i18n.MessagesImpl;
import org.apache.ws.util.XmlBeanUtils;
import org.apache.ws.util.i18n.Messages;
import org.apache.xmlbeans.XmlObject;
-
+import org.apache.xmlbeans.XmlOptions;
+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;
@@ -56,8 +59,10 @@
public abstract class ResourceHandler
extends GenericHandler
{
- private static final Log LOG = LogFactory.getLog( ResourceHandler.class );
- public static final Messages MSG = MessagesImpl.getInstance();
+ private static final Log LOG = LogFactory.getLog( ResourceHandler.class
);
+
+ /** DOCUMENT_ME */
+ public static final Messages MSG = MessagesImpl.getInstance( );
/**
* DOCUMENT_ME
@@ -89,6 +94,9 @@
*/
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
*
@@ -110,26 +118,33 @@
{
try
{
- LOG.debug(MSG.getMessage(Keys.RECEIVED_REQUEST));
- SOAPMessageContext soapMsgContext = (SOAPMessageContext)
msgContext;
- // TODO: read the entire SOAP envelope into an XMLBean, so we don't
lose
- // any namespace declarations that might be needed to resolve prefixes
- // used in the request.
- SOAPBody soapBody = soapMsgContext.getMessage(
).getSOAPBody( );
- ResourceContext resourceContext = createResourceContext(
soapMsgContext );
- List responseBodyElems = new ArrayList( );
- Iterator requestBodyElemIter = soapBody.getChildElements(
);
- while ( requestBodyElemIter.hasNext( ) )
+ 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++ )
{
- SOAPElement requestElem = (SOAPElement) requestBodyElemIter.next(
);
- XmlObject requestXBean = XmlBeanUtils.toXmlObject( requestElem );
+ 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 )
{
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;
+ LOG.debug( MSG.getMessage( Keys.INVOKE_RESOURCE_METHOD,
+ serviceMethod.getName( ) ) );
+ XmlObject responseXBean = null;
try
{
responseXBean = (XmlObject) serviceMethod.invoke( service,
@@ -140,7 +155,10 @@
}
catch ( InvocationTargetException ite )
{
-
LOG.error(MSG.getMessage(Keys.ERROR_INVOKING_METHOD_ON_SERVICE,serviceMethod.getName(),serviceClass.getName(),ite));
+ LOG.error( MSG.getMessage(
Keys.ERROR_INVOKING_METHOD_ON_SERVICE,
+ serviceMethod.getName( ),
+ serviceClass.getName( ),
+ ite ) );
throw ite.getCause( );
}
@@ -159,7 +177,7 @@
else
{
t.printStackTrace( );
- throw new JAXRPCException(
MSG.getMessage(Keys.UNEXPECTED_ERROR_WITH_EXCEPTION,t ));
+ throw new JAXRPCException( MSG.getMessage(
Keys.UNEXPECTED_ERROR_WITH_EXCEPTION, t ) );
}
}
@@ -175,10 +193,11 @@
*/
public boolean handleResponse( MessageContext messageContext )
{
- LOG.debug(MSG.getMessage( Keys.HANDLING_RESPONSE));
+ 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())));
+ LOG.debug( MSG.getMessage( Keys.FOUND_RESP_ELEMS,
+ Integer.toString( responseBodyElems.size( )
) ) );
if ( responseBodyElems != null )
{
@@ -200,7 +219,7 @@
else
{
e.printStackTrace( );
- throw new JAXRPCException( MSG.getMessage(
Keys.UNEXPECTED_ERROR_WITH_EXCEPTION, e ));
+ throw new JAXRPCException( MSG.getMessage(
Keys.UNEXPECTED_ERROR_WITH_EXCEPTION, e ) );
}
}
}
@@ -233,16 +252,19 @@
*
* @return DOCUMENT_ME
*/
- protected Class getServiceClassName( ResourceContext resourceContext )
throws ResourceContextException, ClassNotFoundException
+ protected Class getServiceClassName( ResourceContext resourceContext )
+ throws ResourceContextException,
+ ClassNotFoundException
{
- String serviceClassName =
resourceContext.getResourceHome().getServiceClassName();
- LOG.debug(MSG.getMessage(
Keys.RETRIEVED_SERVICE_CLASSNAME,serviceClassName));
+ 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) );
+ throw new JAXRPCException( MSG.getMessage(
Keys.SERVICE_OPT_UNDEFINED_IN_HOME,
+
SERVICE_OPT_SERVICE_CLASS_NAME ) );
}
- Class serviceClass = Class.forName(serviceClassName);
+ Class serviceClass = Class.forName( serviceClassName );
return serviceClass;
}
@@ -312,13 +334,14 @@
private Method getServiceMethod( WsrfService service,
XmlObject requestXBean )
{
+ if ( LOG.isDebugEnabled( ) )
+ {
+ LOG.debug( MSG.getMessage( Keys.DERIVE_SERVICE_NAME_FROM_REQ,
+ requestXBean.toString( ) ) );
+ }
- if (LOG.isDebugEnabled())
- {
- LOG.debug(MSG.getMessage(
Keys.DERIVE_SERVICE_NAME_FROM_REQ,requestXBean.toString()));
- }
- Method serviceMethod = null;
- String serviceMethodName =
+ Method serviceMethod = null;
+ String serviceMethodName =
service.getMethodNameMap( ).getMethodName( XmlBeanUtils.getName(
requestXBean ) );
Method[] methods = service.getClass( ).getMethods( );
@@ -336,10 +359,13 @@
if ( serviceMethod == null )
{
- throw new JAXRPCException( MSG.getMessage(
Keys.UNABLE_TO_FIND_METHOD_IN_SERVICE,serviceMethodName,service.getClass(
).getName( ) ));
+ 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() ));
+ LOG.debug( MSG.getMessage( Keys.FOUND_SERVICE_METHOD,
+ serviceMethod.getName( ) ) );
return serviceMethod;
}
@@ -351,7 +377,7 @@
}
catch ( SOAPException soape )
{
- throw new JAXRPCException( MSG.getMessage(
Keys.FAILED_TO_CREATE_SOAP_MSG) );
+ throw new JAXRPCException( MSG.getMessage(
Keys.FAILED_TO_CREATE_SOAP_MSG ) );
}
}
@@ -362,7 +388,7 @@
IllegalAccessException,
InvocationTargetException
{
- LOG.debug(MSG.getMessage(
Keys.CREATING_INSTANCE_OF_SERVICE,serviceClass));
+ LOG.debug( MSG.getMessage( Keys.CREATING_INSTANCE_OF_SERVICE,
serviceClass ) );
Constructor serviceCtor = serviceClass.getConstructor( new Class[]
{
ResourceContext.class
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]