代码之家  ›  专栏  ›  技术社区  ›  zappee

将Wiremock作为war部署到Weblogic时的验证问题

  •  0
  • zappee  · 技术社区  · 7 年前

    我需要将Wiremock作为一个WAR部署到weblogic12.2.1.2,但是在部署过程中我得到了一个很长的异常。 web.xml 文件来自 sample-war project 来自git。

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

    我可以将我的WAR部署到tomcat9.x上,一切正常。 但是我需要使用Weblogic,同样的战争在那里不起作用。这是我得到的长长的例外的开始:

    ####<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 回复  |  直到 7 年前
        1
  •  2
  •   zappee    7 年前

    要使用WireMock 2.19.0创建工作WAR文件,需要执行以下步骤:

    问题(1) :

    说明@ http://xmlns.jcp.org/xml/ns/javaee in元素 监听器@

    解决方案:删除 description listener web.xml 文件。

    问题(2)

    java.lang.NullPointerException位于com.github.tomakehurst.wiremock.common.ServletContextFileSource.getRootFile(ServletContextFileSource)。java:35)

    解决方案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) :

    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>
    

    问题(5) :

    <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>
    

    删除WireMock管理服务。

    删除 wiremock-admin-handler-servlet servlet-mapping 配置来自 WEB\ INF/weblogic.xml 文件。

    通过以上步骤,您可以构建一个可部署到WebLogic12.2.x服务器的WAR。