QPID-7898: Address review feedback from Alex Rudyy <orudyy@apache.org>
diff --git a/client/src/main/java/org/apache/qpid/client/AMQUndefinedDestination.java b/client/src/main/java/org/apache/qpid/client/AMQUndefinedDestination.java
deleted file mode 100644
index caf54e5..0000000
--- a/client/src/main/java/org/apache/qpid/client/AMQUndefinedDestination.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.client;
-
-public class AMQUndefinedDestination extends AMQDestination
-{
-
-    private static final String UNKNOWN_EXCHANGE_CLASS = "unknown";
-    private static final long serialVersionUID = -3938019873332367947L;
-
-
-    public AMQUndefinedDestination(String exchange, String routingKey, String queueName)
-    {
-        super(exchange, UNKNOWN_EXCHANGE_CLASS, routingKey, queueName);
-    }
-
-    public boolean isNameRequired()
-    {
-        return getAMQQueueName() == null;
-    }
-
-    @Override
-    public boolean neverDeclare()
-    {
-        return true;
-    }
-}
diff --git a/client/src/main/java/org/apache/qpid/client/BasicMessageProducer.java b/client/src/main/java/org/apache/qpid/client/BasicMessageProducer.java
index e7e29ba..12fa91f 100644
--- a/client/src/main/java/org/apache/qpid/client/BasicMessageProducer.java
+++ b/client/src/main/java/org/apache/qpid/client/BasicMessageProducer.java
@@ -48,7 +48,7 @@
 {
 
 
-    enum PublishMode { ASYNC_PUBLISH_ALL, SYNC_PUBLISH_PERSISTENT, SYNC_PUBLISH_ALL };
+    enum PublishMode { ASYNC_PUBLISH_ALL, SYNC_PUBLISH_PERSISTENT, SYNC_PUBLISH_ALL }
 
     private final Logger _logger ;
 
@@ -491,17 +491,18 @@
         }
 
         AMQDestination amqDestination = (AMQDestination) destination;
-        if (!_session.isResolved(amqDestination))
+        if (_session.isResolved(amqDestination) || amqDestination.neverDeclare())
         {
-            try
-            {
-                declareDestination(amqDestination);
-            }
-            catch(Exception e)
-            {
-                throw JMSExceptionHelper.chainJMSException(new InvalidDestinationException(
-                        "Error validating destination"), e);
-            }
+            return;
+        }
+        try
+        {
+            declareDestination(amqDestination);
+        }
+        catch(Exception e)
+        {
+            throw JMSExceptionHelper.chainJMSException(new InvalidDestinationException(
+                    "Error validating destination"), e);
         }
     }
 
diff --git a/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java b/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java
index 8a9aec8..054be82 100644
--- a/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java
+++ b/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java
@@ -689,6 +689,11 @@
     {
         private static final long serialVersionUID = -5042408431861384536L;
 
+        // For Externalizable contract
+        public DefaultRouterDestination()
+        {
+        }
+
         public DefaultRouterDestination(final String replyToEncoding)
         {
             super("",
@@ -714,6 +719,11 @@
     {
         private static final long serialVersionUID = 122897705932489259L;
 
+        // For Externalizable contract
+        public NonBURLReplyToDestination()
+        {
+        }
+
         public NonBURLReplyToDestination(final String exchangeClass,
                                          final String exchange,
                                          final String routingKey)