View Javadoc

1   /*** 
2    * 
3    * Copyright 2004 Hiram Chirino
4    * 
5    * Licensed under the Apache License, Version 2.0 (the "License"); 
6    * you may not use this file except in compliance with the License. 
7    * You may obtain a copy of the License at 
8    * 
9    * http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, 
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
14   * See the License for the specific language governing permissions and 
15   * limitations under the License. 
16   * 
17   **/
18  package org.codehaus.activemq.message;
19  
20  import javax.jms.JMSException;
21  import java.io.ByteArrayInputStream;
22  import java.io.ByteArrayOutputStream;
23  import java.io.IOException;
24  import java.io.ObjectInputStream;
25  import java.io.ObjectOutputStream;
26  import java.io.Serializable;
27  
28  /***
29   * A receipt that also carries a reponse object.
30   */
31  public class ResponseReceipt extends Receipt {
32  
33      private Serializable result;
34      private byte[] resultBytes;
35  
36      /***
37       * @see org.codehaus.activemq.message.Receipt#getPacketType()
38       */
39      public int getPacketType() {
40          return RESPONSE_RECEIPT_INFO;
41      }
42  
43      /***
44       * @return Returns the result.
45       */
46      public Serializable getResult() throws JMSException {
47          if (result == null) {
48              if (resultBytes == null) {
49                  return null;
50              }
51              try {
52                  result = (Serializable) new ObjectInputStream(new ByteArrayInputStream(resultBytes)).readObject();
53              }
54              catch (Exception e) {
55                  throw ((JMSException) new JMSException("Invalid network mesage received.").initCause(e));
56              }
57          }
58          return result;
59      }
60  
61      /***
62       * @param result The result to set.
63       */
64      public void setResult(Serializable result) {
65          this.result = result;
66          this.resultBytes = null;
67      }
68  
69      /***
70       * @param data
71       */
72      public void setResultBytes(byte[] resultBytes) {
73          this.resultBytes = resultBytes;
74          this.result = null;
75      }
76  
77      /***
78       * @return Returns the resultBytes.
79       */
80      public byte[] getResultBytes() throws IOException {
81          if (resultBytes == null) {
82              if (result == null) {
83                  return null;
84              }
85              ByteArrayOutputStream baos = new ByteArrayOutputStream();
86              ObjectOutputStream os = new ObjectOutputStream(baos);
87              os.writeObject(result);
88              os.close();
89              resultBytes = baos.toByteArray();
90          }
91          return resultBytes;
92      }
93  }