Проблема валидации при развертывании Wiremock в Weblogic как война - PullRequest
0 голосов
/ 17 октября 2018

Мне нужно развернуть Wiremock в качестве WAR для Weblogic 12.2.1.2, но во время развертывания я получаю длинное исключение.Я использую файл web.xml из проекта sample-war из git.

В моем файле pom.xml я использую только следующую зависимость:

<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock</artifactId>
    <version>2.19.0</version>
</dependency>

Я могу развернуть свою WAR в Tomcat 9.x, и все работает отлично.Но мне нужно использовать Weblogic и та же самая WAR там не работает.Это начало длинного исключения, которое я получаю:

####<oct 16, 2018, 10:03:26,646 DU CEST> <Error> <Munger> <mylinux> <AdminServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <weblogic> <> <00dcc5b7-e294-4d36-943a-2d6d188fdd23-00000013> <1539720206646> <[severity-value: 8] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-2156200> <Unable to load descriptor /home/user/servers/oracle/weblogic/12.2.1.2.0/user_projects/domains/base_domain/servers/AdminServer/tmp/.appmergegen_1539720205648_wire-mock-demo-1.0-SNAPSHOT.war/WEB-INF/web.xml of module wire-mock-demo-1.0-SNAPSHOT.war. The error is weblogic.descriptor.DescriptorException: VALIDATION PROBLEMS WERE FOUND
  <7:11> problem: cvc-complex-type.2.4b: Element not allowed: description@http://xmlns.jcp.org/xml/ns/javaee in element listener@http://xmlns.jcp.org/xml/ns/javaee
at weblogic.descriptor.internal.MarshallerFactory$1.evaluateResults(MarshallerFactory.java:245)
at weblogic.descriptor.internal.MarshallerFactory$1.evaluateResults(MarshallerFactory.java:231)
at weblogic.descriptor.internal.MarshallerFactory$1.createDescriptor(MarshallerFactory.java:155)
at weblogic.descriptor.BasicDescriptorManager.createDescriptor(BasicDescriptorManager.java:345)
at weblogic.descriptor.BasicDescriptorManager.createDescriptor(BasicDescriptorManager.java:307)
at weblogic.application.descriptor.AbstractDescriptorLoader2.getDescriptorBeanFromReader(AbstractDescriptorLoader2.java:870)
at weblogic.application.descriptor.AbstractDescriptorLoader2.createDescriptorBean(AbstractDescriptorLoader2.java:445)
at weblogic.application.descriptor.AbstractDescriptorLoader2.loadDescriptorBeanWithoutPlan(AbstractDescriptorLoader2.java:832)
at weblogic.application.descriptor.AbstractDescriptorLoader2.loadDescriptorBean(AbstractDescriptorLoader2.java:841)
at weblogic.servlet.internal.WebAppDescriptor.getWebAppBean(WebAppDescriptor.java:145)
at weblogic.servlet.utils.WarUtils.getWebAppBean(WarUtils.java:201)
at weblogic.servlet.tools.WARModule.loadDescriptors(WARModule.java:451)
at weblogic.servlet.tools.WARModule.merge(WARModule.java:520)
at weblogic.application.compiler.ToolsModuleWrapper.merge(ToolsModuleWrapper.java:96)
at weblogic.application.utils.CustomModuleManager.merge(CustomModuleManager.java:78)
at weblogic.application.compiler.flow.SingleModuleMergeFlow.proecessModule(SingleModuleMergeFlow.java:27)
at weblogic.application.compiler.flow.SingleModuleFlow.compile(SingleModuleFlow.java:64)
at weblogic.application.compiler.FlowDriver$FlowStateChange.next(FlowDriver.java:70)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)

Я проверил упомянутый файл web.xm, но это совершенно нормально.Я пытался использовать web.xml v3.0 и 3.1.Они оба не работают.Кажется, что настоящая проблема не в файле web.xml.От слушателя исходит: com.github.tomakehurst.wiremock.servlet.WireMockWebContextListener

Есть ли идеи, что здесь не так и как это исправить?

1 Ответ

0 голосов
/ 05 ноября 2018

Чтобы получить рабочий файл WAR с WireMock 2.19.0, необходимо выполнить следующие шаги:

Issue (1) :

Элемент не разрешен: описание @ http://xmlns.jcp.org/xml/ns/javaee в элементе прослушивания @ http://xmlns.jcp.org/xml/ns/javaee

Решение: удалить тег description из раздела listener файла web.xml.

Issue (2) :

java.lang.NullPointerException на com.github.tomakehurst.wiremock.common.ServletContextFileSource.getRootFile (ServletContextFileSource.java:35)

Решение: 1:Консоль администрирования Weblogic> Домен> Веб-приложения> установите флажок «Включен реальный путь к архиву»

Решение 2: добавьте файл weblogic.xml в каталог WEB_INF, содержимое:

<weblogic-web-app>
    <container-descriptor>
        <show-archived-real-path-enabled>true</show-archived-real-path-enabled>
    </container-descriptor>
</weblogic-web-app>

Проблема (3) :

Конфликты путей к классам

Добавление prefer-application-packages в WEB_INF/weblogic.xml файл:

<prefer-application-packages>
    <package-name>com.fasterxml.jackson.*</package-name>
    <package-name>com.google.common.*</package-name>
    <package-name>com.google.thirdparty.*</package-name>
    <package-name>net.minidev.json.*</package-name>
</prefer-application-packages>

Проблема (4):

Изменить URL-адрес сопоставления WireMockHandlerDispatchingServlet:

<servlet>
    <servlet-name>wiremock-mock-service-handler-servlet</servlet-name>
    ...
    <init-param>
        <param-name>mappedUnder</param-name>
        <param-value>/mapping</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>wiremock-mock-service-handler-servlet</servlet-name>
    <url-pattern>/mapping/*</url-pattern>
</servlet-mapping>

Issue (5) :

Исключить зависимости, связанные с Jetty:

<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock</artifactId>
    <version>2.19.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlet</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlets</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-webapp</artifactId>
        </exclusion>
    </exclusions>
</dependency>

+ 1

Удалить службу администратора WireMock.

Удалить сервлет wiremock-admin-handler-servlet и его конфигурацию servlet-mapping из файла WEB_INF/weblogic.xml.

С помощью описанных выше шагов вы можете создать WAR-файл, который можно развернуть на сервере Weblogic 12.2.x.

...