Search in sources :

Example 1 with Provider

use of javax.ws.rs.ext.Provider in project meecrowave by apache.

the class ConfigurableBus method initProviders.

public void initProviders(final Configuration builder, final ClassLoader loader) {
    final List<Object> providers = ofNullable(builder.getJaxrsDefaultProviders()).map(s -> Stream.of(s.split(" *, *")).map(String::trim).filter(p -> !p.isEmpty()).map(name -> {
        try {
            return Thread.currentThread().getContextClassLoader().loadClass(name).newInstance();
        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
            throw new IllegalArgumentException(name + " can't be created");
        }
    }).collect(Collectors.<Object>toList())).orElseGet(() -> {
        // ensure both providers share the same memory reuse logic
        final JsonProvider provider = JsonProvider.provider();
        final JsonReaderFactory readerFactory = provider.createReaderFactory(new HashMap<String, Object>() {

            {
                put(JsonParserFactoryImpl.SUPPORTS_COMMENTS, builder.isJsonpSupportsComment());
                Optional.of(builder.getJsonpMaxStringLen()).filter(v -> v > 0).ifPresent(s -> put(JsonParserFactoryImpl.MAX_STRING_LENGTH, s));
                Optional.of(builder.getJsonpMaxReadBufferLen()).filter(v -> v > 0).ifPresent(s -> put(JsonParserFactoryImpl.BUFFER_LENGTH, s));
                ofNullable(builder.getJsonpBufferStrategy()).ifPresent(s -> put(AbstractJsonFactory.BUFFER_STRATEGY, s));
            }
        });
        final JsonWriterFactory writerFactory = provider.createWriterFactory(new HashMap<String, Object>() {

            {
                put(JsonGenerator.PRETTY_PRINTING, builder.isJsonpPrettify());
                Optional.of(builder.getJsonpMaxWriteBufferLen()).filter(v -> v > 0).ifPresent(v -> put(JsonGeneratorFactoryImpl.GENERATOR_BUFFER_LENGTH, v));
                ofNullable(builder.getJsonpBufferStrategy()).ifPresent(s -> put(AbstractJsonFactory.BUFFER_STRATEGY, s));
            }
        });
        return Stream.<Object>of(new ConfiguredJsonbJaxrsProvider(builder.getJsonbEncoding(), builder.isJsonbNulls(), builder.isJsonbIJson(), builder.isJsonbPrettify(), builder.getJsonbBinaryStrategy(), builder.getJsonbNamingStrategy(), builder.getJsonbOrderStrategy(), new DelegateJsonProvider(provider, readerFactory, writerFactory))).collect(toList());
    });
    if (builder.isJaxrsAutoActivateBeanValidation()) {
        try {
            // we don't need the jaxrsbeanvalidationfeature since bean validation cdi extension handles it normally
            loader.loadClass("javax.validation.Validation");
            final Object instance = loader.loadClass("org.apache.cxf.jaxrs.validation.ValidationExceptionMapper").getConstructor().newInstance();
            // validate bval can be used, check NoClassDefFoundError javax.validation.ValidationException
            instance.getClass().getGenericInterfaces();
            providers.add(instance);
        } catch (final Exception | NoClassDefFoundError e) {
        // no-op
        }
    }
    // client
    if (getProperty("org.apache.cxf.jaxrs.bus.providers") == null) {
        setProperty("skip.default.json.provider.registration", "true");
        setProperty("org.apache.cxf.jaxrs.bus.providers", providers);
    }
}
Also used : JsonReaderFactory(javax.json.JsonReaderFactory) JsonWriterFactory(javax.json.JsonWriterFactory) Produces(javax.ws.rs.Produces) Provider(javax.ws.rs.ext.Provider) JsonParserFactoryImpl(org.apache.johnzon.core.JsonParserFactoryImpl) JsonBuilderFactory(javax.json.JsonBuilderFactory) Collections.singletonList(java.util.Collections.singletonList) JsonProvider(javax.json.spi.JsonProvider) JsonValue(javax.json.JsonValue) BigDecimal(java.math.BigDecimal) JsonStructure(javax.json.JsonStructure) MediaType(javax.ws.rs.core.MediaType) JsonNumber(javax.json.JsonNumber) Consumes(javax.ws.rs.Consumes) Map(java.util.Map) BigInteger(java.math.BigInteger) ClientLifeCycleManagerImpl(org.apache.cxf.bus.managers.ClientLifeCycleManagerImpl) JsonObject(javax.json.JsonObject) JsonbBuilder(javax.json.bind.JsonbBuilder) Collection(java.util.Collection) JsonGeneratorFactory(javax.json.stream.JsonGeneratorFactory) Reader(java.io.Reader) AbstractJsonFactory(org.apache.johnzon.core.AbstractJsonFactory) Collectors(java.util.stream.Collectors) List(java.util.List) Stream(java.util.stream.Stream) Type(java.lang.reflect.Type) Writer(java.io.Writer) Annotation(java.lang.annotation.Annotation) Optional(java.util.Optional) JsonObjectBuilder(javax.json.JsonObjectBuilder) JsonGenerator(javax.json.stream.JsonGenerator) JsonArrayBuilder(javax.json.JsonArrayBuilder) JsonPatch(javax.json.JsonPatch) ClientLifeCycleManager(org.apache.cxf.endpoint.ClientLifeCycleManager) HashMap(java.util.HashMap) JsonParserFactory(javax.json.stream.JsonParserFactory) ExtensionManagerBus(org.apache.cxf.bus.extension.ExtensionManagerBus) JsonbJaxrsProvider(org.apache.johnzon.jaxrs.jsonb.jaxrs.JsonbJaxrsProvider) OutputStream(java.io.OutputStream) JsonParser(javax.json.stream.JsonParser) JsonReader(javax.json.JsonReader) Optional.ofNullable(java.util.Optional.ofNullable) JsonArray(javax.json.JsonArray) JsonMergePatch(javax.json.JsonMergePatch) Configuration(org.apache.meecrowave.configuration.Configuration) JsonGeneratorFactoryImpl(org.apache.johnzon.core.JsonGeneratorFactoryImpl) JsonString(javax.json.JsonString) Collectors.toList(java.util.stream.Collectors.toList) JsonPatchBuilder(javax.json.JsonPatchBuilder) JsonWriter(javax.json.JsonWriter) Jsonb(javax.json.bind.Jsonb) JsonPointer(javax.json.JsonPointer) InputStream(java.io.InputStream) JsonString(javax.json.JsonString) JsonProvider(javax.json.spi.JsonProvider) JsonObject(javax.json.JsonObject) JsonWriterFactory(javax.json.JsonWriterFactory) JsonReaderFactory(javax.json.JsonReaderFactory)

