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 di...@apache.org on 2005/02/04 19:11:24 UTC
cvs commit: ws-axis/java/src/org/apache/axis/handlers HandlerChainImpl.java JAXRPCHandler.java
dims 2005/02/04 10:11:24
Modified: java/src/org/apache/axis/handlers HandlerChainImpl.java
JAXRPCHandler.java
Log:
move code to HandlerChainImpl from JAXRPCHandler since HandlerInfoChainFactory is the one that instantiates stuff from wsdd entries.
Revision Changes Path
1.16 +125 -45 ws-axis/java/src/org/apache/axis/handlers/HandlerChainImpl.java
Index: HandlerChainImpl.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/handlers/HandlerChainImpl.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- HandlerChainImpl.java 9 Dec 2004 14:36:14 -0000 1.15
+++ HandlerChainImpl.java 4 Feb 2005 18:11:24 -0000 1.16
@@ -13,11 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.axis.handlers;
+import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.utils.ClassUtils;
import org.apache.axis.utils.Messages;
+import org.apache.commons.logging.Log;
import javax.xml.rpc.JAXRPCException;
import javax.xml.rpc.handler.Handler;
@@ -25,14 +26,26 @@
import javax.xml.rpc.handler.MessageContext;
import javax.xml.rpc.handler.soap.SOAPMessageContext;
import javax.xml.rpc.soap.SOAPFaultException;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPMessage;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* Implementation of HandlerChain
*/
-public class HandlerChainImpl extends ArrayList implements javax.xml.rpc.handler.HandlerChain {
+public class HandlerChainImpl extends ArrayList implements javax.xml.rpc.handler
+ .HandlerChain {
+ protected static Log log =
+ LogFactory.getLog(HandlerChainImpl.class.getName());
+
+ private static final String JAXRPC_METHOD_INFO = "jaxrpc.method.info";
private String[] _roles;
@@ -43,8 +56,8 @@
}
public void setRoles(String[] roles) {
- if(roles != null) {
- // use clone for cheap array copy
+ if (roles != null) {
+ // use clone for cheap array copy
_roles = (String[])roles.clone();
}
}
@@ -67,64 +80,130 @@
public void addNewHandler(String className, Map config) {
try {
- HandlerInfo handlerInfo = new HandlerInfo(ClassUtils.forName(className),
- config,
- null);
+ HandlerInfo handlerInfo =
+ new HandlerInfo(ClassUtils.forName(className), config, null);
handlerInfos.add(handlerInfo);
add(newHandler(handlerInfo));
} catch (Exception ex) {
- String messageText = Messages.getMessage("NoJAXRPCHandler00", className);
+ String messageText =
+ Messages.getMessage("NoJAXRPCHandler00", className);
throw new JAXRPCException(messageText, ex);
}
}
public boolean handleFault(MessageContext _context) {
- SOAPMessageContext context = (SOAPMessageContext) _context;
-
- int endIdx = size() - 1;
- if (falseIndex != -1) {
- endIdx = falseIndex;
+ SOAPMessageContext context = (SOAPMessageContext)_context;
+ preInvoke(context);
+ try {
+ int endIdx = size() - 1;
+ if (falseIndex != -1) {
+ endIdx = falseIndex;
+ }
+ for (int i = endIdx; i >= 0; i--) {
+ if (getHandlerInstance(i).handleFault(context) == false) {
+ return false;
+ }
+ }
+ return true;
+ } finally {
+ postInvoke(context);
}
- for (int i = endIdx; i >= 0; i--) {
- if (getHandlerInstance(i).handleFault(context) == false) {
- return false;
+ }
+
+ public ArrayList getMessageInfo(SOAPMessage message) {
+ ArrayList list = new ArrayList();
+ try {
+ SOAPEnvelope env = message.getSOAPPart().getEnvelope();
+ SOAPBody body = env.getBody();
+ Iterator it = body.getChildElements();
+ SOAPElement operation = (SOAPElement)it.next();
+ list.add(operation.getElementName().toString());
+ for (Iterator i = operation.getChildElements(); i.hasNext();) {
+ SOAPElement elt = (SOAPElement)i.next();
+ list.add(elt.getElementName().toString());
}
+ } catch (Exception e) {
+ log.debug("Exception in getMessageInfo : ", e);
}
- return true;
+ return list;
}
public boolean handleRequest(MessageContext _context) {
-
- ((org.apache.axis.MessageContext)_context).setRoles(getRoles());
-
- SOAPMessageContext context = (SOAPMessageContext) _context;
-
- for (int i = 0; i < size(); i++) {
- Handler currentHandler = getHandlerInstance(i);
- try {
- if (currentHandler.handleRequest(context) == false) {
+ org.apache.axis.MessageContext actx =
+ (org.apache.axis.MessageContext)_context;
+ actx.setRoles(getRoles());
+ SOAPMessageContext context = (SOAPMessageContext)_context;
+ preInvoke(context);
+ try {
+ for (int i = 0; i < size(); i++) {
+ Handler currentHandler = getHandlerInstance(i);
+ try {
+ if (currentHandler.handleRequest(context) == false) {
+ falseIndex = i;
+ return false;
+ }
+ } catch (SOAPFaultException sfe) {
falseIndex = i;
- return false;
+ throw sfe;
}
- } catch (SOAPFaultException sfe) {
- falseIndex = i;
- throw sfe;
}
+ return true;
+ } finally {
+ postInvoke(context);
}
- return true;
}
public boolean handleResponse(MessageContext context) {
- int endIdx = size() - 1;
- if (falseIndex != -1) {
- endIdx = falseIndex;
+ SOAPMessageContext scontext = (SOAPMessageContext)context;
+ preInvoke(scontext);
+ try {
+ int endIdx = size() - 1;
+ if (falseIndex != -1) {
+ endIdx = falseIndex;
+ }
+ for (int i = endIdx; i >= 0; i--) {
+ if (getHandlerInstance(i).handleResponse(context) == false) {
+ return false;
+ }
+ }
+ return true;
+ } finally {
+ postInvoke(scontext);
}
- for (int i = endIdx; i >= 0; i--) {
- if (getHandlerInstance(i).handleResponse(context) == false) {
- return false;
+ }
+
+ private void preInvoke(SOAPMessageContext msgContext) {
+ try {
+ SOAPMessage message = msgContext.getMessage();
+ // Ensure that message is already in the form we want
+ message.getSOAPPart().getEnvelope();
+ msgContext.setProperty(org.apache.axis.SOAPPart.ALLOW_FORM_OPTIMIZATION,
+ Boolean.FALSE);
+ msgContext.setProperty(JAXRPC_METHOD_INFO, getMessageInfo(message));
+ } catch (Exception e) {
+ log.debug("Exception in preInvoke : ", e);
+ throw new RuntimeException("Exception in preInvoke : ", e);
+ }
+ }
+
+ private void postInvoke(SOAPMessageContext msgContext) {
+ msgContext.setProperty(org.apache.axis.SOAPPart.ALLOW_FORM_OPTIMIZATION,
+ Boolean.TRUE);
+ SOAPMessage message = msgContext.getMessage();
+ ArrayList oldList =
+ (ArrayList)msgContext.getProperty(JAXRPC_METHOD_INFO);
+ if (oldList != null) {
+ if (!Arrays.equals(oldList.toArray(), getMessageInfo(message)
+ .toArray())) {
+ throw new RuntimeException(Messages.getMessage("invocationArgumentsModified00"));
}
}
- return true;
+ try {
+ msgContext.getMessage().saveChanges();
+ } catch (SOAPException e) {
+ log.debug("Exception in postInvoke : ", e);
+ throw new RuntimeException("Exception in postInvoke : ", e);
+ }
}
public void destroy() {
@@ -140,23 +219,24 @@
}
private Handler getHandlerInstance(int index) {
- return (Handler) get(index);
+ return (Handler)get(index);
}
private HandlerInfo getHandlerInfo(int index) {
- return (HandlerInfo) handlerInfos.get(index);
+ return (HandlerInfo)handlerInfos.get(index);
}
private Handler newHandler(HandlerInfo handlerInfo) {
try {
- Handler handler =
- (Handler) handlerInfo.getHandlerClass().newInstance();
+ Handler handler = (Handler)handlerInfo.getHandlerClass()
+ .newInstance();
handler.init(handlerInfo);
return handler;
} catch (Exception ex) {
- String messageText = Messages.getMessage("NoJAXRPCHandler00", handlerInfo.getHandlerClass().toString());
+ String messageText =
+ Messages.getMessage("NoJAXRPCHandler00",
+ handlerInfo.getHandlerClass().toString());
throw new JAXRPCException(messageText, ex);
}
}
-}
-
+}
\ No newline at end of file
1.16 +8 -78 ws-axis/java/src/org/apache/axis/handlers/JAXRPCHandler.java
Index: JAXRPCHandler.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/handlers/JAXRPCHandler.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- JAXRPCHandler.java 3 Feb 2005 21:57:33 -0000 1.15
+++ JAXRPCHandler.java 4 Feb 2005 18:11:24 -0000 1.16
@@ -13,28 +13,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.axis.handlers;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
-import org.apache.axis.i18n.Messages;
import org.apache.axis.components.logger.LogFactory;
import org.apache.commons.logging.Log;
-import javax.xml.soap.SOAPException;
-import javax.xml.soap.SOAPMessage;
-import javax.xml.soap.SOAPEnvelope;
-import javax.xml.soap.SOAPBody;
-import javax.xml.soap.SOAPElement;
import java.util.Map;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Arrays;
-
/**
* Handles JAXRPC style handlers.
+ *
* @author Davanum Srinivas (dims@yahoo.com)
*/
public class JAXRPCHandler extends BasicHandler {
@@ -42,14 +32,12 @@
LogFactory.getLog(JAXRPCHandler.class.getName());
protected HandlerChainImpl impl = new HandlerChainImpl();
-
- private static final String JAXRPC_METHOD_INFO = "jaxrpc.method.info";
public void init() {
super.init();
- String className = (String) getOption("className");
- if(className != null) {
- addNewHandler(className, getOptions());
+ String className = (String)getOption("className");
+ if (className != null) {
+ addNewHandler(className, getOptions());
}
}
@@ -57,74 +45,16 @@
impl.addNewHandler(className, options);
}
- private void preInvoke(MessageContext msgContext) throws AxisFault {
- try {
- SOAPMessage message = msgContext.getMessage();
- // Ensure that message is already in the form we want
- message.getSOAPPart().getEnvelope();
- msgContext.setProperty(org.apache.axis.SOAPPart.ALLOW_FORM_OPTIMIZATION,
- Boolean.FALSE);
- msgContext.setProperty(JAXRPC_METHOD_INFO, getMessageInfo(message));
- } catch (Exception e) {
- log.debug("Exception in preInvoke : ", e);
- throw AxisFault.makeFault(e);
- }
- }
-
public void invoke(MessageContext msgContext) throws AxisFault {
log.debug("Enter: JAXRPCHandler::enter invoke");
- preInvoke(msgContext);
- try {
- if (!msgContext.getPastPivot()) {
- impl.handleRequest(msgContext);
- } else {
- impl.handleResponse(msgContext);
- }
- } finally {
- postInvoke(msgContext);
+ if (!msgContext.getPastPivot()) {
+ impl.handleRequest(msgContext);
+ } else {
+ impl.handleResponse(msgContext);
}
log.debug("Enter: JAXRPCHandler::exit invoke");
}
- private void postInvoke(MessageContext msgContext) throws AxisFault {
- msgContext.setProperty(org.apache.axis.SOAPPart.ALLOW_FORM_OPTIMIZATION,
- Boolean.TRUE);
- SOAPMessage message = msgContext.getMessage();
- ArrayList oldList = (ArrayList)msgContext.getProperty(JAXRPC_METHOD_INFO);
- if (oldList != null) {
- if (!Arrays.equals(oldList.toArray(), getMessageInfo(message)
- .toArray())) {
- throw new AxisFault(Messages.getMessage("invocationArgumentsModified00"));
- }
- }
- if (message.saveRequired()) {
- try {
- msgContext.getMessage().saveChanges();
- } catch (SOAPException e) {
- log.debug("Exception in postInvoke : ", e);
- throw AxisFault.makeFault(e);
- }
- }
- }
-
- public ArrayList getMessageInfo(SOAPMessage message){
- ArrayList list = new ArrayList();
- try {
- SOAPEnvelope env = message.getSOAPPart().getEnvelope();
- SOAPBody body = env.getBody();
- Iterator it = body.getChildElements();
- SOAPElement operation = (SOAPElement)it.next();
- list.add(operation.getElementName().toString());
- for (Iterator i = operation.getChildElements(); i.hasNext();) {
- SOAPElement elt = (SOAPElement)i.next();
- list.add(elt.getElementName().toString());
- }
- } catch (Exception e) {
- log.debug("Exception in getMessageInfo : ", e);
- }
- return list;
- }
-
public void onFault(MessageContext msgContext) {
impl.handleFault(msgContext);
}