Package org.hibernate.ogm.datastore.infinispan.test.dialect.impl

Source Code of org.hibernate.ogm.datastore.infinispan.test.dialect.impl.ExternalizerTestHelper

/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.ogm.datastore.infinispan.test.dialect.impl;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.infinispan.commons.marshall.AdvancedExternalizer;
import org.jboss.marshalling.Marshaller;
import org.jboss.marshalling.MarshallerFactory;
import org.jboss.marshalling.Marshalling;
import org.jboss.marshalling.MarshallingConfiguration;
import org.jboss.marshalling.Unmarshaller;

/**
* Helper for externalizer tests. Uses the "River" serialization protocol.
*
* @author Gunnar Morling
*/
class ExternalizerTestHelper<T, E extends AdvancedExternalizer<T>> {

  private final MarshallerFactory marshallerFactory;
  private final E externalizer;

  private ExternalizerTestHelper(E externalizer) {
    marshallerFactory = Marshalling.getProvidedMarshallerFactory( "river" );
    this.externalizer = externalizer;
  }

  static <T, E extends AdvancedExternalizer<T>> ExternalizerTestHelper<T, E> getInstance(E externalizer) {
    return new ExternalizerTestHelper<T, E>( externalizer );
  }

  byte[] marshall(T object) throws Exception {
    Marshaller marshaller = getMarshaller();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    try {
      marshaller.start( Marshalling.createByteOutput( baos ) );
      externalizer.writeObject( marshaller, object );
      marshaller.finish();
    }
    finally {
      try {
        baos.close();
      }
      catch (IOException e) {
        throw new RuntimeException( e );
      }
    }

    return baos.toByteArray();
  }

  T unmarshall(byte[] bytes) throws Exception {
    Unmarshaller unmarshaller = getUnmarshaller();
    InputStream is = new ByteArrayInputStream( bytes );
    try {
      unmarshaller.start( Marshalling.createByteInput( is ) );
      T object = externalizer.readObject( unmarshaller );
      unmarshaller.finish();

      return object;
    }
    finally {
      try {
        is.close();
      }
      catch (IOException e) {
        throw new RuntimeException( e );
      }
    }
  }

  private Marshaller getMarshaller() throws IOException {
    MarshallingConfiguration configuration = new MarshallingConfiguration();
    configuration.setVersion( 3 );

    Marshaller marshaller = marshallerFactory.createMarshaller( configuration );
    return marshaller;
  }

  private Unmarshaller getUnmarshaller() throws IOException {
    MarshallingConfiguration configuration = new MarshallingConfiguration();
    return marshallerFactory.createUnmarshaller( configuration );
  }
}
TOP

Related Classes of org.hibernate.ogm.datastore.infinispan.test.dialect.impl.ExternalizerTestHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.