in meecrowave-core/src/main/java/org/apache/meecrowave/cxf/ConfigurableBus.java [80:148]
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();
instance.getClass().getGenericInterfaces(); // validate bval can be used, check NoClassDefFoundError javax.validation.ValidationException
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);
}
}