All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wildfly.clustering.marshalling.protostream.ProtoStreamOperation Maven / Gradle / Ivy

/*
 * Copyright The WildFly Authors
 * SPDX-License-Identifier: Apache-2.0
 */

package org.wildfly.clustering.marshalling.protostream;

import org.infinispan.protostream.ImmutableSerializationContext;

/**
 * Common interface of {@link ProtoStreamReader} and {@link ProtoStreamWriter}.
 * @author Paul Ferraro
 */
public interface ProtoStreamOperation {

	interface Context {
		/**
		 * Records the specified object, so that it can be referenced later within the same stream
		 * @param object an object
		 */
		void record(Object object);
	}

	/**
	 * Returns the context of this operation
	 * @return the operation context
	 */
	ProtoStreamOperation.Context getContext();

	/**
	 * Returns the serialization context of the associated marshaller.
	 * @return an immutable serialization context
	 */
	ImmutableSerializationContext getSerializationContext();

	/**
	 * Returns a marshaller suitable of marshalling an object of the specified type.
	 * @param  the type of the associated marshaller
	 * @param  the type of the object to be marshalled
	 * @param javaClass the type of the value to be written.
	 * @return a marshaller suitable for the specified type
	 * @throws IllegalArgumentException if no suitable marshaller exists
	 */
	@SuppressWarnings("unchecked")
	default  ProtoStreamMarshaller findMarshaller(Class javaClass) {
		ImmutableSerializationContext context = this.getSerializationContext();
		Class targetClass = javaClass;
		IllegalArgumentException exception = null;
		while (targetClass != null) {
			try {
				return (ProtoStreamMarshaller) context.getMarshaller((Class) targetClass);
			} catch (IllegalArgumentException e) {
				// If no marshaller was found, check super class
				if (exception == null) {
					exception = e;
				}
				targetClass = targetClass.getSuperclass();
			}
		}
		throw exception;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy