QPIDIT-89: Write single line to stderr on failure for better detection

Distinguish between 'not supported' and 'cannot decode' decimal types.
Throw only one error type.
diff --git a/shims/amqpnetlite/src/amqp_types_test/Receiver/Receiver.cs b/shims/amqpnetlite/src/amqp_types_test/Receiver/Receiver.cs
index 70f71e1..818bfe3 100644
--- a/shims/amqpnetlite/src/amqp_types_test/Receiver/Receiver.cs
+++ b/shims/amqpnetlite/src/amqp_types_test/Receiver/Receiver.cs
@@ -21,6 +21,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Text;
 using System.Threading;
 using Amqp;
@@ -471,18 +472,17 @@
              *       3: QPIDIT AMQP type name of expected message body values
              *       4: Expected number of test values to receive
              */
-            if (args.Length != 4)
-            {
-                throw new System.ArgumentException(
-                    "Required argument count must be 4: brokerAddr queueName amqpType nValues");
-            }
             int exitCode = 0;
-
-            //Trace.TraceLevel = TraceLevel.Frame | TraceLevel.Verbose;
-            //Trace.TraceListener = (f, a) => Console.WriteLine(DateTime.Now.ToString("[hh:mm:ss.fff]") + " " + string.Format(f, a));
-
             try
             {
+                if (args.Length != 4)
+                {
+                    throw new ApplicationException(
+                        "program requires four arguments: brokerAddr queueName amqpType nValues");
+                }
+                //Trace.TraceLevel = TraceLevel.Frame | TraceLevel.Verbose;
+                //Trace.TraceListener = (f, a) => Console.WriteLine(DateTime.Now.ToString("[hh:mm:ss.fff]") + " " + string.Format(f, a));
+
                 Receiver receiver = new Qpidit.Receiver(
                     args[0], args[1], args[2], Int32.Parse(args[3]));
                 receiver.run();
@@ -492,7 +492,8 @@
             }
             catch (Exception e)
             {
-                Console.Error.WriteLine("AmqpReceiver error: {0}.", e);
+                string firstline = new StringReader(e.ToString()).ReadLine();
+                Console.Error.WriteLine("AmqpSender error: {0}.", firstline);
                 exitCode = 1;
             }
 
diff --git a/shims/amqpnetlite/src/amqp_types_test/Sender/Sender.cs b/shims/amqpnetlite/src/amqp_types_test/Sender/Sender.cs
index 597a16e..ff76732 100644
--- a/shims/amqpnetlite/src/amqp_types_test/Sender/Sender.cs
+++ b/shims/amqpnetlite/src/amqp_types_test/Sender/Sender.cs
@@ -22,6 +22,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.IO;
 using System.Text;
 using System.Threading;
 using System.Web.Script.Serialization;
@@ -387,6 +388,11 @@
                     case "map":
                         throw new ApplicationException(String.Format(
                             "Sender asked to encode a map but received a string: {0}", baseValue));
+                    case "decimal32":
+                    case "decimal64":
+                    case "decimal128":
+                        throw new ApplicationException(String.Format(
+                            "AMQP.Net Lite does not support AMQP decimal type: {0}", baseType));
                     default:
                         throw new ApplicationException(String.Format(
                             "Sender can not encode base type: {0}", baseType));
@@ -479,24 +485,24 @@
              *       3: AMQP type
              *       4: Test value(s) as JSON string
              */
-            if (args.Length != 4)
-            {
-                throw new System.ArgumentException(
-                    "Required argument count must be 4: brokerAddr queueName amqpType jsonValuesToSend");
-            }
             int exitCode = 0;
-
-            //Trace.TraceLevel = TraceLevel.Frame | TraceLevel.Verbose;
-            //Trace.TraceListener = (f, a) => Console.WriteLine(DateTime.Now.ToString("[hh:mm:ss.fff]") + " " + string.Format(f, a));
-
             try
             {
+                if (args.Length != 4)
+                {
+                    throw new ApplicationException(
+                        "program requires four arguments: brokerAddr queueName amqpType jsonValuesToSend");
+                }
+                //Trace.TraceLevel = TraceLevel.Frame | TraceLevel.Verbose;
+                //Trace.TraceListener = (f, a) => Console.WriteLine(DateTime.Now.ToString("[hh:mm:ss.fff]") + " " + string.Format(f, a));
+
                 Sender sender = new Qpidit.Sender(args[0], args[1], args[2], args[3]);
                 sender.run();
             }
             catch (Exception e)
             {
-                Console.Error.WriteLine("AmqpSender error: {0}.", e);
+                string firstline = new StringReader(e.ToString()).ReadLine();
+                Console.Error.WriteLine("AmqpSender error: {0}.", firstline);
                 exitCode = 1;
             }