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 ch...@apache.org on 2006/02/15 11:01:44 UTC

svn commit: r377974 - in /webservices/axis2/trunk/java/modules: addressing/src/org/apache/axis2/handlers/addressing/ addressing/test/org/apache/axis2/handlers/addressing/ core/src/org/apache/axis2/ core/src/org/apache/axis2/addressing/ core/src/org/apa...

Author: chinthaka
Date: Wed Feb 15 02:01:42 2006
New Revision: 377974

URL: http://svn.apache.org/viewcvs?rev=377974&view=rev
Log:
- adding method to add fault messages to the operation context. I'm not sure the given solution is perfect or not.
- Added code to check for duplicate headers

Modified:
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java
    webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingInHandlerTest.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/Constants.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisOperation.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/InOnlyAxisOperation.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/InOutAxisOperation.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/OutOnlyAxisOperation.java
    webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java
    webservices/axis2/trunk/java/modules/wsdl/src/org/apache/wsdl/WSDLConstants.java

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java?rev=377974&r1=377973&r2=377974&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java Wed Feb 15 02:01:42 2006
@@ -41,7 +41,7 @@
 import java.util.Iterator;
 import java.util.Map;
 
-public abstract class AddressingInHandler extends AddressingHandler {
+public abstract class AddressingInHandler extends AddressingHandler implements AddressingConstants {
 
     private static final long serialVersionUID = 3907988439637261572L;
 
@@ -63,7 +63,7 @@
                 msgContext.setProperty(WS_ADDRESSING_VERSION, addressingNamespace);
 
                 logger.debug(addressingVersion + " Headers present in the SOAP message. Starting to process ...");
-                extractAddressingInformation(header, msgContext.getOptions(),
+                extractAddressingInformation(header, msgContext,
                         addressingHeaders, addressingNamespace);
             } else {
                 logger.debug("No Headers present corresponding to " + addressingVersion);
@@ -79,37 +79,57 @@
 
     }
 
-    protected Options extractAddressingInformation(SOAPHeader header, Options messageContextOptions,
+    protected Options extractAddressingInformation(SOAPHeader header, MessageContext messageContext,
                                                    ArrayList addressingHeaders, String addressingNamespace)
             throws AddressingException {
 
-        Map alreadyFoundAddrHeader = new HashMap(7); // its seven, coz frequently used 
+        Options messageContextOptions = messageContext.getOptions();
+        Map alreadyFoundAddrHeader = new HashMap(7); // there are seven frequently used WS-A headers
 
         Iterator addressingHeadersIt = addressingHeaders.iterator();
         while (addressingHeadersIt.hasNext()) {
             SOAPHeaderBlock soapHeaderBlock = (SOAPHeaderBlock) addressingHeadersIt.next();
             EndpointReference epr;
-            if (AddressingConstants.WSA_TO.equals(soapHeaderBlock.getLocalName())) {
+            if (WSA_TO.equals(soapHeaderBlock.getLocalName())) {
+                checkForDuplicateHeaders(WSA_TO, messageContext, alreadyFoundAddrHeader);
                 extractToEPRInformation(soapHeaderBlock, messageContextOptions, header);
-            } else if (AddressingConstants.WSA_FROM.equals(soapHeaderBlock.getLocalName())) {
+            } else if (WSA_FROM.equals(soapHeaderBlock.getLocalName())) {
+                checkForDuplicateHeaders(WSA_FROM, messageContext, alreadyFoundAddrHeader);
                 extractFromEPRInformation(messageContextOptions, soapHeaderBlock, addressingNamespace);
-            } else if (AddressingConstants.WSA_REPLY_TO.equals(soapHeaderBlock.getLocalName())) {
+            } else if (WSA_REPLY_TO.equals(soapHeaderBlock.getLocalName())) {
+                checkForDuplicateHeaders(WSA_REPLY_TO, messageContext, alreadyFoundAddrHeader);
                 extractReplyToEPRInformation(messageContextOptions, soapHeaderBlock, addressingNamespace);
-            } else if (AddressingConstants.WSA_FAULT_TO.equals(soapHeaderBlock.getLocalName())) {
+            } else if (WSA_FAULT_TO.equals(soapHeaderBlock.getLocalName())) {
+                checkForDuplicateHeaders(WSA_FAULT_TO, messageContext, alreadyFoundAddrHeader);
+
                 extractFaultToEPRInformation(messageContextOptions, soapHeaderBlock, addressingNamespace);
-            } else if (AddressingConstants.WSA_MESSAGE_ID.equals(soapHeaderBlock.getLocalName())) {
+            } else if (WSA_MESSAGE_ID.equals(soapHeaderBlock.getLocalName())) {
                 messageContextOptions.setMessageId(soapHeaderBlock.getText());
                 soapHeaderBlock.setProcessed();
-            } else if (AddressingConstants.WSA_ACTION.equals(soapHeaderBlock.getLocalName())) {
+            } else if (WSA_ACTION.equals(soapHeaderBlock.getLocalName())) {
                 messageContextOptions.setAction(soapHeaderBlock.getText());
                 soapHeaderBlock.setProcessed();
-            } else if (AddressingConstants.WSA_RELATES_TO.equals(soapHeaderBlock.getLocalName())) {
+            } else if (WSA_RELATES_TO.equals(soapHeaderBlock.getLocalName())) {
+                checkForDuplicateHeaders(WSA_RELATES_TO, messageContext, alreadyFoundAddrHeader);
                 extractRelatesToInformation(soapHeaderBlock, addressingNamespace, messageContextOptions);
             }
         }
         return messageContextOptions;
     }
 
+    private void checkForDuplicateHeaders(String addressingHeaderName, MessageContext messageContext, Map alreadyFoundAddressingHeaders) {
+        if (alreadyFoundAddressingHeaders.get(addressingHeaderName) != null) {
+            Map faultInformation = (Map) messageContext.getProperty(Constants.FAULT_INFORMATION_FOR_HEADERS);
+            if (faultInformation == null) {
+                faultInformation = new HashMap();
+                messageContext.setProperty(Constants.FAULT_INFORMATION_FOR_HEADERS, faultInformation);
+            }
+            faultInformation.put(Final.FAULT_HEADER_PROB_HEADER_QNAME, "wsa:" + addressingHeaderName);
+        } else {
+            alreadyFoundAddressingHeaders.put(addressingHeaderName, addressingHeaderName);
+        }
+    }
+
     protected abstract void extractToEprReferenceParameters(EndpointReference toEPR, SOAPHeader header);
 
     private void extractServiceGroupContextId(SOAPHeader header, MessageContext msgContext) throws AxisFault {
@@ -192,6 +212,7 @@
     }
 
     private void extractToEPRInformation(SOAPHeaderBlock soapHeaderBlock, Options messageContextOptions, SOAPHeader header) {
+
         EndpointReference epr;
         //here the addressing epr overidde what ever already there in the message context
         epr = new EndpointReference(soapHeaderBlock.getText());
@@ -200,6 +221,7 @@
         // check for reference parameters
         extractToEprReferenceParameters(epr, header);
         soapHeaderBlock.setProcessed();
+
     }
 
     /**

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java?rev=377974&r1=377973&r2=377974&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java Wed Feb 15 02:01:42 2006
@@ -129,10 +129,25 @@
         // processing WSA RelatesTo
         processRelatesTo(envelope, messageContextOptions);
 
+        // process fault headers, if present
+        processFaultsInfoIfPresent(envelope, msgContext);
+
         // We are done, cleanup the references
         addressingNamespaceObject = null;
         addressingNamespace = null;
 
+    }
+
+    private void processFaultsInfoIfPresent(SOAPEnvelope envelope, MessageContext msgContext) {
+        Map faultInfo = (Map) msgContext.getProperty(Constants.FAULT_INFORMATION_FOR_HEADERS);
+        if (faultInfo != null) {
+            String faultyHeaderQName = (String) faultInfo.get(Final.FAULT_HEADER_PROB_HEADER_QNAME);
+            if (faultyHeaderQName != null && "".equals(faultyHeaderQName)) {
+                SOAPHeaderBlock faultDetail = envelope.getHeader().addHeaderBlock(Final.FAULT_HEADER_DETAIL, addressingNamespaceObject);
+                OMElement probHeaderQName = OMAbstractFactory.getOMFactory().createOMElement(Final.FAULT_HEADER_PROB_HEADER_QNAME, addressingNamespaceObject, faultDetail);
+                probHeaderQName.setText(faultyHeaderQName);
+            }
+        }
     }
 
     private void processRelatesTo(SOAPEnvelope envelope, Options messageContextOptions) {

Modified: webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingInHandlerTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingInHandlerTest.java?rev=377974&r1=377973&r2=377974&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingInHandlerTest.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingInHandlerTest.java Wed Feb 15 02:01:42 2006
@@ -20,6 +20,7 @@
 import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.Options;
+import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.handlers.util.TestUtil;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -62,7 +63,7 @@
             SOAPHeader header = ((SOAPEnvelope) omBuilder.getDocumentElement()).getHeader();
             Options options =
                     inHandler.extractAddressingInformation(header,
-                            new Options(),
+                            new MessageContext(),
                             header.getHeaderBlocksWithNSURI(
                                     AddressingConstants.Submission.WSA_NAMESPACE),
                             AddressingConstants.Submission.WSA_NAMESPACE);
@@ -101,7 +102,7 @@
             SOAPHeader header = ((SOAPEnvelope) omBuilder.getDocumentElement()).getHeader();
             Options options =
                     inHandler.extractAddressingInformation(header,
-                            new Options(),
+                            new MessageContext(),
                             header.getHeaderBlocksWithNSURI(
                                     AddressingConstants.Final.WSA_NAMESPACE),
                             AddressingConstants.Final.WSA_NAMESPACE);

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/Constants.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/Constants.java?rev=377974&r1=377973&r2=377974&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/Constants.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/Constants.java Wed Feb 15 02:01:42 2006
@@ -173,12 +173,7 @@
     public static final String LOGGED = "Logged";
     public static final String CONTAINER_MANAGED = "ContainerManaged";
 
-    public static final String ADDRESSING_TO = "WS-Addressing:To";
-    public static final String ADDRESSING_REPLY_TO = "WS-Addressing:ReplyTo";
-    public static final String ADDRESSING_RELATES_TO = "WS-Addressing:RelatesTo";
-    public static final String ADDRESSING_MESSAGE_ID = "WS-Addressing:MessageId";
-    public static final String ADDRESSING_FROM = "WS-Addressing:From";
-    public static final String ADDRESSING_FAULT_TO = "WS-Addressing:FaultTo";
+    public static final String FAULT_INFORMATION_FOR_HEADERS = "FaultHeaders";
 
     //to set and get the property from service context
     public static final String COOKIE_STRING = "Cookie";

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java?rev=377974&r1=377973&r2=377974&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/addressing/AddressingConstants.java Wed Feb 15 02:01:42 2006
@@ -62,6 +62,10 @@
         public static final String WSA_METADATA = "Metadata";
 
         public static final String WSA_INTERFACE_NAME = "InterfaceName";
+
+        // fault information
+        public static final String FAULT_HEADER_PROB_HEADER_QNAME = "ProblemHeaderQName";
+        public static final String FAULT_HEADER_DETAIL = "FaultDetail";
     }
 
 

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisOperation.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisOperation.java?rev=377974&r1=377973&r2=377974&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisOperation.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/AxisOperation.java Wed Feb 15 02:01:42 2006
@@ -79,6 +79,8 @@
      */
     public abstract void addMessageContext(MessageContext msgContext, OperationContext opContext)
             throws AxisFault;
+    public abstract void addFaultMessageContext(MessageContext msgContext, OperationContext opContext)
+            throws AxisFault;
 
     public void addModule(QName moduleName) {
         modulerefs.add(moduleName);

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/InOnlyAxisOperation.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/InOnlyAxisOperation.java?rev=377974&r1=377973&r2=377974&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/InOnlyAxisOperation.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/InOnlyAxisOperation.java Wed Feb 15 02:01:42 2006
@@ -7,6 +7,7 @@
 
 import javax.xml.namespace.QName;
 import java.util.ArrayList;
+import java.util.HashMap;
 
 /**
  * Author: Deepal Jayasinghe
@@ -36,7 +37,7 @@
     public void addMessage(AxisMessage message, String label) {
         if (WSDLConstants.MESSAGE_LABEL_IN_VALUE.equals(label)) {
 //            inMessage = message;
-        	addChild("inMessage", message);
+            addChild("inMessage", message);
         } else {
             throw new UnsupportedOperationException("Not yet implemented");
         }
@@ -52,13 +53,26 @@
         }
     }
 
+    public void addFaultMessageContext(MessageContext msgContext, OperationContext opContext) throws AxisFault {
+        HashMap mep = opContext.getMessageContexts();
+        MessageContext faultMessageCtxt = (MessageContext) mep.get(MESSAGE_LABEL_FAULT_VALUE);
+
+        if (faultMessageCtxt != null) {
+            throw new AxisFault("Invalid message addition , operation context completed");
+        } else {
+            mep.put(MESSAGE_LABEL_FAULT_VALUE, msgContext);
+            opContext.setComplete(true);
+            opContext.cleanup();
+        }
+    }
+
     private void createMessage() {
 //        inMessage = new AxisMessage();
 //        inMessage.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_IN);
 //        inMessage.setParent(this);
-    	AxisMessage inMessage = new AxisMessage();
-    	inMessage.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_IN);
-    	inMessage.setParent(this);
+        AxisMessage inMessage = new AxisMessage();
+        inMessage.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_IN);
+        inMessage.setParent(this);
 
         inFaultMessage = new AxisMessage();
         inFaultMessage.setParent(this);
@@ -67,14 +81,14 @@
         outFaultMessage.setParent(this);
 
         outPhase = new ArrayList();
-        
+
         addChild("inMessage", inMessage);
     }
 
     public AxisMessage getMessage(String label) {
         if (WSDLConstants.MESSAGE_LABEL_IN_VALUE.equals(label)) {
 //            return inMessage;
-        	return (AxisMessage) getChild("inMessage");
+            return (AxisMessage) getChild("inMessage");
         } else {
             throw new UnsupportedOperationException("In valid acess");
         }

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/InOutAxisOperation.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/InOutAxisOperation.java?rev=377974&r1=377973&r2=377974&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/InOutAxisOperation.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/InOutAxisOperation.java Wed Feb 15 02:01:42 2006
@@ -32,11 +32,11 @@
 
     public void addMessage(AxisMessage message, String label) {
         if (WSDLConstants.MESSAGE_LABEL_OUT_VALUE.equals(label)) {
-//            outMessage = message;
-        	addChild("outMessage", message);
+            addChild("outMessage", message);
         } else if (WSDLConstants.MESSAGE_LABEL_IN_VALUE.equals(label)) {
-//            inMessage = message;
-        	addChild("inMessage", message);
+            addChild("inMessage", message);
+        } else if (WSDLConstants.MESSAGE_LABEL_FAULT_VALUE.equals(label)) {
+            addChild("faultMessage", message);
         } else {
             throw new UnsupportedOperationException("Not yet implemented");
         }
@@ -61,32 +61,46 @@
         }
     }
 
+    public void addFaultMessageContext(MessageContext msgContext, OperationContext opContext) throws AxisFault {
+        HashMap mep = opContext.getMessageContexts();
+        MessageContext faultMessageCtxt = (MessageContext) mep.get(MESSAGE_LABEL_FAULT_VALUE);
+
+        if (faultMessageCtxt != null) {
+            throw new AxisFault("Invalid message addition , operation context completed");
+        } else {
+            mep.put(MESSAGE_LABEL_FAULT_VALUE, msgContext);
+            opContext.setComplete(true);
+            opContext.cleanup();
+        }
+
+    }
+
     private void createMessages() {
 //        inMessage = new AxisMessage();
 //        inMessage.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_IN);
 //        inMessage.setParent(this);
-        
+
         AxisMessage inMessage = new AxisMessage();
         inMessage.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_IN);
         inMessage.setParent(this);
         addChild("inMessage", inMessage);
-        
+
         inFaultMessage = new AxisMessage();
         inFaultMessage.setParent(this);
-        
+
         outFaultMessage = new AxisMessage();
         outFaultMessage.setParent(this);
-        
+
 //        outMessage = new AxisMessage();
 //        outMessage.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_OUT);
 //        outMessage.setParent(this);
-        
+
         AxisMessage outMessage = new AxisMessage();
         outMessage.setDirection(WSDLConstants.WSDL_MESSAGE_DIRECTION_OUT);
         outMessage.setParent(this);
         addChild("outMessage", outMessage);
-      
-        
+
+
     }
 
     public AxisMessage getMessage(String label) {
@@ -124,10 +138,10 @@
     }
 
     public void setPhasesOutFlow(ArrayList list) {
-    	((AxisMessage) getChild("outMessage")).setMessageFlow(list);
+        ((AxisMessage) getChild("outMessage")).setMessageFlow(list);
     }
 
     public void setRemainingPhasesInFlow(ArrayList list) {
-    	((AxisMessage) getChild("inMessage")).setMessageFlow(list);
+        ((AxisMessage) getChild("inMessage")).setMessageFlow(list);
     }
 }

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/OutOnlyAxisOperation.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/OutOnlyAxisOperation.java?rev=377974&r1=377973&r2=377974&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/OutOnlyAxisOperation.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/description/OutOnlyAxisOperation.java Wed Feb 15 02:01:42 2006
@@ -17,6 +17,7 @@
 
 import javax.xml.namespace.QName;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
@@ -59,6 +60,19 @@
         } else {
             throw new AxisFault(
                     "Invalid message addition , operation context completed");
+        }
+    }
+
+    public void addFaultMessageContext(MessageContext msgContext, OperationContext opContext) throws AxisFault {
+        HashMap mep = opContext.getMessageContexts();
+        MessageContext faultMessageCtxt = (MessageContext) mep.get(MESSAGE_LABEL_FAULT_VALUE);
+
+        if (faultMessageCtxt != null) {
+            throw new AxisFault("Invalid message addition , operation context completed");
+        } else {
+            mep.put(MESSAGE_LABEL_FAULT_VALUE, msgContext);
+            opContext.setComplete(true);
+            opContext.cleanup();
         }
     }
 

Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java?rev=377974&r1=377973&r2=377974&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/AxisEngine.java Wed Feb 15 02:01:42 2006
@@ -141,7 +141,19 @@
         faultContext.setTransportIn(processingContext.getTransportIn());
         faultContext.setTransportOut(processingContext.getTransportOut());
 
+        // register the fault message context
+        if (processingContext.getAxisOperation() != null && processingContext.getOperationContext() != null){
+            processingContext.getAxisOperation().addFaultMessageContext(faultContext, processingContext.getOperationContext());
+        }
+
         faultContext.setProcessingFault(true);
+
+        // there are some information  that the fault thrower wants to pass to the fault path.
+        Object faultInfoForHeaders = processingContext.getProperty(Constants.FAULT_INFORMATION_FOR_HEADERS);
+        if (faultInfoForHeaders != null) {
+            faultContext.setProperty(Constants.FAULT_INFORMATION_FOR_HEADERS, faultInfoForHeaders);
+        }
+
         EndpointReference faultTo = processingContext.getFaultTo();
         if (faultTo != null) {
             faultContext.setFaultTo(processingContext.getFaultTo());
@@ -300,6 +312,7 @@
                 fault.setException(new Exception(e));
             }
         }
+
 
     }
 

Modified: webservices/axis2/trunk/java/modules/wsdl/src/org/apache/wsdl/WSDLConstants.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/wsdl/src/org/apache/wsdl/WSDLConstants.java?rev=377974&r1=377973&r2=377974&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/wsdl/src/org/apache/wsdl/WSDLConstants.java (original)
+++ webservices/axis2/trunk/java/modules/wsdl/src/org/apache/wsdl/WSDLConstants.java Wed Feb 15 02:01:42 2006
@@ -116,6 +116,7 @@
     public static final byte MESSAGE_LABEL_IN = 0;
 
     public static final String MESSAGE_LABEL_IN_VALUE = "In";
+    public static final String MESSAGE_LABEL_FAULT_VALUE = "Fault";
 
     /**
      * Constant to represent the message label "Out" which is used by the