You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ch...@apache.org on 2006/12/12 06:00:39 UTC
svn commit: r486025 -
/webservices/axis2/branches/java/WSDL_2_0/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java
Author: chinthaka
Date: Mon Dec 11 21:00:39 2006
New Revision: 486025
URL: http://svn.apache.org/viewvc?view=rev&rev=486025
Log:
Copying SOAP and HTTP Headers to the fault message context, from the processing context.
Modified:
webservices/axis2/branches/java/WSDL_2_0/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java
Modified: webservices/axis2/branches/java/WSDL_2_0/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/WSDL_2_0/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java?view=diff&rev=486025&r1=486024&r2=486025
==============================================================================
--- webservices/axis2/branches/java/WSDL_2_0/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java (original)
+++ webservices/axis2/branches/java/WSDL_2_0/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java Mon Dec 11 21:00:39 2006
@@ -19,24 +19,17 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
+import java.util.List;
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.soap.SOAP11Constants;
-import org.apache.axiom.soap.SOAP12Constants;
-import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAPFault;
-import org.apache.axiom.soap.SOAPFaultCode;
-import org.apache.axiom.soap.SOAPFaultDetail;
-import org.apache.axiom.soap.SOAPFaultNode;
-import org.apache.axiom.soap.SOAPFaultReason;
-import org.apache.axiom.soap.SOAPFaultRole;
-import org.apache.axiom.soap.SOAPProcessingException;
+import org.apache.axiom.soap.*;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
+import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.addressing.AddressingHelper;
import org.apache.axis2.addressing.EndpointReference;
@@ -54,7 +47,7 @@
import org.apache.axis2.wsdl.WSDLConstants;
public class MessageContextBuilder {
-
+
/**
* Creates a new 'response' message context based on a 'request' message context
* Only deals with properties/fields that are the same for both 'normal' and fault responses.
@@ -68,7 +61,7 @@
newmsgCtx.setTransportOut(inMessageContext.getTransportOut());
newmsgCtx.setMessageID(UUIDGenerator.getUUID());
newmsgCtx.addRelatesTo(new RelatesTo(inMessageContext.getOptions().getMessageId()));
-
+
newmsgCtx.setProperty(AddressingConstants.WS_ADDRESSING_VERSION,
inMessageContext.getProperty(AddressingConstants.WS_ADDRESSING_VERSION));
newmsgCtx.setProperty(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES,
@@ -80,28 +73,28 @@
newmsgCtx.setDoingREST(inMessageContext.isDoingREST());
newmsgCtx.setOperationContext(inMessageContext.getOperationContext());
-
+
ServiceContext serviceContext = inMessageContext.getServiceContext();
if (serviceContext != null) {
newmsgCtx.setServiceContext(serviceContext);
}
-
+
newmsgCtx.setProperty(MessageContext.TRANSPORT_OUT,
inMessageContext.getProperty(MessageContext.TRANSPORT_OUT));
newmsgCtx.setProperty(Constants.OUT_TRANSPORT_INFO,
inMessageContext.getProperty(Constants.OUT_TRANSPORT_INFO));
-
+
return newmsgCtx;
}
-
+
/**
* Creates a MessageContext for use with a non-fault response based on an request MessageContext
*/
public static MessageContext createOutMessageContext(MessageContext inMessageContext) throws AxisFault {
-
+
// Create a basic response MessageContext with basic fields copied
- MessageContext newmsgCtx = createResponseMessageContext(inMessageContext);
-
+ MessageContext newmsgCtx = createResponseMessageContext(inMessageContext);
+
// Simple response so set To to value of inbound ReplyTo
newmsgCtx.setTo(inMessageContext.getReplyTo());
@@ -120,18 +113,18 @@
Constants.SERVICE_GROUP_ID, Constants.AXIS2_NAMESPACE_PREFIX), serviceGroupContextId);
}
} else {
- newmsgCtx.setReplyTo(new EndpointReference(AddressingConstants.Final.WSA_NONE_URI));
+ newmsgCtx.setReplyTo(new EndpointReference(AddressingConstants.Final.WSA_NONE_URI));
}
-
+
// Set wsa:Action for response message
// Use specified value if available
AxisOperation ao = inMessageContext.getAxisOperation();
- if ((ao!=null) && (ao.getOutputAction() != null)) {
+ if ((ao != null) && (ao.getOutputAction() != null)) {
newmsgCtx.setWSAAction(ao.getOutputAction());
} else { // If not, simply copy the request value. Almost always invalid.
newmsgCtx.setWSAAction(inMessageContext.getWSAAction());
}
-
+
newmsgCtx.setAxisMessage(ao.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE));
newmsgCtx.setDoingMTOM(inMessageContext.isDoingMTOM());
@@ -140,7 +133,7 @@
// Ensure transport settings match the scheme for the To EPR
setupCorrectTransportOut(newmsgCtx);
-
+
return newmsgCtx;
}
@@ -158,27 +151,28 @@
// Create a basic response MessageContext with basic fields copied
MessageContext faultContext = createResponseMessageContext(processingContext);
-
+
// Register the fault message context
- if (processingContext.getAxisOperation() != null && processingContext.getOperationContext() != null) {
+ if (processingContext.getAxisOperation() != null && processingContext.getOperationContext() != null)
+ {
processingContext.getAxisOperation().addFaultMessageContext(faultContext, processingContext.getOperationContext());
}
faultContext.setProcessingFault(true);
faultContext.setServerSide(true);
-
+
// Not worth setting up the session information on a fault flow
faultContext.setReplyTo(new EndpointReference(AddressingConstants.Final.WSA_NONE_URI));
// Set wsa:Action for response message
// Use specified value if available
AxisOperation op = processingContext.getAxisOperation();
- if(op != null && op.getFaultAction()!=null){
+ if (op != null && op.getFaultAction() != null) {
faultContext.setWSAAction(op.getFaultAction());
- }else{ //If, for some reason there is no value set, should use a sensible action.
+ } else { //If, for some reason there is no value set, should use a sensible action.
faultContext.setWSAAction(Final.WSA_SOAP_FAULT_ACTION);
}
-
+
// there are some information that the fault thrower wants to pass to the fault path.
// Means that the fault is a ws-addressing one hence use the ws-addressing fault action.
Object faultInfoForHeaders = processingContext.getProperty(Constants.FAULT_INFORMATION_FOR_HEADERS);
@@ -196,7 +190,7 @@
} else {
faultContext.setTo(processingContext.getReplyTo());
}
-
+
// do Target Resolution
faultContext.getConfigurationContext().getAxisConfiguration().getTargetResolverChain().resolveTarget(faultContext);
@@ -206,14 +200,27 @@
SOAPEnvelope envelope = createFaultEnvelope(processingContext, e);
faultContext.setEnvelope(envelope);
+ //get the SOAP headers, user is trying to send in the fault
+ List soapHeadersList = (List) processingContext.getProperty(SOAPConstants.HEADER_LOCAL_NAME);
+ if (soapHeadersList != null) {
+ SOAPHeader soapHeaderElement = envelope.getHeader();
+ for (int i = 0; i < soapHeadersList.size(); i++) {
+ OMElement soapHeaderBlock = (OMElement) soapHeadersList.get(i);
+ soapHeaderElement.addChild(soapHeaderBlock);
+ }
+ }
+
+ // now add HTTP Headers
+ faultContext.setProperty(HTTPConstants.HTTP_HEADERS, processingContext.getProperty(HTTPConstants.HTTP_HEADERS));
+
return faultContext;
}
-
+
/**
* Ensure that if the scheme of the To EPR for the response is different than the
* transport used for the request that the correct TransportOut is available
*/
- private static void setupCorrectTransportOut(MessageContext context) throws AxisFault{
+ private static void setupCorrectTransportOut(MessageContext context) throws AxisFault {
// Determine that we have the correct transport available.
TransportOutDescription transportOut = context.getTransportOut();
@@ -240,7 +247,7 @@
throw new AxisFault(urise);
}
}
-
+
/**
* Information to create the SOAPFault can be extracted from different places.
* 1. Those information may have been put in to the message context by some handler. When someone
@@ -270,7 +277,6 @@
* -- EC
*
* @param context
- * @param fault
* @param e
*/
private static SOAPEnvelope createFaultEnvelope(MessageContext context, Throwable e) {
@@ -283,7 +289,7 @@
envelope = OMAbstractFactory.getSOAP12Factory().getDefaultFaultEnvelope();
}
SOAPFault fault = envelope.getBody().getFault();
-
+
SOAPProcessingException soapException = null;
AxisFault axisFault = null;
@@ -319,7 +325,8 @@
} else if (axisFault != null) {
Map faultElementsMap = axisFault.getFaultElements();
- if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME) != null) {
+ if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME) != null)
+ {
fault.setCode((SOAPFaultCode) faultElementsMap.get(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME));
} else {
QName faultCodeQName = axisFault.getFaultCode();
@@ -356,7 +363,8 @@
message = soapException.getMessage();
} else if (axisFault != null) {
Map faultElementsMap = axisFault.getFaultElements();
- if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME) != null) {
+ if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME) != null)
+ {
fault.setReason((SOAPFaultReason) faultElementsMap.get(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME));
} else {
message = axisFault.getReason();
@@ -381,7 +389,8 @@
fault.getRole().setText((String) faultRole);
} else if (axisFault != null) {
Map faultElementsMap = axisFault.getFaultElements();
- if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_ROLE_LOCAL_NAME) != null) {
+ if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_ROLE_LOCAL_NAME) != null)
+ {
fault.setRole((SOAPFaultRole) faultElementsMap.get(SOAP12Constants.SOAP_FAULT_ROLE_LOCAL_NAME));
}
}
@@ -391,7 +400,8 @@
fault.getNode().setText((String) faultNode);
} else if (axisFault != null) {
Map faultElementsMap = axisFault.getFaultElements();
- if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_NODE_LOCAL_NAME) != null) {
+ if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_NODE_LOCAL_NAME) != null)
+ {
fault.setNode((SOAPFaultNode) faultElementsMap.get(SOAP12Constants.SOAP_FAULT_NODE_LOCAL_NAME));
}
}
@@ -401,14 +411,14 @@
boolean sendStacktraceDetailsWithFaults = false;
OperationContext oc = context.getOperationContext();
Object flagFromContext = null;
- if(oc!=null){
+ if (oc != null) {
flagFromContext = context.getOperationContext().getProperty(Constants.Configuration.SEND_STACKTRACE_DETAILS_WITH_FAULTS);
}
- if(flagFromContext!=null){
+ if (flagFromContext != null) {
sendStacktraceDetailsWithFaults = JavaUtils.isTrue(flagFromContext);
- }else{
+ } else {
Parameter param = context.getParameter(Constants.Configuration.SEND_STACKTRACE_DETAILS_WITH_FAULTS);
- sendStacktraceDetailsWithFaults = JavaUtils.isTrue(param.getValue());
+ sendStacktraceDetailsWithFaults = JavaUtils.isTrue(param.getValue());
}
Object faultDetail = context.getProperty(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME);
@@ -416,7 +426,8 @@
fault.setDetail((SOAPFaultDetail) faultDetail);
} else if (axisFault != null) {
Map faultElementsMap = axisFault.getFaultElements();
- if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME) != null) {
+ if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME) != null)
+ {
fault.setDetail((SOAPFaultDetail) faultElementsMap.get(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME));
} else {
OMElement detail = axisFault.getDetail();
@@ -436,7 +447,7 @@
return envelope;
}
-
+
/**
* By the time the exception comes here it can be wrapped by so many levels. This will crip down
* to the root cause and get the initial error depending on the property
@@ -454,7 +465,7 @@
}
return throwable.getMessage();
}
-
+
private static String getSenderFaultCode(OMNamespace soapNamespace) {
return SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(soapNamespace.getNamespaceURI())
? SOAP12Constants.SOAP_DEFAULT_NAMESPACE_PREFIX + ":"
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org