in rest/src/main/java/org/apache/unomi/rest/server/RestServer.java [168:254]
private synchronized void refreshServer() {
long now = System.currentTimeMillis();
LOGGER.info("Time (millis) since last update: {}", now - timeOfLastUpdate);
if (now - timeOfLastUpdate < startupDelay) {
if (refreshTimer != null) {
return;
}
TimerTask task = new TimerTask() {
public void run() {
refreshTimer = null;
refreshServer();
LOGGER.info("Refreshed server task performed on: {} Thread's name: {}", new Date(), Thread.currentThread().getName());
}
};
refreshTimer = new Timer("Timer-Refresh-REST-API");
refreshTimer.schedule(task, startupDelay);
return;
}
if (server != null) {
LOGGER.info("JAX RS Server: Shutting down server...");
server.destroy();
}
if (serviceBeans.isEmpty()) {
LOGGER.info("JAX RS Server: Server not started because no JAX RS EndPoint registered yet");
return;
}
LOGGER.info("JAX RS Server: Configuring server...");
List<Interceptor<? extends Message>> inInterceptors = new ArrayList<>();
List<Interceptor<? extends Message>> outInterceptors = new ArrayList<>();
Map<Class, StdDeserializer<?>> desers = new HashMap<>();
desers.put(ContextRequest.class, new ContextRequestDeserializer(schemaService));
desers.put(EventsCollectorRequest.class, new EventsCollectorRequestDeserializer(schemaService));
// Build the server
ObjectMapper objectMapper = new org.apache.unomi.persistence.spi.CustomObjectMapper(desers);
JAXRSServerFactoryBean jaxrsServerFactoryBean = new JAXRSServerFactoryBean();
jaxrsServerFactoryBean.setAddress("/");
jaxrsServerFactoryBean.setBus(serverBus);
jaxrsServerFactoryBean.setProvider(new JacksonJaxbJsonProvider(objectMapper, JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS));
jaxrsServerFactoryBean.setProvider(new org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter());
jaxrsServerFactoryBean.setProvider(new RetroCompatibilityParamConverterProvider(objectMapper));
// Authentication filter (used for authenticating user from request)
jaxrsServerFactoryBean.setProvider(new AuthenticationFilter(restAuthenticationConfig));
// Authorization interceptor (used for checking roles at methods access directly)
SimpleAuthorizingFilter simpleAuthorizingFilter = new SimpleAuthorizingFilter();
simpleAuthorizingFilter.setInterceptor(new AuthorizingInterceptor(restAuthenticationConfig));
jaxrsServerFactoryBean.setProvider(simpleAuthorizingFilter);
// Exception mappers
for (ExceptionMapper exceptionMapper : exceptionMappers) {
jaxrsServerFactoryBean.setProvider(exceptionMapper);
}
// Open API config
final OpenApiFeature openApiFeature = new OpenApiFeature();
openApiFeature.setContactEmail("dev@unomi.apache.org");
openApiFeature.setLicense("Apache 2.0 License");
openApiFeature.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html");
openApiFeature.setScan(false);
openApiFeature.setUseContextBasedConfig(
true); //Set<String> resourceClasses = serviceBeans.stream().map(service -> service.getClass().getName()).collect(toSet());
OpenApiCustomizer customizer = new OpenApiCustomizer();
customizer.setDynamicBasePath(true);
openApiFeature.setCustomizer(customizer);
jaxrsServerFactoryBean.getFeatures().add(openApiFeature);
// Request validator
inInterceptors.add(new RequestValidatorInterceptor(configSharingService));
// Register service beans (end points) and interceptors
jaxrsServerFactoryBean.setInInterceptors(inInterceptors);
jaxrsServerFactoryBean.setOutInterceptors(outInterceptors);
jaxrsServerFactoryBean.setServiceBeans(serviceBeans);
LOGGER.info("JAX RS Server: Starting server with {} JAX RS EndPoints registered", serviceBeans.size());
server = jaxrsServerFactoryBean.create();
server.getEndpoint().getEndpointInfo().setName(UNOMI_REST_SERVER_END_POINT_NAME);
}