io.quarkus.reactivemessaging.http.runtime.serializers.SerializerFactoryBase Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of quarkus-reactive-messaging-http Show documentation
Show all versions of quarkus-reactive-messaging-http Show documentation
Connect to HTTP or WebSocket and expose HTTP or WebSocket endpoints for Reactive Messaging
package io.quarkus.reactivemessaging.http.runtime.serializers;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jboss.logging.Logger;
/**
* a base superclass for a SerializerFactory that is generated in build time
*/
public abstract class SerializerFactoryBase {
private static final Logger log = Logger.getLogger(SerializerFactoryBase.class);
private final Map> serializersByClassName = new HashMap<>();
private final List> predefinedSerializers = new ArrayList<>();
protected SerializerFactoryBase() {
predefinedSerializers.add(new JsonObjectSerializer());
predefinedSerializers.add(new JsonArraySerializer());
predefinedSerializers.add(new StringSerializer());
predefinedSerializers.add(new BufferSerializer());
predefinedSerializers.add(new CollectionSerializer());
predefinedSerializers.add(new NumberSerializer());
predefinedSerializers.add(new JakartaJsonObjectSerializer());
predefinedSerializers.add(new JakartaJsonArraySerializer());
predefinedSerializers.add(new ObjectSerializer());
predefinedSerializers.sort(Comparator.comparingInt(Serializer::getPriority));
Collections.reverse(predefinedSerializers);
initAdditionalSerializers();
}
/**
* method that initializes additional serializers (used by user's config).
* Implemented in the generated subclass
*/
protected abstract void initAdditionalSerializers();
/**
* get a {@link Serializer} of a given (class) name or for a given payload type
*
* @param name name of the serializer
* @param payload payload to serialize
* @param type of the payload
* @return serializer
*/
public Serializer getSerializer(String name, T payload) {
if (payload == null) {
throw new IllegalArgumentException("Payload cannot be null");
}
if (name != null) {
@SuppressWarnings("unchecked")
Serializer serializer = (Serializer) serializersByClassName.get(name);
if (serializer == null) {
throw new IllegalArgumentException("No serializer class found for name: " + name);
}
if (serializer.handles(payload)) {
return serializer;
} else {
log.warnf("Specified serializer (%s) does not handle the payload type %s", name, payload.getClass());
}
}
for (Serializer> serializer : predefinedSerializers) {
if (serializer.handles(payload)) {
//noinspection unchecked
return (Serializer) serializer;
}
}
throw new IllegalArgumentException("No predefined serializer found matching class: " + payload.getClass());
}
@SuppressWarnings("unused") // used by a generated subclass
public void addSerializer(String className, Serializer> serializer) {
serializersByClassName.put(className, serializer);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy