Добавь войну к весеннему ботинку со встроенным котом

У меня есть подпружиненное приложение, которое использует встроенный веб-сервер tomcat и использует OpenKM через его SDK.

Теперь у меня есть несколько интеграционных тестов, которые используют restassured lib для выполнения вызовов REST и проверки структуры ответа. Моя идея состоит в том, чтобы интегрировать OpenKM.war в этот встроенный tomcat и сможете запускать эти тесты без необходимости запускать приложение openkm на каком-то другом сервере.

вот как я делаю встроенный tomcat для чтения и развертывания openkm.war:

@Configuration
public class TomcatConfig {
    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }

            @Override
            protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
                new File(tomcat.getServer().getCatalinaBase(), "webapp").mkdirs();
                try {
                    tomcat.addWebapp("/okm", new ClassPathResource("webapp/openkm.war").getFile().toString());
                } catch (Exception ex) {
                    throw new IllegalStateException("Failed to add okm", ex);
                }
                return super.getTomcatWebServer(tomcat);
            }
        };

        tomcat.addAdditionalTomcatConnectors(redirectConnector());
        return tomcat;
    }

    private Connector redirectConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8080);
        connector.setSecure(false);
        connector.setRedirectPort(8443);
        return connector;
    }
}

Развертывание занимает больше времени, чем на автономном веб-сервере tomcat, который поставляется с openkm, но развертывается.

Однако процесс развертывания завершается неудачно с:

IOException parsing XML document from URL [file:/tmp/tomcat.2352216859213135410.8080/openkm.xml]; nested exception is java.io.FileNotFoundException: /tmp/tomcat.2352216859213135410.8080/openkm.xml (No such file or directory)

У меня есть этот файл (плюс server.xml, context.xml) вместе с файлом openkm.war, но кажется, что встроенный tomcat об этом не знает.

Все эти файлы находятся в src/main/resources/webapp,

Итак, я хотел бы знать, какую часть конфигурации я пропускаю или есть ли что-то еще лучше для достижения того, чего я хочу?

Благодарю.

Spring-boot: 2.1.2. ВЫПУСК

0 ответов

Вы можете попробовать сделать что-нибудь вроде:

StandardContext ctx = (StandardContext) tomcat.addWebapp("/okm", new ClassPathResource("webapp/openkm.war").getFile().toString());
WebResourceRoot resources = new StandardRoot(ctx);
resources.addPreResources(new DirResourceSet(resources, "{target mount path}",
        new File("src/main/resources/webapp").getAbsolutePath(), "/"));
ctx.setResources(resources);

Чтобы вы могли src/main/resources/webapp/ папка установлена ​​на {target mount path}в развертывании tomcat. Хотя я не уверен на этом пути? Вы можете попробовать с"/", и возможно "/WEB-INF/"? В настоящее время у меня нет возможности протестировать местное, но я надеюсь, что это как-то поможет.

Вы можете монтировать отдельные файлы с помощью FileResourceSet а также, если вам нужны разные файлы в разных папках в tomcat.

Другие вопросы по тегам