Skip to content

Commit 0459911

Browse files
committed
OfflineEventReplicator in Spring Boot
The mechanism of interpreting the .services of the external REST services was not working for the spring boot case. In particular this causes the OfflineEventReplicator service to not work Issue: 206569
1 parent 012c8d2 commit 0459911

File tree

4 files changed

+48
-4
lines changed

4 files changed

+48
-4
lines changed

gxspringboot/src/main/java/com/genexus/springboot/GXConfig.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,13 @@
66
import com.genexus.diagnostics.core.LogManager;
77
import com.genexus.servlet.CorsFilter;
88
import com.genexus.xml.GXXMLSerializable;
9+
910
import jakarta.annotation.PreDestroy;
11+
import jakarta.servlet.Servlet;
12+
import org.glassfish.jersey.server.ResourceConfig;
13+
import org.glassfish.jersey.servlet.ServletContainer;
1014
import org.springframework.boot.web.servlet.FilterRegistrationBean;
15+
import org.springframework.boot.web.servlet.ServletRegistrationBean;
1116
import org.springframework.beans.factory.annotation.Value;
1217
import org.springframework.context.annotation.Bean;
1318
import org.springframework.context.annotation.Configuration;
@@ -19,6 +24,8 @@
1924
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
2025
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;
2126

27+
import java.util.Set;
28+
2229
@Configuration
2330
@EnableWebMvc
2431
public class GXConfig implements WebMvcConfigurer {
@@ -82,6 +89,20 @@ public FilterRegistrationBean<UrlRewriteFilter> urlRewriteFilter() {
8289
return registrationBean;
8390
}
8491

92+
@Bean
93+
public ServletRegistrationBean<Servlet> jerseyServletRegistration() {
94+
ResourceConfig rc = new ResourceConfig();
95+
Set<Class<?>> rrcs = JaxrsResourcesHolder.getAll();
96+
if (!rrcs.isEmpty()) {
97+
rc.registerClasses(rrcs.toArray(new Class<?>[0]));
98+
}
99+
ServletContainer container = new ServletContainer(rc);
100+
ServletRegistrationBean<Servlet> bean = new ServletRegistrationBean<>(container, "/rest/*");
101+
bean.setName("jersey-servlet");
102+
bean.setLoadOnStartup(1);
103+
return bean;
104+
}
105+
85106
@PreDestroy
86107
public void onDestroy() {
87108
GXXMLSerializable.classesCacheMethods.clear();

gxspringboot/src/main/java/com/genexus/springboot/GXImportSelector.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import java.io.IOException;
88
import java.io.InputStream;
99
import java.util.ArrayList;
10+
import java.util.HashSet;
11+
import java.util.Set;
1012

1113
import org.springframework.context.annotation.ImportSelector;
1214
import org.springframework.core.io.ClassPathResource;
@@ -20,26 +22,28 @@ public class GXImportSelector implements ImportSelector {
2022
@Override
2123
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
2224
ArrayList<String> restImports = new ArrayList<>();
25+
Set<Class<?>> rrcs = new HashSet<Class<?>>();
2326
try {
2427
Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath*:*.services");
2528
for (Resource resource : resources) {
26-
selectImport(restImports, resource.getFilename());
29+
selectImport(rrcs, restImports, resource.getFilename());
2730
}
2831
}
2932
catch (IOException e){
3033
logger.error("Error loading External Services classes ", e);
3134
}
3235

36+
JaxrsResourcesHolder.setAll(rrcs);
3337
addWebSocketsImport(restImports);
3438

3539
return restImports.toArray(new String[0]);
3640
}
3741

38-
private void selectImport(ArrayList<String> restImports, String servicesClassesFileName) {
42+
private void selectImport(Set<Class<?>> rrcs, ArrayList<String> restImports, String servicesClassesFileName) {
3943
try {
4044
InputStream is = new ClassPathResource(servicesClassesFileName).getInputStream();
4145
if (is != null) {
42-
WebUtils.AddExternalServicesFile(null, restImports, is);
46+
WebUtils.AddExternalServicesFile(rrcs, restImports, is);
4347

4448
is.close();
4549
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.genexus.springboot;
2+
3+
import java.util.LinkedHashSet;
4+
import java.util.Set;
5+
6+
public final class JaxrsResourcesHolder {
7+
private static final Set<Class<?>> RESOURCES = new LinkedHashSet<>();
8+
private JaxrsResourcesHolder() {}
9+
10+
public static void setAll(Set<Class<?>> rrcs) {
11+
RESOURCES.clear();
12+
if (rrcs != null) RESOURCES.addAll(rrcs);
13+
}
14+
15+
public static Set<Class<?>> getAll() {
16+
return new LinkedHashSet<>(RESOURCES);
17+
}
18+
}
19+

java/src/main/java/com/genexus/webpanels/WebUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ public static void AddExternalServicesFile(Set<Class<?>> rrcs, ArrayList<String>
523523
if (serviceClass != null)
524524
if (rrcs != null)
525525
rrcs.add(serviceClass);
526-
else
526+
if (restImports != null)
527527
restImports.add(serviceClass.getName());
528528
}
529529
reader.close();

0 commit comments

Comments
 (0)