Repository: activemq
Updated Branches:
  refs/heads/activemq-5.13.x be38e9275 -> f6c242ad6


https://issues.apache.org/jira/browse/AMQ-6077

Making new values in ActiveMQObjectMessage transient which fixes HTTP
serialization

(cherry picked from commit b9dcb010f74675f6369f7e74b931b670e0ecab51)


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/f6c242ad
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/f6c242ad
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/f6c242ad

Branch: refs/heads/activemq-5.13.x
Commit: f6c242ad6404c4b4cb2c66829dd48b86b32f3faf
Parents: be38e92
Author: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com>
Authored: Tue Dec 15 19:37:05 2015 +0000
Committer: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com>
Committed: Wed Dec 16 14:39:27 2015 +0000

----------------------------------------------------------------------
 .../activemq/command/ActiveMQObjectMessage.java | 22 ++++++++++++++---
 .../apache/activemq/command/ConsumerInfo.java   |  4 +--
 .../activemq/command/TransientInitializer.java  | 26 ++++++++++++++++++++
 .../transport/xstream/XStreamWireFormat.java    |  6 +++--
 4 files changed, 51 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/f6c242ad/activemq-client/src/main/java/org/apache/activemq/command/ActiveMQObjectMessage.java
----------------------------------------------------------------------
diff --git 
a/activemq-client/src/main/java/org/apache/activemq/command/ActiveMQObjectMessage.java
 
b/activemq-client/src/main/java/org/apache/activemq/command/ActiveMQObjectMessage.java
index 5995a80..468ce79 100755
--- 
a/activemq-client/src/main/java/org/apache/activemq/command/ActiveMQObjectMessage.java
+++ 
b/activemq-client/src/main/java/org/apache/activemq/command/ActiveMQObjectMessage.java
@@ -27,6 +27,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.zip.DeflaterOutputStream;
 import java.util.zip.InflaterInputStream;
 
@@ -66,15 +67,16 @@ import org.apache.activemq.wireformat.WireFormat;
  * @see javax.jms.StreamMessage
  * @see javax.jms.TextMessage
  */
