You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by jl...@apache.org on 2007/05/23 11:19:10 UTC
svn commit: r540898 - in
/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws:
handler/ handler/logical/ handler/soap/ support/
Author: jliu
Date: Wed May 23 02:19:09 2007
New Revision: 540898
URL: http://svn.apache.org/viewvc?view=rev&rev=540898
Log:
code clean up in handler related area.
Modified:
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerInInterceptor.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerOutInterceptor.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerFaultInInterceptor.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java?view=diff&rev=540898&r1=540897&r2=540898
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java Wed May 23 02:19:09 2007
@@ -52,7 +52,7 @@
import org.apache.cxf.message.Message;
/**
- * invoke invoke the handlers in a registered handler chain
+ * invoke the handlers in a registered handler chain
*/
public class HandlerChainInvoker {
@@ -68,7 +68,6 @@
private boolean isRequestor;
private boolean responseExpected = true;
private boolean faultExpected;
- //private boolean handlerProcessingAborted;
private boolean closed;
private boolean messageDirectionReversed;
private Exception fault;
@@ -121,30 +120,22 @@
}
public boolean invokeLogicalHandlers(boolean requestor, LogicalMessageContext context) {
- // objectCtx.setRequestorRole(requestor);
context.put(MessageContext.MESSAGE_OUTBOUND_PROPERTY, isOutbound());
return invokeHandlerChain(logicalHandlers, context);
}
public boolean invokeLogicalHandlersHandleFault(boolean requestor, LogicalMessageContext context) {
- // objectCtx.setRequestorRole(requestor);
context.put(MessageContext.MESSAGE_OUTBOUND_PROPERTY, isOutbound());
return invokeHandlerChainHandleFault(logicalHandlers, context);
}
public boolean invokeProtocolHandlers(boolean requestor, MessageContext context) {
- // WrappedMessageContext context = new WrappedMessageContext(message);
- // bindingContext.put(ObjectMessageContext.REQUESTOR_ROLE_PROPERTY,
- // requestor);
context.put(MessageContext.MESSAGE_OUTBOUND_PROPERTY, isOutbound());
return invokeHandlerChain(protocolHandlers, context);
}
public boolean invokeProtocolHandlersHandleFault(boolean requestor, MessageContext context) {
- // WrappedMessageContext context = new WrappedMessageContext(message);
- // bindingContext.put(ObjectMessageContext.REQUESTOR_ROLE_PROPERTY,
- // requestor);
context.put(MessageContext.MESSAGE_OUTBOUND_PROPERTY, isOutbound());
return invokeHandlerChainHandleFault(protocolHandlers, context);
@@ -167,9 +158,9 @@
}
/**
- * We need HandlerChainInvoker behaves differently on client and server
- * side. For client side, as we do not have a faultChain, we need to call
- * handleFault and close on within HandlerChainInvoker directly.
+ * We need HandlerChainInvoker behaves differently on the client and server
+ * side. For the client side, as there is no inbound faultChain, we need to call
+ * handleFault and close within HandlerChainInvoker directly.
*/
public boolean isRequestor() {
return isRequestor;
@@ -220,7 +211,6 @@
/**
* Indicates that the invoker is closed. When closed, only
- *
* @see #mepComplete may be called. The invoker will become closed if during
* a invocation of handlers, a handler throws a runtime exception that
* is not a protocol exception and no futher handler or message
@@ -244,33 +234,8 @@
List getInvokedHandlers() {
return Collections.unmodifiableList(invokedHandlers);
}
-
-/*
- private <T extends Handler> void invokeClose(List<T> handlers, MessageContext context) {
- if (isOutbound()) {
- handlers = reverseHandlerChain(handlers);
- }
- if (messageDirectionReversed) {
- handlers = reverseHandlerChain(handlers);
- }
- // handlers = reverseHandlerChain(handlers);
- for (Handler h : handlers) {
- if (closeHandlers.contains(h)) {
- System.out.println("===========invokeClose " + h.toString());
- h.close(context);
- }
- }
- }*/
-
- //REVISIT
- /*
- * the logic of current implemetation is if the exception is thrown from
- * previous handlers, we only invoke handleFault if it is ProtocolException
- * (per spec), if the exception is thrown from other places other than
- * handlers, we always invoke handleFault.
- */
- private boolean invokeHandlerChainHandleFault(List<? extends Handler> handlerChain, MessageContext ctx) {
+ private boolean invokeHandlerChain(List<? extends Handler> handlerChain, MessageContext ctx) {
if (handlerChain.isEmpty()) {
LOG.log(Level.FINEST, "no handlers registered");
return true;
@@ -279,12 +244,6 @@
if (isClosed()) {
return false;
}
-
- //The fault is raised from previous handlers, in this case, we only invoke handleFault
- //if the fault is a ProtocolException
- if (fault != null && !(fault instanceof ProtocolException)) {
- return true;
- }
if (LOG.isLoggable(Level.FINE)) {
LOG.log(Level.FINE, "invoking handlers, direction: " + (outbound ? "outbound" : "inbound"));
@@ -296,18 +255,19 @@
}
boolean continueProcessing = true;
-
WebServiceContextImpl.setMessageContext(ctx);
+ continueProcessing = invokeHandleMessage(handlerChain, ctx);
- continueProcessing = invokeHandleFault(handlerChain, ctx);
-
-/* if (!continueProcessing) {
- handlerProcessingAborted = true;
- }*/
return continueProcessing;
}
- private boolean invokeHandlerChain(List<? extends Handler> handlerChain, MessageContext ctx) {
+ /*
+ * REVISIT: the logic of current implemetation is if the exception is thrown
+ * from previous handlers, we only invoke handleFault if it is
+ * ProtocolException (per spec), if the exception is thrown from other
+ * places other than handlers, we always invoke handleFault.
+ */
+ private boolean invokeHandlerChainHandleFault(List<? extends Handler> handlerChain, MessageContext ctx) {
if (handlerChain.isEmpty()) {
LOG.log(Level.FINEST, "no handlers registered");
return true;
@@ -316,6 +276,12 @@
if (isClosed()) {
return false;
}
+
+ //The fault is raised from previous handlers, in this case, we only invoke handleFault
+ //if the fault is a ProtocolException
+ if (fault != null && !(fault instanceof ProtocolException)) {
+ return true;
+ }
if (LOG.isLoggable(Level.FINE)) {
LOG.log(Level.FINE, "invoking handlers, direction: " + (outbound ? "outbound" : "inbound"));
@@ -327,21 +293,12 @@
}
boolean continueProcessing = true;
-
WebServiceContextImpl.setMessageContext(ctx);
+ continueProcessing = invokeHandleFault(handlerChain, ctx);
- if (!faultRaised()) {
- continueProcessing = invokeHandleMessage(handlerChain, ctx);
- } else {
- continueProcessing = invokeHandleFault(handlerChain, ctx);
- }
-
-/* if (!continueProcessing) {
- handlerProcessingAborted = true;
- }*/
return continueProcessing;
}
-
+
@SuppressWarnings("unchecked")
private boolean invokeHandleFault(List<? extends Handler> handlerChain, MessageContext ctx) {
boolean continueProcessing = true;
@@ -367,10 +324,6 @@
return continueProcessing;
}
- private boolean isTheLastInvokedHandler(Handler h) {
- return invokedHandlers.contains(h) && invokedHandlers.indexOf(h) == (invokedHandlers.size() - 1);
- }
-
@SuppressWarnings("unchecked")
private boolean invokeHandleMessage(List<? extends Handler> handlerChain, MessageContext ctx) {
boolean continueProcessing = true;
@@ -386,7 +339,6 @@
if (responseExpected) {
changeMessageDirection(ctx);
messageDirectionReversed = true;
- //invokeReversedClose();
}
break;
@@ -394,12 +346,10 @@
}
} catch (ProtocolException e) {
LOG.log(Level.FINE, "handleMessage raised exception", e);
- messageDirectionReversed = true;
-
+
if (responseExpected) {
changeMessageDirection(ctx);
messageDirectionReversed = true;
- //invokeReversedClose();
}
//special case for client side, this is because we do nothing in client fault
@@ -483,13 +433,7 @@
// do nothing
}
}
-
- /*
- * The message direction is reversed, if the message is not already a fault
- * message then it is replaced with a fault message, and the runtime invokes
- * handleFault on the next handler or dispatches the message if there are no
- * further handlers.
- */
+
@SuppressWarnings("unchecked")
private boolean invokeReversedHandleFault(MessageContext ctx) {
boolean continueProcessing = true;
@@ -521,14 +465,6 @@
}
invokeReversedClose();
return continueProcessing;
- /*
- * int index = invokedHandlers.size() - 2; while (index >= 0) { Handler
- * handler = invokedHandlers.get(index); if (handler instanceof
- * LogicalHandler) { if (Boolean.FALSE.equals(handler.
- * handleFault(logicalMessageContext))) { return false; } } else { if
- * (Boolean.FALSE.equals(handler. handleFault(protocolMessageContext))) {
- * return false; } } index--; } return true;
- */
}
/*
@@ -567,6 +503,10 @@
return ret;
}
+ private boolean isTheLastInvokedHandler(Handler h) {
+ return invokedHandlers.contains(h) && invokedHandlers.indexOf(h) == (invokedHandlers.size() - 1);
+ }
+
private void markHandlerInvoked(Handler h) {
if (!invokedHandlers.contains(h)) {
invokedHandlers.add(h);
@@ -576,7 +516,6 @@
private void changeMessageDirection(MessageContext context) {
outbound = !outbound;
setMessageOutboundProperty(context);
- // context.put(ObjectMessageContext.MESSAGE_INPUT, Boolean.TRUE);
}
private void setMessageOutboundProperty(MessageContext context) {
@@ -597,11 +536,6 @@
}
protected final void setFault(Exception ex) {
- /*
- * context.put(ObjectMessageContext.METHOD_FAULT, ex);
- * context.setScope(ObjectMessageContext.METHOD_FAULT,
- * MessageContext.Scope.HANDLER);
- */
fault = ex;
}
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerInInterceptor.java?view=diff&rev=540898&r1=540897&r2=540898
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerInInterceptor.java Wed May 23 02:19:09 2007
@@ -59,6 +59,7 @@
boolean requestor = isRequestor(message);
if (!invoker.invokeLogicalHandlers(requestor, lctx)) {
if (!requestor) {
+ //server side
handleAbort(message, null);
} else {
//Client side inbound, thus no response expected, do nothing, the close will
@@ -76,11 +77,10 @@
message.getInterceptorChain().abort();
if (!message.getExchange().isOneWay()) {
+ //server side inbound
Endpoint e = message.getExchange().get(Endpoint.class);
Message responseMsg = e.getBinding().createMessage();
- //server side inbound
-
message.getExchange().setOutMessage(responseMsg);
XMLStreamReader reader = message.getContent(XMLStreamReader.class);
if (reader == null && writer != null) {
@@ -91,9 +91,7 @@
.getOutInterceptorChain(message.getExchange());
responseMsg.setInterceptorChain(chain);
responseMsg.put("LogicalHandlerInterceptor.INREADER", reader);
- //so the idea of starting interceptor chain from any specified point does not work
- //well for outbound case, as many outbound interceptors have their ending interceptors.
- //For example, we can not skip MessageSenderInterceptor.
+
chain.doIntercept(responseMsg);
}
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerOutInterceptor.java?view=diff&rev=540898&r1=540897&r2=540898
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerOutInterceptor.java Wed May 23 02:19:09 2007
@@ -43,7 +43,9 @@
public class LogicalHandlerOutInterceptor<T extends Message>
extends AbstractJAXWSHandlerInterceptor<T> {
-
+
+ public static final String ORIGINAL_WRITER = "original_writer";
+
public LogicalHandlerOutInterceptor(Binding binding) {
super(binding);
setPhase(Phase.PRE_MARSHAL);
@@ -61,13 +63,11 @@
W3CDOMStreamWriter writer = new W3CDOMStreamWriter(XMLUtils.newDocument());
// Replace stax writer with DomStreamWriter
- message.setContent(XMLStreamWriter.class, writer);
-
-
+ message.setContent(XMLStreamWriter.class, writer);
+ message.put(ORIGINAL_WRITER, origWriter);
+
message.getInterceptorChain().add(new LogicalHandlerOutEndingInterceptor<T>(
- getBinding(),
- origWriter,
- writer));
+ getBinding()));
} catch (ParserConfigurationException e) {
throw new Fault(e);
}
@@ -77,20 +77,18 @@
private class LogicalHandlerOutEndingInterceptor<X extends Message>
extends AbstractJAXWSHandlerInterceptor<X> {
- XMLStreamWriter origWriter;
- W3CDOMStreamWriter domWriter;
-
- public LogicalHandlerOutEndingInterceptor(Binding binding,
- XMLStreamWriter o,
- W3CDOMStreamWriter n) {
+ public LogicalHandlerOutEndingInterceptor(Binding binding) {
super(binding);
- origWriter = o;
- domWriter = n;
-
+
setPhase(Phase.POST_MARSHAL);
}
public void handleMessage(X message) throws Fault {
+ W3CDOMStreamWriter domWriter = (W3CDOMStreamWriter)message.getContent(XMLStreamWriter.class);
+ XMLStreamWriter origWriter = (XMLStreamWriter)message
+ .get(LogicalHandlerOutInterceptor.ORIGINAL_WRITER);
+
+
HandlerChainInvoker invoker = getInvoker(message);
LogicalMessageContextImpl lctx = new LogicalMessageContextImpl(message);
invoker.setLogicalMessageContext(lctx);
@@ -107,8 +105,7 @@
message.setContent(Source.class, source);
message.setContent(XMLStreamReader.class,
StaxUtils.createXMLStreamReader(domWriter.getDocument()));
- }
-
+ }
if (!invoker.invokeLogicalHandlers(requestor, lctx)) {
if (requestor) {
@@ -121,19 +118,17 @@
.get(MessageObserver.class);
if (observer != null) {
//client side outbound, the request message becomes the response message
- responseMsg.setContent(XMLStreamReader.class,
- message.getContent(XMLStreamReader.class));
-
+ responseMsg.setContent(XMLStreamReader.class, message
+ .getContent(XMLStreamReader.class));
message.getExchange().setInMessage(responseMsg);
responseMsg.put(PhaseInterceptorChain.STARTING_AT_INTERCEPTOR_ID,
LogicalHandlerInInterceptor.class.getName());
observer.onMessage(responseMsg);
- //invoker.mepComplete(responseMsg);
}
} else {
// server side - abort
- System.out.println("Logical handler server side aborting");
+ //System.out.println("Logical handler server side aborting");
}
return;
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerFaultInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerFaultInInterceptor.java?view=diff&rev=540898&r1=540897&r2=540898
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerFaultInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerFaultInInterceptor.java Wed May 23 02:19:09 2007
@@ -103,7 +103,7 @@
// stops, but the inbound interceptor chain still continues, dispatch the message
//By onCompletion here, we can skip rest Logical handlers
onCompletion(message);
- System.out.println("SOAP Handler handleMessage returns false on client inbound, aborting");
+ //System.out.println("SOAP Handler handleMessage returns false on client inbound, aborting");
}
} else {
if (!getInvoker(message).isOutbound()) {
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java?view=diff&rev=540898&r1=540897&r2=540898
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java Wed May 23 02:19:09 2007
@@ -70,7 +70,7 @@
public Set<URI> getRoles() {
Set<URI> roles = new HashSet<URI>();
- // TODO
+ //TODO
return roles;
}
@@ -124,15 +124,6 @@
MessageContext context = createProtocolMessageContext(message);
HandlerChainInvoker invoker = getInvoker(message);
invoker.setProtocolMessageContext(context);
-
-/* if (!invoker.invokeProtocolHandlers(isRequestor(message), context)) {
- handleAbort(message, context);
- } else {
- //if message processing ends normally, close previously invoked handlers.
- if (isOutbound(message)) {
- onCompletion(message);
- }
- }*/
if (!invoker.invokeProtocolHandlers(isRequestor(message), context)) {
handleAbort(message, context);
@@ -175,11 +166,10 @@
// stops, but the inbound interceptor chain still continues, dispatch the message
//By onCompletion here, we can skip following Logical handlers
onCompletion(message);
- System.out.println("SOAP Handler handleMessage returns false on client inbound, aborting");
+ //System.out.println("SOAP Handler handleMessage returns false on client inbound, aborting");
}
} else {
if (!getInvoker(message).isOutbound()) {
-
// server side inbound
message.getInterceptorChain().abort();
Endpoint e = message.getExchange().get(Endpoint.class);
@@ -204,7 +194,7 @@
} else {
// server side outbound - Normal handler message processing
// stops, but still continue the outbound interceptor chain, dispatch the message
- System.out.println("SOAP Handler handleMessage returns false on server outbound, aborting");
+ //System.out.println("SOAP Handler handleMessage returns false on server outbound, aborting");
}
}
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java?view=diff&rev=540898&r1=540897&r2=540898
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java Wed May 23 02:19:09 2007
@@ -76,9 +76,7 @@
LogicalHandlerFaultOutInterceptor lh = new LogicalHandlerFaultOutInterceptor(binding);
fault.add(lh);
- //fault.add(new LogicalHandlerOutInterceptor(binding));
if (getBinding() instanceof SoapBinding) {
- //fault.add(soap);
SOAPHandlerFaultOutInterceptor sh = new SOAPHandlerFaultOutInterceptor(binding);
fault.add(sh);
}