Example 2 with Provider

use of javax.ws.rs.ext.Provider in project meecrowave by apache.

the class ConfigurableBus method initProviders.

public void initProviders(final Meecrowave.Builder builder, final ClassLoader loader) {
    final List<Object> providers = ofNullable(builder.getJaxrsDefaultProviders()).map(s -> Stream.of(s.split(" *, *")).map(String::trim).filter(p -> !p.isEmpty()).map(name -> {
        try {
            return Thread.currentThread().getContextClassLoader().loadClass(name).newInstance();
        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
            throw new IllegalArgumentException(name + " can't be created");
        }
    }).collect(Collectors.<Object>toList())).orElseGet(() -> {
        // ensure both providers share the same memory reuse logic
        final JsonProvider provider = JsonProvider.provider();
        final JsonReaderFactory readerFactory = provider.createReaderFactory(new HashMap<String, Object>() {

            {
                put(JsonParserFactoryImpl.SUPPORTS_COMMENTS, builder.isJsonpSupportsComment());
                of(builder.getJsonpMaxStringLen()).filter(v -> v > 0).ifPresent(s -> put(JsonParserFactoryImpl.MAX_STRING_LENGTH, s));
                of(builder.getJsonpMaxReadBufferLen()).filter(v -> v > 0).ifPresent(s -> put(JsonParserFactoryImpl.BUFFER_LENGTH, s));
                ofNullable(builder.getJsonpBufferStrategy()).ifPresent(s -> put(AbstractJsonFactory.BUFFER_STRATEGY, s));
            }
        });
        final JsonWriterFactory writerFactory = provider.createWriterFactory(new HashMap<String, Object>() {

            {
                put(JsonGenerator.PRETTY_PRINTING, builder.isJsonpPrettify());
                of(builder.getJsonpMaxWriteBufferLen()).filter(v -> v > 0).ifPresent(v -> put(JsonGeneratorFactoryImpl.GENERATOR_BUFFER_LENGTH, v));
                ofNullable(builder.getJsonpBufferStrategy()).ifPresent(s -> put(AbstractJsonFactory.BUFFER_STRATEGY, s));
            }
        });
        return Stream.<Object>of(new ConfiguredJsonbJaxrsProvider(builder.getJsonbEncoding(), builder.isJsonbNulls(), builder.isJsonbIJson(), builder.isJsonbPrettify(), builder.getJsonbBinaryStrategy(), builder.getJsonbNamingStrategy(), builder.getJsonbOrderStrategy(), new DelegateJsonProvider(provider, readerFactory, writerFactory)), new ConfiguredJsrProvider(readerFactory, writerFactory)).collect(toList());
    });
    if (builder.isJaxrsAutoActivateBeanValidation()) {
        try {
            // we don't need the jaxrsbeanvalidationfeature since bean validation cdi extension handles it normally
            loader.loadClass("javax.validation.Validation");
            final Object instance = loader.loadClass("org.apache.cxf.jaxrs.validation.ValidationExceptionMapper").getConstructor().newInstance();
            // validate bval can be used, check NoClassDefFoundError javax.validation.ValidationException
            instance.getClass().getGenericInterfaces();
            providers.add(instance);
        } catch (final Exception | NoClassDefFoundError e) {
        // no-op
        }
    }
    // client
    if (getProperty("org.apache.cxf.jaxrs.bus.providers") == null) {
        setProperty("skip.default.json.provider.registration", "true");
        setProperty("org.apache.cxf.jaxrs.bus.providers", providers);
    }
}
Also used : JsonReaderFactory(javax.json.JsonReaderFactory) Arrays(java.util.Arrays) JsonWriterFactory(javax.json.JsonWriterFactory) Produces(javax.ws.rs.Produces) Provider(javax.ws.rs.ext.Provider) JsonParserFactoryImpl(org.apache.johnzon.core.JsonParserFactoryImpl) JsonBuilderFactory(javax.json.JsonBuilderFactory) Optional.of(java.util.Optional.of) JsonProvider(javax.json.spi.JsonProvider) JsonValue(javax.json.JsonValue) BigDecimal(java.math.BigDecimal) JsonStructure(javax.json.JsonStructure) MediaType(javax.ws.rs.core.MediaType) JsonNumber(javax.json.JsonNumber) Consumes(javax.ws.rs.Consumes) Map(java.util.Map) BigInteger(java.math.BigInteger) ClientLifeCycleManagerImpl(org.apache.cxf.bus.managers.ClientLifeCycleManagerImpl) JsonObject(javax.json.JsonObject) JsonbBuilder(javax.json.bind.JsonbBuilder) Collection(java.util.Collection) JsonGeneratorFactory(javax.json.stream.JsonGeneratorFactory) Reader(java.io.Reader) AbstractJsonFactory(org.apache.johnzon.core.AbstractJsonFactory) Collectors(java.util.stream.Collectors) List(java.util.List) Stream(java.util.stream.Stream) Writer(java.io.Writer) Meecrowave(org.apache.meecrowave.Meecrowave) JsonObjectBuilder(javax.json.JsonObjectBuilder) JsonGenerator(javax.json.stream.JsonGenerator) JsonArrayBuilder(javax.json.JsonArrayBuilder) JsonPatch(javax.json.JsonPatch) ClientLifeCycleManager(org.apache.cxf.endpoint.ClientLifeCycleManager) HashMap(java.util.HashMap) JsonParserFactory(javax.json.stream.JsonParserFactory) ExtensionManagerBus(org.apache.cxf.bus.extension.ExtensionManagerBus) DelegateProvider(org.apache.johnzon.jaxrs.DelegateProvider) JsonbJaxrsProvider(org.apache.johnzon.jaxrs.jsonb.jaxrs.JsonbJaxrsProvider) JsrMessageBodyReader(org.apache.johnzon.jaxrs.JsrMessageBodyReader) OutputStream(java.io.OutputStream) JsonParser(javax.json.stream.JsonParser) JsonReader(javax.json.JsonReader) Optional.ofNullable(java.util.Optional.ofNullable) JsonArray(javax.json.JsonArray) JsonMergePatch(javax.json.JsonMergePatch) JsrMessageBodyWriter(org.apache.johnzon.jaxrs.JsrMessageBodyWriter) JsonGeneratorFactoryImpl(org.apache.johnzon.core.JsonGeneratorFactoryImpl) JsonString(javax.json.JsonString) Collectors.toList(java.util.stream.Collectors.toList) JsonPatchBuilder(javax.json.JsonPatchBuilder) JsonWriter(javax.json.JsonWriter) Jsonb(javax.json.bind.Jsonb) JsonPointer(javax.json.JsonPointer) InputStream(java.io.InputStream) JsonString(javax.json.JsonString) JsonProvider(javax.json.spi.JsonProvider) JsonObject(javax.json.JsonObject) JsonWriterFactory(javax.json.JsonWriterFactory) JsonReaderFactory(javax.json.JsonReaderFactory)

Example 3 with Provider

use of javax.ws.rs.ext.Provider in project spring-cloud-netflix by spring-cloud.

the class EurekaServerAutoConfiguration method jerseyApplication.

/**
 * Construct a Jersey {@link javax.ws.rs.core.Application} with all the resources
 * required by the Eureka server.
 */
@Bean
public javax.ws.rs.core.Application jerseyApplication(Environment environment, ResourceLoader resourceLoader) {
    ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false, environment);
    // Filter to include only classes that have a particular annotation.
    // 
    provider.addIncludeFilter(new AnnotationTypeFilter(Path.class));
    provider.addIncludeFilter(new AnnotationTypeFilter(Provider.class));
    // Find classes in Eureka packages (or subpackages)
    // 
    Set<Class<?>> classes = new HashSet<>();
    for (String basePackage : EUREKA_PACKAGES) {
        Set<BeanDefinition> beans = provider.findCandidateComponents(basePackage);
        for (BeanDefinition bd : beans) {
            Class<?> cls = ClassUtils.resolveClassName(bd.getBeanClassName(), resourceLoader.getClassLoader());
            classes.add(cls);
        }
    }
    // Construct the Jersey ResourceConfig
    // 
    Map<String, Object> propsAndFeatures = new HashMap<>();
    propsAndFeatures.put(// Skip static content used by the webapp
    ServletContainer.PROPERTY_WEB_PAGE_CONTENT_REGEX, EurekaConstants.DEFAULT_PREFIX + "/(fonts|images|css|js)/.*");
    DefaultResourceConfig rc = new DefaultResourceConfig(classes);
    rc.setPropertiesAndFeatures(propsAndFeatures);
    return rc;
}
Also used : Path(javax.ws.rs.Path) AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) HashMap(java.util.HashMap) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition) Provider(javax.ws.rs.ext.Provider) ClassPathScanningCandidateComponentProvider(org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider) ClassPathScanningCandidateComponentProvider(org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider) DefaultResourceConfig(com.sun.jersey.api.core.DefaultResourceConfig) HashSet(java.util.HashSet) FilterRegistrationBean(org.springframework.boot.web.servlet.FilterRegistrationBean) ConditionalOnBean(org.springframework.boot.autoconfigure.condition.ConditionalOnBean) ConditionalOnMissingBean(org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean) Bean(org.springframework.context.annotation.Bean)

Example 4 with Provider

use of javax.ws.rs.ext.Provider in project cxf by apache.

the class JaxrsServletContainerInitializer method onStartup.

@Override
public void onStartup(final Set<Class<?>> classes, final ServletContext ctx) throws ServletException {
    Application app = null;
    String servletName = null;
    String servletMapping = null;
    final Class<?> appClass = findCandidate(classes);
    if (appClass != null) {
        // Custom servlets using non-standard mechanisms to create Application will not be detected
        if (isApplicationServletAvailable(ctx, appClass)) {
            return;
        }
        try {
            app = (Application) appClass.newInstance();
        } catch (Throwable t) {
            throw new ServletException(t);
        }
        // Servlet name is the application class name
        servletName = appClass.getName();
        ApplicationPath appPath = ResourceUtils.locateApplicationPath(appClass);
        // a servlet registration with an application implementation class name
        if (appPath != null) {
            servletMapping = appPath.value() + "/*";
        } else {
            servletMapping = getServletMapping(ctx, servletName);
        }
    }
    // resource and provider classes
    if (app == null || (app.getClasses().isEmpty() && app.getSingletons().isEmpty())) {
        // Custom servlets using non-standard mechanisms to create Application will not be detected
        if (isCxfServletAvailable(ctx)) {
            return;
        }
        final Map<Class<? extends Annotation>, Collection<Class<?>>> providersAndResources = groupByAnnotations(classes);
        if (!providersAndResources.get(Path.class).isEmpty() || !providersAndResources.get(Provider.class).isEmpty()) {
            if (app == null) {
                // Servlet name is a JAX-RS Application class name
                servletName = JAXRS_APPLICATION_SERVLET_NAME;
                // Servlet mapping is obtained from a servlet registration
                // with a JAX-RS Application class name
                servletMapping = getServletMapping(ctx, servletName);
            }
            final Map<String, Object> appProperties = app != null ? app.getProperties() : Collections.emptyMap();
            app = new Application() {

                @Override
                public Set<Class<?>> getClasses() {
                    Set<Class<?>> set = new HashSet<>();
                    set.addAll(providersAndResources.get(Path.class));
                    set.addAll(providersAndResources.get(Provider.class));
                    return set;
                }

                @Override
                public Map<String, Object> getProperties() {
                    return appProperties;
                }
            };
        }
    }
    if (app == null) {
        return;
    }
    CXFNonSpringJaxrsServlet cxfServlet = new CXFNonSpringJaxrsServlet(app);
    final Dynamic servlet = ctx.addServlet(servletName, cxfServlet);
    servlet.addMapping(servletMapping);
}
Also used : Path(javax.ws.rs.Path) ApplicationPath(javax.ws.rs.ApplicationPath) Dynamic(javax.servlet.ServletRegistration.Dynamic) Set(java.util.Set) HashSet(java.util.HashSet) ApplicationPath(javax.ws.rs.ApplicationPath) Annotation(java.lang.annotation.Annotation) Provider(javax.ws.rs.ext.Provider) CXFNonSpringJaxrsServlet(org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet) ServletException(javax.servlet.ServletException) Collection(java.util.Collection) Application(javax.ws.rs.core.Application) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

HashMap (java.util.HashMap)4 Collection (java.util.Collection)3 Map (java.util.Map)3 Provider (javax.ws.rs.ext.Provider)3 InputStream (java.io.InputStream)2 OutputStream (java.io.OutputStream)2 Reader (java.io.Reader)2 Writer (java.io.Writer)2 Annotation (java.lang.annotation.Annotation)2 BigDecimal (java.math.BigDecimal)2 BigInteger (java.math.BigInteger)2 HashSet (java.util.HashSet)2 List (java.util.List)2 Optional.ofNullable (java.util.Optional.ofNullable)2 Collectors (java.util.stream.Collectors)2 Collectors.toList (java.util.stream.Collectors.toList)2 Stream (java.util.stream.Stream)2 JsonArray (javax.json.JsonArray)2 JsonArrayBuilder (javax.json.JsonArrayBuilder)2 JsonBuilderFactory (javax.json.JsonBuilderFactory)2