osgi - 将 Swagger 2.0 与 Glassfish 4.1 OSGi REST 项目集成

标签 osgi jax-rs swagger jersey-2.0 glassfish-4

我是否需要专门包含 JAX-RS 和 HttpServlet jar 才能将 Swagger 2.0 集成到我的 JAX-RS 项目中?

我试图展示我按照以下规范开发的 RESTful 服务:

  • Java
  • NetBeans IDE 8.0.2 [Maven]
  • OSGi 4.2
  • 项目以 JSON 格式交换信息
  • 玻璃鱼4.1
  • JAX-RS 2.0
  • Jersey 2.0

该项目成功部署到 Glassfish 上,但是当调用任何 REST 服务时,它会抛出错误 404。服务器日志提示类加载错误,特别是 javax.ws.rs.*(尽管有 javax.ws.rs -提供的api),并产生 java.lang.NoClassDefFoundError:javax/ws/rs/core/Application

pom.xml -- Maven 捆绑插件

<plugin>
              <groupId>org.apache.felix</groupId>
              <artifactId>maven-bundle-plugin</artifactId>
              <version>2.5.4</version>
              <extensions>true</extensions>
              <configuration>
                  <supportedProjectTypes>
                      <supportedProjectType>ejb</supportedProjectType>
                      <supportedProjectType>war</supportedProjectType>
                      <supportedProjectType>bundle</supportedProjectType>
                      <supportedProjectType>jar</supportedProjectType>
                  </supportedProjectTypes>
                  <instructions>
                      <!-- Specify elements to add to MANIFEST.MF -->
                         <Web-ContextPath>/sample</Web-ContextPath>
                      <!-- By default, nothing is exported -->
                         <!--<Export-Package>!*.impl.*, *</Export-Package>-->
                         <Import-Package>
                             !com.sun*;resolution:=optional,
                             !javassist*;resolution:=optional,
                             !groovy*;resolution:=optional,
                             !javax.microedition*;resolution:=optional,
                             !org.apache*;resolution:=optional,
                             !org.codehaus*;resolution:=optional,
                             !nu.xom;resolution:=optional,
                             !org*;resolution:=optional,*
                         </Import-Package>
                         <Bundle-ClassPath>.,WEB-INF/classes,WEB-INF/lib/slf4j-api-1.7.12.jar,WEB-INF/lib/slf4j-jdk14-1.7.12.jar,{maven-dependencies}</Bundle-ClassPath>
                         <Embed-Dependency>
                             annotations,asm-all-repackaged,cglib,
                             aopalliance-repackaged,commons-lang3,commons-vfs2,
                             dom4j,gson,guava,
                             hk2-api,hk2-locator,hk2-utils,
                             jackson-core,jackson-annotations,jackson-databind,
                             jackson-dataformat-yaml,jackson-dataformat-xml,
                             jackson-datatype-joda,jackson-jaxrs-base,
                             jackson-jaxrs-json-provider,
                             jackson-module-jaxb-annotations,
                             javaee-web-api,
                             javassist,
                             javax.ws.rs-api,
                             javax.annotation-api,javax.inject,javax.json-api,
                             javax.servlet-api,
                             jaxen,jaxb-api,
                             jersey-client,jersey-common,jersey-server,
                             jersey-container-servlet-core,
                             jersey-media-multipart,
                             joda-convert,joda-time,jsch,jsr311-api,jzlib,
                             logback-classic,logback-core,
                             mongo-java-driver,maven,mimepull,
                             org.apache.felix.scr.annotations,
                             org.apache.servicemix.bundles.commons-httpclient,
                             org.osgi.compendium,org.osgi.core,
                             osgi-cdi-api,osgi-resource-locator,
                             pull-parser,reflections,
                             slf4j-api,slf4j-jdk14,
                             snakeyaml,stax2-api,
                             swagger-annotations,swagger-core,swagger-jaxrs,
                             swagger-jersey2-jaxrs,swagger-models,
                             validation-api;
                             scope=compile|runtime;
                         </Embed-Dependency>
                         <Embed-Transitive>true</Embed-Transitive>
                  </instructions>
              </configuration>
              <executions>
                  <execution>
                      <id>bundle-manifest</id>
                      <phase>process-classes</phase>
                      <goals>
                          <goal>manifest</goal>
                      </goals>
                  </execution>
                  <execution>
                      <id>bundle-install</id>
                      <phase>install</phase>
                      <goals>
                          <goal>install</goal>
                      </goals>
                  </execution>
              </executions>
            </plugin>

目前已完成的工作:

  • 更新了 Glassfish 4.1 以包含 Jersey 2 和 JAX-RS 2
  • 所有 Jersey-Glassfish 依赖项均标记为“已提供”
  • 解决了重复的依赖关系

最佳答案

确保 javax.ws.rs.* 包由系统 bundle 提供。您可以连接到OSGi Module Management Subsystem使用 Felix Gogo Remote Shell 运行 glassfish 并使用内置命令查询注册表。

关于osgi - 将 Swagger 2.0 与 Glassfish 4.1 OSGi REST 项目集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32788902/

相关文章:

java - Eclipse 插件不会从 RESOLVED 变为 ACTIVE

maven - 计划在 maven-bundle-plugin 中支持 "Require-Bundle"

redis - OSGi Redis 共享池配置

java - ContainerRequestFilter 返回实体的错误内容类型

json - Swagger 在本地运行但不在 IIS 上运行,不解析基本路径

typescript - Swagger 的 bool 值作为字符串而不是 NestJS 中的 bool 值发送

java - bndtools/osgi 中 Unresolved 要求 : Import-Package: org. apache.commons.codec.language

java - 构建 URI 以使用 REST 服务

java - 使用 ClientBuilder 发送 JSON 正文,但使用 ContentType=application/x-www-form-urlencoded

import - 服务堆栈 Swagger 2.0 和 Azure Api 管理导入