Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Helidon MP OpenAPI aren';t生成更新的openapi端点响应_Java_Openapi_Microprofile_Helidon - Fatal编程技术网

Java Helidon MP OpenAPI aren';t生成更新的openapi端点响应

Java Helidon MP OpenAPI aren';t生成更新的openapi端点响应,java,openapi,microprofile,helidon,Java,Openapi,Microprofile,Helidon,我目前正在根据Oracle自身的指南和教程基于Helidon Micropofile构建一个微服务,但在使用注释时遇到了与“自动OpenAPI规范生成器”相关的问题 我的POM由一个MP包和集成组成,以使其与Hibernate提供的JPA一起工作 即使在我的资源上设置了所有注释,它也不会生成更新的规范 POM <dependencies> <dependency> <groupId>io.helidon.microprofile.bu

我目前正在根据Oracle自身的指南和教程基于Helidon Micropofile构建一个微服务,但在使用注释时遇到了与“自动OpenAPI规范生成器”相关的问题

我的POM由一个MP包和集成组成,以使其与Hibernate提供的JPA一起工作

即使在我的资源上设置了所有注释,它也不会生成更新的规范

POM

 <dependencies>
    <dependency>
        <groupId>io.helidon.microprofile.bundles</groupId>
        <artifactId>helidon-microprofile</artifactId>
        <version>1.4.0</version>
    </dependency>

    <dependency>
        <groupId>org.jboss</groupId>
        <artifactId>jandex</artifactId>
        <version>2.1.1.Final</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>io.helidon.integrations.cdi</groupId>
        <artifactId>helidon-integrations-cdi-datasource-hikaricp</artifactId>
        <version>1.4.0</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>io.helidon.integrations.cdi</groupId>
        <artifactId>helidon-integrations-cdi-jta-weld</artifactId>
        <version>1.4.0</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>io.helidon.integrations.cdi</groupId>
        <artifactId>helidon-integrations-cdi-hibernate</artifactId>
        <version>1.4.0</version>
    </dependency>

    <dependency>
        <groupId>javax.transaction</groupId>
        <artifactId>javax.transaction-api</artifactId>
        <version>1.3</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>jakarta.persistence</groupId>
        <artifactId>jakarta.persistence-api</artifactId>
        <version>2.2.3</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.mariadb.jdbc</groupId>
        <artifactId>mariadb-java-client</artifactId>
        <version>2.5.2</version>
    </dependency>

    <dependency>
        <groupId>com.googlecode.json-simple</groupId>
        <artifactId>json-simple</artifactId>
        <version>1.1.1</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.29.1</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>com.auth0</groupId>
        <artifactId>java-jwt</artifactId>
        <version>3.8.3</version>
    </dependency>

    <dependency>
        <groupId>com.auth0</groupId>
        <artifactId>jwks-rsa</artifactId>
        <version>0.9.0</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.5.2</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.5.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>
日志

Connected to the target VM, address: '127.0.0.1:0', transport: 'socket'
Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
2019.12.02 20:01:19 INFO org.jboss.weld.Version Thread[main,5,main]: WELD-000900: 3.1.1 (Final)
2019.12.02 20:01:20 INFO org.jboss.weld.Bootstrap Thread[main,5,main]: WELD-ENV-000020: Using jandex for bean discovery
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.jboss.weld.util.bytecode.ClassFileUtils$1 (file:/C:/Users/Brenno%20Fagundes/.m2/repository/org/jboss/weld/weld-core-impl/3.1.1.Final/weld-core-impl-3.1.1.Final.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
WARNING: Please consider reporting this to the maintainers of org.jboss.weld.util.bytecode.ClassFileUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2019.12.02 20:01:21 INFO org.jboss.weld.Event Thread[main,5,main]: WELD-000411: Observer method [BackedAnnotatedMethod] public org.glassfish.jersey.ext.cdi1x.internal.ProcessAllAnnotatedTypes.processAnnotatedType(@Observes ProcessAnnotatedType<?>, BeanManager) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
2019.12.02 20:01:21 INFO org.jboss.weld.Event Thread[main,5,main]: WELD-000411: Observer method [BackedAnnotatedMethod] private io.helidon.microprofile.openapi.IndexBuilder.processAnnotatedType(@Observes ProcessAnnotatedType<X>) receives events for all annotated types. Consider restricting events using @WithAnnotations or a generic type with bounds.
2019.12.02 20:01:22 INFO org.jboss.weld.Bootstrap Thread[main,5,main]: WELD-ENV-002003: Weld SE container 404f642b-892f-4676-960e-8df848aee3a3 initialized
2019.12.02 20:01:22 INFO io.helidon.microprofile.security.SecurityMpService Thread[main,5,main]: Security extension for microprofile is enabled, yet security configuration is missing from config (requires providers configuration at key security.providers). Security will not have any valid provider.
2019.12.02 20:01:22 INFO io.smallrye.openapi.api.OpenApiDocument Thread[main,5,main]: OpenAPI document initialized: io.smallrye.openapi.api.models.OpenAPIImpl@7793ad58
2019.12.02 20:01:23 INFO io.helidon.webserver.NettyWebServer Thread[main,5,main]: Version: 1.4.0
2019.12.02 20:01:24 INFO io.helidon.webserver.NettyWebServer Thread[nioEventLoopGroup-2-1,10,main]: Channel '@default' started: [id: 0x4e1f119b, L:/0:0:0:0:0:0:0:0:7200]
2019.12.02 20:01:24 INFO io.helidon.microprofile.server.ServerImpl Thread[nioEventLoopGroup-2-1,10,main]: Server initialized on http://localhost:7200 (and all other host addresses) in 5254 milliseconds.
布伦诺

您没有显示更新的源代码,但我假设您已将
@OpenAPIDefinition
注释添加到quickstart
GreetResource
类中,对吗

该注释的属性描述整个应用程序,而不是其资源的子集,因此请尝试将注释移动到
GreetApplication
类:

@ApplicationScoped
@ApplicationPath("/")
@OpenAPIDefinition(info = @Info(title = "QuickStart API", version = "1.1"))

public class GreetApplication extends Application {...}

这应该行得通。我只是在生成的Helidon MP quickstart示例源代码上尝试了这一点,然后重新生成,服务器返回了预期的结果

以下是我所做更改的区别:

diff --git a/examples/quickstarts/helidon-quickstart-mp/src/main/java/io/helidon/examples/quickstart/mp/GreetApplication.java b/examples/quickstarts/helidon-quickstart-mp/src/main/java/io/helidon/examples/quickstart/mp/GreetApplication.java
index fd140738..cca60da2 100644
--- a/examples/quickstarts/helidon-quickstart-mp/src/main/java/io/helidon/examples/quickstart/mp/GreetApplication.java
+++ b/examples/quickstarts/helidon-quickstart-mp/src/main/java/io/helidon/examples/quickstart/mp/GreetApplication.java
@@ -23,12 +23,15 @@ import javax.ws.rs.ApplicationPath;
 import javax.ws.rs.core.Application;

 import io.helidon.common.CollectionsHelper;
+import org.eclipse.microprofile.openapi.annotations.OpenAPIDefinition;
+import org.eclipse.microprofile.openapi.annotations.info.Info;

 /**
  * Simple Application that produces a greeting message.
  */
 @ApplicationScoped
 @ApplicationPath("/")
+@OpenAPIDefinition(info = @Info(title = "QuickStart API", version = "1.1"))
 public class GreetApplication extends Application {

     @Override
以下是从服务器返回的更新后的OpenAPI文档的开头:

---
openapi: 3.0.1
info:
  title: QuickStart API
  version: "1.1"
paths:

标题和版本已按预期更改。

案例1:您正在使用jandex,而您的
/openapi
未得到更新

如果您使用的是jandex,那么您的jandex.idx很可能没有得到更新。您可以通过运行
mvn进程类

案例2:您没有使用jandex,当您点击
/openapi
时,您会得到一些空白响应

这似乎是Helidon的问题。依赖项
helidon集成cdi jpa、helidon集成cdi jta、helidon集成cdi eclipselink等。
包含
jandex.idx
,helidon现在认为jandex已启用,并且
将仅从那些jandex文件中读取,跳过您的资源。因此,目前,您可以使用jandex插件来解决这个问题。

我在资源类而不是应用程序类中定义了@OpenAPIDefinition。我已将定义更改到正确的位置,但仍然不起作用,而且日志和我的资源标题也添加到了问题中。您添加到帖子中的代码示例在资源类上有
@OpenAPIDefinition
,而不是它应该在的应用程序类上。注释本身看起来不错,但如果代码就是这样,那么它仍然在错误的类上。正如我提到的,当我将注释的简单版本添加到quickstart应用程序类中时,它被正确处理,因此您应该会看到相同的结果。我已将注释移动到应用程序类中,但没有新的结果。您可以共享源代码吗?它应该会起作用。我已经更新了我的初始答案,以包括我所做更改的差异。在更改之前,
http://localhost:8080/openapi
是默认值。更改后,输出的开头与新添加的注释相同。将整个应用程序类代码添加到原始post+生成的文件中。事实上,事情比这更微妙。jandex插件中的一个bug阻止它将多个JAR中的类信息收集到索引中。此问题更详细地解释了:。对此,Helidon无能为力。
@ApplicationScoped
@ApplicationPath("/")
@OpenAPIDefinition(info = @Info(title = "QuickStart API", version = "1.1"))

public class GreetApplication extends Application {...}

diff --git a/examples/quickstarts/helidon-quickstart-mp/src/main/java/io/helidon/examples/quickstart/mp/GreetApplication.java b/examples/quickstarts/helidon-quickstart-mp/src/main/java/io/helidon/examples/quickstart/mp/GreetApplication.java
index fd140738..cca60da2 100644
--- a/examples/quickstarts/helidon-quickstart-mp/src/main/java/io/helidon/examples/quickstart/mp/GreetApplication.java
+++ b/examples/quickstarts/helidon-quickstart-mp/src/main/java/io/helidon/examples/quickstart/mp/GreetApplication.java
@@ -23,12 +23,15 @@ import javax.ws.rs.ApplicationPath;
 import javax.ws.rs.core.Application;

 import io.helidon.common.CollectionsHelper;
+import org.eclipse.microprofile.openapi.annotations.OpenAPIDefinition;
+import org.eclipse.microprofile.openapi.annotations.info.Info;

 /**
  * Simple Application that produces a greeting message.
  */
 @ApplicationScoped
 @ApplicationPath("/")
+@OpenAPIDefinition(info = @Info(title = "QuickStart API", version = "1.1"))
 public class GreetApplication extends Application {

     @Override
---
openapi: 3.0.1
info:
  title: QuickStart API
  version: "1.1"
paths: