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

org.robotframework.remoteserver.xmlrpc.serializers.AbstractSerializer Maven / Gradle / Ivy

There is a newer version: 3.6.0
Show newest version
package org.robotframework.remoteserver.xmlrpc.serializers;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.apache.xmlrpc.serializer.TypeSerializer;
import org.apache.xmlrpc.serializer.TypeSerializerImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;

abstract public class AbstractSerializer extends TypeSerializerImpl implements TypeSerializer {

    protected static final Logger LOG = LoggerFactory.getLogger(AbstractSerializer.class.getName());
    private final ObjectMapper mapper = new ObjectMapper();

    protected AbstractSerializer() {
        mapper.registerModule(new SimpleModule().addSerializer(getSerializer()));
    }

    protected abstract JsonSerializer getSerializer();

    public boolean canSerialize(Class aClass) {
        return mapper.canSerialize(aClass) && getSerializer().handledType().equals(aClass);
    }

    @Override public synchronized void write(ContentHandler pHandler, Object pObject) throws SAXException {
        String value;
        synchronized (mapper) {
            try {
                value = mapper.writeValueAsString(pObject);
            } catch (JsonProcessingException e) {
                LOG.error("Cannot serialize {} {}", pHandler, pObject, e);
                throw new RuntimeException(String.format("Cannot serialize data %s", pObject), e);
            }
        }
        write(pHandler, VALUE_TAG, value);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy