package org.jboss.webservice.handler;
import org.jboss.axis.providers.java.RPCInvocation;
import org.jboss.axis.providers.java.RPCProvider;
import org.jboss.logging.Logger;
import javax.xml.rpc.handler.MessageContext;
import java.util.List;
import java.util.Set;
public class ServerHandlerChain extends HandlerChainBaseImpl
{
private static Logger log = Logger.getLogger(ServerHandlerChain.class);
public ServerHandlerChain(List infos, Set roles)
{
super(infos, roles);
}
public boolean handleRequest(MessageContext msgContext)
{
RPCInvocation invBefore = (RPCInvocation)msgContext.getProperty(RPCProvider.RPC_INVOCATION);
if (invBefore == null)
throw new IllegalStateException("Cannot obtain RPCInvocation from message context");
String xmlBefore = invBefore.getRequestEnvelope().getAsStringFromInternal();
if (log.isTraceEnabled())
log.trace("RequestEnvelope before request handlers: " + xmlBefore);
boolean doNext = super.handleRequest(msgContext);
checkMustUnderstand(msgContext);
RPCInvocation invAfter = new RPCInvocation(invBefore);
invAfter.prepareFromRequestEnvelope();
String xmlAfter = invAfter.getRequestEnvelope().getAsStringFromInternal();
if (xmlBefore.equals(xmlAfter) == false)
{
if (log.isTraceEnabled())
log.trace("RequestEnvelope after request handlers: " + xmlAfter);
msgContext.setProperty(RPCProvider.RPC_INVOCATION, invAfter);
}
return doNext;
}
public boolean handleResponse(MessageContext msgContext)
{
boolean status = super.handleResponse(msgContext);
checkMustUnderstand(msgContext);
return status;
}
}