View Javadoc

    1   /*
    2    * Copyright 2012 The Netty Project
    3    *
    4    * The Netty Project licenses this file to you under the Apache License,
    5    * version 2.0 (the "License"); you may not use this file except in compliance
    6    * with the License. You may obtain a copy of the License at:
    7    *
    8    *   http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    13   * License for the specific language governing permissions and limitations
    14   * under the License.
    15   */
    16  package org.jboss.netty.handler.codec.marshalling;
    17
    18  import org.jboss.marshalling.Marshaller;
    19  import org.jboss.netty.channel.Channel;
    20  import org.jboss.netty.channel.ChannelHandler.Sharable;
    21  import org.jboss.netty.channel.ChannelHandlerContext;
    22  import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
    23
    24  /**
    25   * {@link OneToOneEncoder} implementation which uses JBoss Marshalling to marshal
    26   * an Object.
    27   *
    28   * See <a href="http://www.jboss.org/jbossmarshalling">JBoss Marshalling website</a>
    29   * for more informations
    30   *
    31   * Use {@link MarshallingEncoder} if possible.
    32   *
    33   */
    34  @Sharable
    35  public class CompatibleMarshallingEncoder extends OneToOneEncoder {
    36
    37      private final MarshallerProvider provider;
    38
    39
    40      /**
    41       * Create a new instance of the {@link CompatibleMarshallingEncoder}
    42       *
    43       * @param provider  the {@link MarshallerProvider} to use to get the {@link Marshaller} for a {@link Channel}
    44       */
    45      public CompatibleMarshallingEncoder(MarshallerProvider provider) {
    46          this.provider = provider;
    47      }
    48
    49
    50      @Override
    51      protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception {
    52          Marshaller marshaller = provider.getMarshaller(ctx);
    53          ChannelBufferByteOutput output =
    54                  new ChannelBufferByteOutput(ctx.getChannel().getConfig().getBufferFactory(), 256);
    55          marshaller.start(output);
    56          marshaller.writeObject(msg);
    57          marshaller.finish();
    58          marshaller.close();
    59
    60          return output.getBuffer();
    61      }
    62  }