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

org.aioobe.cloudconvert.CloudConvertMapperProvider Maven / Gradle / Ivy

package org.aioobe.cloudconvert;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;



@Provider
public class CloudConvertMapperProvider implements ContextResolver {
    
    String defaultScheme;
    
    public CloudConvertMapperProvider(String defaultScheme) {
        this.defaultScheme = defaultScheme;
    }
    
    public ObjectMapper getContext(Class cls) {
        ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        
        mapper.setVisibility(PropertyAccessor.GETTER, Visibility.NONE);
        mapper.setVisibility(PropertyAccessor.SETTER, Visibility.NONE);
        mapper.setVisibility(PropertyAccessor.IS_GETTER, Visibility.NONE);
        mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
        mapper.setVisibility(PropertyAccessor.CREATOR, Visibility.ANY);
        
        mapper.registerModule(new UriSchemeModule());
        
        return mapper;
    }
    
    private class UriSchemeModule extends SimpleModule {

        public UriSchemeModule() {
            super(CloudConvertMapperProvider.class.getSimpleName());
            
            addDeserializer(URI.class, new JsonDeserializer() {
                @Override
                public URI deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException {
                    URI url = URI.create(jp.readValueAs(String.class));
                    
                    if (url.getScheme() == null) {
                        try {
                            url = new URI(defaultScheme, url.getSchemeSpecificPart(), url.getFragment());
                        } catch (URISyntaxException e) {
                            throw new JsonProcessingException("Malformed URL", e) {};
                        }
                    }
                    return url;
                }
                
            });
        }
        
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy