[jboss-svn-commits] JBL Code SVN: r14302 - in labs/jbossesb/trunk/product/rosetta: src/org/jboss/internal/soa/esb/message/format/serialized and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Aug 16 07:51:39 EDT 2007


Author: mark.little at jboss.com
Date: 2007-08-16 07:51:39 -0400 (Thu, 16 Aug 2007)
New Revision: 14302

Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/FileCourier.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/JmsCourier.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/SqlTableCourier.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/FaultImpl.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/FaultImpl.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/couriers/FaultMessageException.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/errors/Factory.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/Fault.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/FileCourierUnitTest.java
Log:
http://jira.jboss.com/jira/browse/JBESB-829

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/FileCourier.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/FileCourier.java	2007-08-16 10:35:19 UTC (rev 14301)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/FileCourier.java	2007-08-16 11:51:39 UTC (rev 14302)
@@ -45,7 +45,7 @@
 import org.jboss.soa.esb.couriers.CourierException;
 import org.jboss.soa.esb.couriers.CourierTimeoutException;
 import org.jboss.soa.esb.couriers.CourierUtil;
-import org.jboss.soa.esb.couriers.FaultMessageException;
+import org.jboss.soa.esb.listeners.message.errors.Factory;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.message.util.Type;
 import org.jboss.soa.esb.util.FileUtil;
@@ -300,7 +300,7 @@
 				 */
 				
 				if (Type.isFaultMessage(result))
-				    throw new FaultMessageException(result.getFault().getReason(), result.getFault().getCode(), result);
+				    Factory.createExceptionFromFault(result);
 				
 				return result;
 			}

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/JmsCourier.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/JmsCourier.java	2007-08-16 10:35:19 UTC (rev 14301)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/JmsCourier.java	2007-08-16 11:51:39 UTC (rev 14302)
@@ -53,6 +53,7 @@
 import org.jboss.soa.esb.couriers.FaultMessageException;
 import org.jboss.soa.esb.helpers.KeyValuePair;
 import org.jboss.soa.esb.helpers.NamingContext;
+import org.jboss.soa.esb.listeners.message.errors.Factory;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.message.util.Type;
 import org.jboss.soa.esb.util.Util;
@@ -364,8 +365,8 @@
 			 * exception of user-defined exceptions, faults will have nothing in the body, properties etc.
 			 */
 			
-			if (Type.isFaultMessage(msg))
-			    throw new FaultMessageException(msg.getFault().getReason(), msg.getFault().getCode(), msg);
+    			if (Type.isFaultMessage(msg))
+				    Factory.createExceptionFromFault(msg);
 			
     			return msg;
     		}

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/SqlTableCourier.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/SqlTableCourier.java	2007-08-16 10:35:19 UTC (rev 14301)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/couriers/SqlTableCourier.java	2007-08-16 11:51:39 UTC (rev 14302)
@@ -39,6 +39,7 @@
 import org.jboss.soa.esb.couriers.FaultMessageException;
 import org.jboss.soa.esb.helpers.persist.JdbcCleanConn;
 import org.jboss.soa.esb.helpers.persist.SimpleDataSource;
+import org.jboss.soa.esb.listeners.message.errors.Factory;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.message.util.Type;
 import org.jboss.soa.esb.util.Util;
@@ -212,7 +213,7 @@
 					 */
 					
 					if (Type.isFaultMessage(result))
-					    throw new FaultMessageException(result.getFault().getReason(), result.getFault().getCode(), result);
+					    Factory.createExceptionFromFault(result);
 					
 					return result;
 				}

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/FaultImpl.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/FaultImpl.java	2007-08-16 10:35:19 UTC (rev 14301)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/FaultImpl.java	2007-08-16 11:51:39 UTC (rev 14302)
@@ -72,12 +72,26 @@
 		_body.add(FAULT_REASON, reason);
 	}
 	
+	public Throwable getCause ()
+	{
+		return (Throwable) _body.get(THROWABLE_CONTENT);
+	}
+	
+	public void setCause (Throwable ex)
+	{
+		if (ex == null)
+			_body.remove(THROWABLE_CONTENT);
+		else
+			_body.add(THROWABLE_CONTENT, ex);
+	}
+	
 	public String toString ()
 	{
 		URI code = getCode();
 		String reason = getReason();
+		Throwable cause = getCause();
 		
-		return "fault: [ "+((code != null) ? code : "null")+", "+((reason != null) ? reason : "null")+" ]";
+		return "fault: [ "+((code != null) ? code : "null")+", "+((reason != null) ? reason : "null")+", "+((cause != null) ? cause : "null")+" ]";
 	}
 	
 	public void writeExternal (ObjectOutput out) throws IOException

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/FaultImpl.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/FaultImpl.java	2007-08-16 10:35:19 UTC (rev 14301)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/FaultImpl.java	2007-08-16 11:51:39 UTC (rev 14302)
@@ -64,93 +64,35 @@
 		_body.add(FAULT_REASON, reason);
 	}
 
+	public Throwable getCause ()
+	{
+		return (Throwable) _body.get(THROWABLE_CONTENT);
+	}
+	
+	public void setCause (Throwable ex)
+	{
+		if (ex == null)
+			_body.remove(THROWABLE_CONTENT);
+		else
+			_body.add(THROWABLE_CONTENT, ex);
+	}
+	
 	public String toString ()
 	{
 		URI code = getCode();
 		String reason = getReason();
+		Throwable cause = getCause();
 		
-		return "fault: [ "+((code != null) ? code : "null")+", "+((reason != null) ? reason : "null")+" ]";
+		return "fault: [ "+((code != null) ? code : "null")+", "+((reason != null) ? reason : "null")+", "+((cause != null) ? cause : "null")+" ]";
 	}
 	
 	public Element toXML(Element envelope) throws MarshalException
 	{
 		return envelope;
-		
-		/*
-		Document doc = envelope.getOwnerDocument();
-		Element faultElement = doc.createElement(FAULT_TAG);
-
-		if (_code != null)
-		{
-			Element codeElement = doc.createElement(CODE_TAG);
-			Text content = doc.createTextNode(_code.toString());
-			
-			codeElement.appendChild(content);
-			
-			faultElement.appendChild(codeElement);
-		}
-
-		if (_reason != null)
-		{
-			Element reasonElement = doc.createElement(REASON_TAG);
-			Text content = doc.createTextNode(_reason);
-			
-			reasonElement.appendChild(content);
-
-			faultElement.appendChild(reasonElement);
-		}
-
-		if ((_code != null) || (_reason != null))
-		{
-			envelope.appendChild(faultElement);
-			
-			return faultElement;
-		}
-		else
-			return envelope;
-			*/
 	}
 
 	public void fromXML (Element envelope) throws UnmarshalException
 	{
-		/*
-		NodeList nl = envelope.getChildNodes();
-
-		_code = null;
-		_reason = null;
-		
-		for (int i = 0; i < nl.getLength(); i++)
-		{
-			if (nl.item(i).getNodeName().equals(FAULT_TAG))
-			{
-				NodeList children = nl.item(i).getChildNodes();
-
-				for (int j = 0; j < children.getLength(); j++)
-				{
-                                        final Node node = children.item(j) ;
-                                        if (node instanceof Element)
-                                        {
-        					Element child = (Element)node;
-        
-        					if (child.getNodeName().equals(CODE_TAG))
-        					{
-        						try
-        						{
-        							_code = new URI(child.getFirstChild().getNodeValue());
-        						}
-        						catch (Exception ex)
-        						{
-        							ex.printStackTrace();
-        						}
-        					}
-        
-        					if (child.getNodeName().equals(REASON_TAG))
-        						_reason = child.getFirstChild().getNodeValue();
-                                        }
-				}
-			}
-		}
-		*/
 	}
 
 	FaultImpl (BodyImpl body)

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/couriers/FaultMessageException.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/couriers/FaultMessageException.java	2007-08-16 10:35:19 UTC (rev 14301)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/couriers/FaultMessageException.java	2007-08-16 11:51:39 UTC (rev 14302)
@@ -52,7 +52,15 @@
 		_code = code;
 		_msg = msg;
 	}
+	
+	public FaultMessageException(String message, URI code, Message msg, Throwable cause)
+	{
+		super(message, cause);
 
+		_code = code;
+		_msg = msg;
+	}
+
 	public final URI getCode()
 	{
 		return _code;

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/errors/Factory.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/errors/Factory.java	2007-08-16 10:35:19 UTC (rev 14301)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/errors/Factory.java	2007-08-16 11:51:39 UTC (rev 14302)
@@ -24,6 +24,8 @@
 
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.addressing.EPR;
+import org.jboss.soa.esb.couriers.FaultMessageException;
+import org.jboss.soa.esb.message.Fault;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.message.format.MessageFactory;
 
@@ -35,6 +37,18 @@
 	public static final String UNEXPECTED_ERROR = "urn:action/error/unexpectederror";
 	public static final String NOT_ENABLED = "urn:action/error/disabled";
 	
+	public static void createExceptionFromFault (Message msg) throws FaultMessageException
+	{
+		String reason = msg.getFault().getReason();
+		URI code = msg.getFault().getCode();
+		Throwable cause = msg.getFault().getCause();
+		
+		if (cause == null)
+			throw new FaultMessageException(reason, code, msg);
+		else
+			throw new FaultMessageException(reason, code, msg, cause);
+	}
+	
 	public static Message createErrorMessage (String type, Message input, Throwable problem)
 	{
 		if (input == null)
@@ -46,7 +60,9 @@
 			throw new IllegalArgumentException("Could not create error message from "+input.getType());
 		
 		if (modifyMessage(input, errorMessage))
-		{			
+		{
+			errorMessage.getBody().add(Fault.THROWABLE_CONTENT, problem);
+			
 			try
 			{
 				errorMessage.getFault().setCode(new URI(type));

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/Fault.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/Fault.java	2007-08-16 10:35:19 UTC (rev 14301)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/message/Fault.java	2007-08-16 11:51:39 UTC (rev 14302)
@@ -25,14 +25,14 @@
 
 /**
  * Faults may be returned from a service in response to receiving and acting upon messages.
- * A fault consists of a unique code (MANDATORY) and a reason string (OPTIONAL).
- * 
- * TODO this should really just be a type of Message, with well defined entry points in
- * the message body for fault code and reason.
+ * A fault consists of a unique code (MANDATORY) and a reason string (OPTIONAL). An OPTIONAL
+ * throwable may also be returned.
  */
 
 public interface Fault
 {
+	public static final String THROWABLE_CONTENT = "org.jboss.soa.esb.message.fault.throwable";
+	
 	/**
 	 * @return the unique code representing this fault.
 	 */
@@ -61,4 +61,21 @@
 	 */
 	
 	public void setReason (String reason);
+	
+	/**
+	 * Get the original Throwable. May be null, e.g., if the problem resulted
+	 * from a non-Java environment.
+	 * 
+	 * @return the throwable.
+	 */
+	
+	public Throwable getCause ();
+	
+	/**
+	 * Set the original Throwable.
+	 * 
+	 * @param ex the throwable.
+	 */
+	
+	public void setCause (Throwable ex);
 }
\ No newline at end of file

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/FileCourierUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/FileCourierUnitTest.java	2007-08-16 10:35:19 UTC (rev 14301)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/couriers/tests/FileCourierUnitTest.java	2007-08-16 11:51:39 UTC (rev 14302)
@@ -24,6 +24,7 @@
 
 import java.io.File;
 import java.io.FileFilter;
+import java.io.IOException;
 import java.io.PrintStream;
 import java.net.URI;
 import java.util.UUID;
@@ -169,6 +170,7 @@
 		
 		msg.getFault().setReason(errorMessage);
 		msg.getFault().setCode(code);
+		msg.getFault().setCause(new IOException());
 
 		Call call = new Call(toEpr);
 		String uid = UUID.randomUUID().toString();
@@ -197,6 +199,10 @@
 		{
 		    Assert.assertEquals(ex.getMessage(), errorMessage);
 		    Assert.assertEquals(ex.getCode(), code);
+		    
+		    System.err.println("**got "+ex.getCause());
+		    
+		    Assert.assertEquals(ex.getCause() instanceof IOException, true);
 		}
 		catch (CourierException ex)
 		{




More information about the jboss-svn-commits mailing list