-public class ActiveMQObjectMessage extends ActiveMQMessage implements 
ObjectMessage {
+public class ActiveMQObjectMessage extends ActiveMQMessage implements 
ObjectMessage, TransientInitializer {
 
     public static final byte DATA_STRUCTURE_TYPE = 
CommandTypes.ACTIVEMQ_OBJECT_MESSAGE;
 
-    private List<String> trustedPackages = 
Arrays.asList(ClassLoadingAwareObjectInputStream.serializablePackages);
-    private boolean trustAllPackages = false;
+    private transient List<String> trustedPackages = 
Arrays.asList(ClassLoadingAwareObjectInputStream.serializablePackages);
+    private transient boolean trustAllPackages = false;
 
     protected transient Serializable object;
 
+    @Override
     public Message copy() {
         ActiveMQObjectMessage copy = new ActiveMQObjectMessage();
         copy(copy);
@@ -126,10 +128,12 @@ public class ActiveMQObjectMessage extends 
ActiveMQMessage implements ObjectMess
         }
     }
 
+    @Override
     public byte getDataStructureType() {
         return DATA_STRUCTURE_TYPE;
     }
 
+    @Override
     public String getJMSXMimeType() {
         return "jms/object-message";
     }
@@ -146,6 +150,7 @@ public class ActiveMQObjectMessage extends ActiveMQMessage 
implements ObjectMess
      *                 due to some internal error.
      */
 
+    @Override
     public void clearBody() throws JMSException {
         super.clearBody();
         this.object = null;
@@ -166,6 +171,7 @@ public class ActiveMQObjectMessage extends ActiveMQMessage 
implements ObjectMess
      *                 read-only mode.
      */
 
+    @Override
     public void setObject(Serializable newObject) throws JMSException {
         checkReadOnlyBody();
         this.object = newObject;
@@ -183,6 +189,7 @@ public class ActiveMQObjectMessage extends ActiveMQMessage 
implements ObjectMess
      * @return the serializable object containing this message's data
      * @throws JMSException
      */
+    @Override
     public Serializable getObject() throws JMSException {
         if (object == null && getContent() != null) {
             try {
@@ -216,11 +223,13 @@ public class ActiveMQObjectMessage extends 
ActiveMQMessage implements ObjectMess
         storeContent();
     }
 
+    @Override
     public void clearMarshalledState() throws JMSException {
         super.clearMarshalledState();
         this.object = null;
     }
 
+    @Override
     public void onMessageRolledBack() {
         super.onMessageRolledBack();
 
@@ -235,6 +244,7 @@ public class ActiveMQObjectMessage extends ActiveMQMessage 
implements ObjectMess
         super.compress();
     }
 
+    @Override
     public String toString() {
         try {
             getObject();
@@ -258,4 +268,10 @@ public class ActiveMQObjectMessage extends ActiveMQMessage 
implements ObjectMess
     public void setTrustAllPackages(boolean trustAllPackages) {
         this.trustAllPackages = trustAllPackages;
     }
+
+    @Override
+    public void initTransients() {
+        trustedPackages = 
Arrays.asList(ClassLoadingAwareObjectInputStream.serializablePackages);
+        trustAllPackages = false;
+    }
 }

http://git-wip-us.apache.org/repos/asf/activemq/blob/f6c242ad/activemq-client/src/main/java/org/apache/activemq/command/ConsumerInfo.java
----------------------------------------------------------------------
diff --git 
a/activemq-client/src/main/java/org/apache/activemq/command/ConsumerInfo.java 
b/activemq-client/src/main/java/org/apache/activemq/command/ConsumerInfo.java
index 16e6f8c2..5ccafab 100755
--- 
a/activemq-client/src/main/java/org/apache/activemq/command/ConsumerInfo.java
+++ 
b/activemq-client/src/main/java/org/apache/activemq/command/ConsumerInfo.java
@@ -17,7 +17,6 @@
 package org.apache.activemq.command;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -30,7 +29,7 @@ import org.apache.activemq.state.CommandVisitor;
  * @openwire:marshaller code="5"
  *
  */
-public class ConsumerInfo extends BaseCommand {
+public class ConsumerInfo extends BaseCommand implements TransientInitializer {
 
     public static final byte DATA_STRUCTURE_TYPE = CommandTypes.CONSUMER_INFO;
 
@@ -527,6 +526,7 @@ public class ConsumerInfo extends BaseCommand {
         return result;
     }
 
+    @Override
     public void initTransients() {
         assignedGroupCount = new ConcurrentHashMap<>();
         lastDeliveredSequenceId = RemoveInfo.LAST_DELIVERED_UNSET;

http://git-wip-us.apache.org/repos/asf/activemq/blob/f6c242ad/activemq-client/src/main/java/org/apache/activemq/command/TransientInitializer.java
----------------------------------------------------------------------
diff --git 
a/activemq-client/src/main/java/org/apache/activemq/command/TransientInitializer.java
 
b/activemq-client/src/main/java/org/apache/activemq/command/TransientInitializer.java
new file mode 100644
index 0000000..b6d4a39
--- /dev/null
+++ 
b/activemq-client/src/main/java/org/apache/activemq/command/TransientInitializer.java
@@ -0,0 +1,26 @@
+/**
+ * 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.activemq.command;
+
+/**
+ *
+ *
+ */
+public interface TransientInitializer {
+
+    public void initTransients();
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/f6c242ad/activemq-http/src/main/java/org/apache/activemq/transport/xstream/XStreamWireFormat.java
----------------------------------------------------------------------
diff --git 
a/activemq-http/src/main/java/org/apache/activemq/transport/xstream/XStreamWireFormat.java
 
b/activemq-http/src/main/java/org/apache/activemq/transport/xstream/XStreamWireFormat.java
index f98fc61..8ddac9d 100755
--- 
a/activemq-http/src/main/java/org/apache/activemq/transport/xstream/XStreamWireFormat.java
+++ 
b/activemq-http/src/main/java/org/apache/activemq/transport/xstream/XStreamWireFormat.java
@@ -24,9 +24,11 @@ import 
com.thoughtworks.xstream.converters.MarshallingContext;
 import com.thoughtworks.xstream.converters.UnmarshallingContext;
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
+
 import org.apache.activemq.command.ConsumerInfo;
 import org.apache.activemq.command.MarshallAware;
 import org.apache.activemq.command.MessageDispatch;
+import org.apache.activemq.command.TransientInitializer;
 import org.apache.activemq.transport.stomp.XStreamSupport;
 import org.apache.activemq.transport.util.TextWireFormat;
 import org.apache.activemq.util.ByteSequence;
@@ -67,8 +69,8 @@ public class XStreamWireFormat extends TextWireFormat {
     @Override
     public Object unmarshalText(Reader reader) {
         Object val = getXStream().fromXML(reader);
-        if (val instanceof ConsumerInfo) {
-            ((ConsumerInfo)val).initTransients();
+        if (val instanceof TransientInitializer) {
+            ((TransientInitializer)val).initTransients();
         }
         return val;
     }

Reply via email to