当前位置: 首页 > 知识库问答 >
问题:

Swagger 2.x JaxrsAnnotationScanner找不到位于ear中的资源类

东门宜
2023-03-14

我目前正在尝试用swagger Core记录一个现有的API。我使用swagger Core2.7和resteasy 3,因为我部署在Wildfly10上。我有一个包含rest servlet的war和一些位于ear中的模型类,该ear也包含war。模型类使用@schema进行注释,因此需要依赖于swagger-annotations。我遵循了https://github.com/swagger-api/swagger-core/wiki/swagger-2.x---Integration-and-configuration的教程

因此,我将依赖项添加到WAR的pom.xml中,并将注释模块依赖项添加到包含模型类的模块中。它会编译和部署,但当我浏览/myapp/openapi.yaml时,我在web.xml中定义的每个资源(war中包含的资源除外)的wildfly控制台中看到以下警告

我的web.xml配置:

    <servlet>
    <servlet-name>rserve-resteasy-servlet</servlet-name>
    <servlet-class>
        org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
    </servlet-class>
    <init-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/</param-value>
    </init-param>
    <!-- specify scanner implementation -->
    <init-param>
        <param-name>openApi.configuration.scannerClass</param-name>
        <param-value>io.swagger.v3.jaxrs2.integration.JaxrsAnnotationScanner</param-value>
    </init-param>
    <!-- pretty print -->
    <init-param>
        <param-name>openApi.configuration.prettyPrint</param-name>
        <param-value>true</param-value>
    </init-param>
    <!-- specify resource classes to scan -->
    <init-param>
        <param-name>openApi.configuration.resourceClasses</param-name>
        <param-value>
        rserve.web.RService,
        at.prismasolutions.test.RServeBean.evaluation.REvaluationObject,
        at.prismasolutions.test.RServeBean.evaluation.optima.REvaluationObservationObject,
        at.prismasolutions.test.render.RPlotFormatParam
        </param-value>
    </init-param>
</servlet>

只找到位于war文件中的rserve.web.rservice。有没有使用包含耳朵的资源来设置swagger的经验?

共有1个答案

孙斌
2023-03-14

遗憾的是,我不记得是哪些步骤真正导致了解决这个问题,但我最终从web.xml中删除了resourceClasses(war中包含的服务endpoint类resourceService除外)

我没有使用javax.ws.rs.application的任何派生,而是使用参数resteasy.scan注册资源

我的web.xml配置包含

<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
</context-param>

    <listener>
    <listener-class>
        org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<servlet>
    <servlet-name>rserve-resteasy-servlet</servlet-name>
    <servlet-class>
        org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    <init-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/</param-value>
    </init-param>
    <!-- specify scanner implementation -->
    <init-param>
        <param-name>openApi.configuration.scannerClass</param-name>
        <param-value>io.swagger.v3.jaxrs2.integration.JaxrsAnnotationScanner</param-value>
    </init-param>
    <!-- pretty print -->
    <init-param>
        <param-name>openApi.configuration.prettyPrint</param-name>
        <param-value>true</param-value>
    </init-param>
    <!-- specify resource classes to scan -->
    <init-param>
        <param-name>openApi.configuration.resourceClasses</param-name>
        <param-value> rweb.RService </param-value>
    </init-param>
</servlet>

看一看:

例如jboss ClassLoading:ear中的类不能引用war类加载器加载的类

类依赖项引用不同的类,因为它们注册了两次(war类加载器、ear类加载器)

 类似资料:
  • 我正在做一个项目,编译并运行我的IDE工作正常。所有资源都找到了,它正常工作。然而,当我构建我的. jar时,它能够找到一些资源,但不是全部。我的项目结构看起来是这样的: 当我运行jar文件时,它能够找到图像并使用它们,但是当我尝试访问html文件时,它不会打开。下面是jar的项目结构; 我以前从未处理过jar文件,所以这似乎是我犯的一个非常明显的错误。感谢您的帮助,谢谢! 编辑:访问找不到的文件

  • 我正在使用ADT 我的styles.xml:

  • 问题内容: 出了点问题,这非常令人沮丧。我在Velocity的主页上读到,当我运行webapp时,应设置一些属性。我已经做到了,但是无论我做什么,我都会遇到相同的错误。 这是我设置道具并使用速度的地方 这些文件当然保存在/ WEB-INF / mailtemplates /中。 如果我用这个我得到这个错误: 感谢您的时间:) 问题答案: 您正在使用Webapp资源加载器,该资源加载器适用于Velo

  • 我使用Eclipse Oxygen.2发行版(4.7.2),并尝试开发一个纸笔字符创建程序,作为学习使用xml和属性等不同文件的练习。 我的resbundle.properties-file如下所示: 它长得多,有60行代码,类似于所示的部分。我的主JFrame使用如下所示的文件: 对于这个问题,我找到的大多数答案都涉及同样的例外。但是它们只告诉我如何将属性文件移动到源代码foulder/clas

  • 我正在使用Spring Boot gradle插件构建一个可执行的war。我有一个好消息来源。src/main/resources中的java类来定位文件: 当我执行gradle构建时,我得到一个错误,即类FindResource无法解析。我是否需要Spring Boot gradle插件,它还应该使用resources目录中的类。我该怎么做? 我的身材。gradle如下所示:

  • 问题内容: 我在使用findViewById(id)时遇到了一个奇怪的问题。即使资源肯定存在,它也会返回未找到的资源。它是布局中的一个Textview,与另一个textview相邻,我可以通过id找到其中一个textview,但另一个显示未找到资源。有什么可能会发生这种情况吗? 问题答案: 尝试清理您的项目或发布一些代码。 如果您正在使用Eclipse,则有时无法正确地重新生成ID。这需要清理项目