API 在 WSO2 中构建失败 API Microgateway 3.1.0

API build fails in WSO2 API Microgateway 3.1.0

我是 WSO2 微网关的新手,正在按照文档中给出的步骤进行操作:“https://docs.wso2.com/display/MG310/Quick+Start+Guide+-+Binary”,用于通过微网关公开 Petstore 服务.

我能够使用步骤中给出的 swagger 文件初始化 API。 Petstore 项目也创建在项目目录下。但是当我尝试按照步骤 1.2 中给出的方式构建项目时,它失败并出现如下所示的错误。需要解决此问题的建议。

在 ballerina-internal.log 文件中,我得到以下错误。

[2020-07-16 21:13:19,009] 严重 {b7a.log.crash} - 数组索引超出范围:0 java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:0 在 org.ballerinalang.nativeimpl.jvm.interop.JMethodResolver.validateArgumentTypes(JMethodResolver.java:194) 在 org.ballerinalang.nativeimpl.jvm.interop.JMethodResolver.validateMethodSignature(JMethodResolver.java:148) 在 org.ballerinalang.nativeimpl.jvm.interop.JMethodResolver.resolve(JMethodResolver.java:107) 在 org.ballerinalang.nativeimpl.jvm.interop.JInteropMethodValidator.resolveJMethod(JInteropMethodValidator.java:74) 在 org.ballerinalang.nativeimpl.jvm.interop.JInteropMethodValidator.validateAndGetJMethod(JInteropMethodValidator.java:61) 在 ballerina.jvm.$value$InteropValidator.validateAndGetJMethod(interop.bal:90) 在 ballerina.jvm.$value$InteropValidator.call(interop.bal) 在 ballerina.compiler_backend_jvm.interop.interop_method_gen.createJMethodWrapper(interop/interop_method_gen.bal:136) 在 ballerina.compiler_backend_jvm.interop.interop_method_gen.createJInteropFunctionWrapper(interop/interop_method_gen.bal:128) 在 ballerina.compiler_backend_jvm.interop.external_method_gen.createExternalFunctionWrapper(interop/external_method_gen.bal:180) 在 ballerina.compiler_backend_jvm.jvm_package_gen.generateClassNameMappings(jvm_package_gen.bal:477) 在 ballerina.compiler_backend_jvm.jvm_package_gen.generatePackage(jvm_package_gen.bal:149) 在 ballerina.compiler_backend_jvm.jvm_package_gen.generateDependencyList(jvm_package_gen.bal:120) 在 ballerina.compiler_backend_jvm.jvm_package_gen.generatePackage(jvm_package_gen.bal:142) 在 ballerina.compiler_backend_jvm.jvm_package_gen.generateDependencyList(jvm_package_gen.bal:120) 在 ballerina.compiler_backend_jvm.jvm_package_gen.generatePackage(jvm_package_gen.bal:142) 在 ballerina.compiler_backend_jvm.jvm_package_gen.generateDependencyList(jvm_package_gen.bal:120) 在 ballerina.compiler_backend_jvm.jvm_package_gen.generatePackage(jvm_package_gen.bal:142) 在 ballerina.compiler_backend_jvm.jvm_package_gen.generateDependencyList(jvm_package_gen.bal:120) 在 ballerina.compiler_backend_jvm.jvm_package_gen.generatePackage(jvm_package_gen.bal:142) 在 ballerina.compiler_backend_jvm.main.generateJarBinary(main.bal:86) 在 ballerina.compiler_backend_jvm.main.main(main.bal:60) 在 ballerina.compiler_backend_jvm.___init.$lambda$main$(compiler_backend_jvm) 在 ballerina.compiler_backend_jvm.___init$$Lambda$11.000000001107AEE0.apply(来源不明) 在 org.ballerinalang.jvm.scheduling.SchedulerItem.execute(Scheduler.java:426) 在 org.ballerinalang.jvm.scheduling.Scheduler.run(Scheduler.java:218) 在 org.ballerinalang.jvm.scheduling.Scheduler.run 安全 (Scheduler.java:191) 在 org.ballerinalang.jvm.scheduling.Scheduler$$Lambda$6.0000000010F6DAF0.run(来源不明) 在 java.lang.Thread.run(Thread.java:813)

查看评论中的回复,看起来外部 jdk 与 mgw 不完全兼容。虽然不确定确切的原因。这里有一些关于构建命令期间发生的事情的更多背景知识以及强制 mgw 使用内部 jdk.

的可能解决方法

所有 mgw 发行版 (toolkit/runtime) 包括二进制发行版,内部包含一个 jdk,它与 mgw 中使用的 ballerina 版本完全兼容。但是,在执行 mgw 工具包命令期间,它会检查外部安装的 jdks(通过查看 JAVA_HOME 变量),如果在系统中找到兼容版本,则将其选为 jdk。否则它将使用内部 jdk.

因此,为了避免 mgw 获取外部 jdk,我们应该将 JAVA_HOME 变量设置为“”或无效位置。为此,请打开 <TOOLKIT_HOME>/bin 目录中的 micro-gw.bat(假设您在 windows)文件,并在 SET HOME_CACHE=%MICROGW_HOME%\lib\gateway-balo 之后的第 55 行附近添加 SET JAVA_HOME= 作为命令。更改代码块后,上面一行将如下所示。

.
.
.
SET PATH=%BALLERINA_HOME%\bin\;%PATH%
SET JAVA_PATH=%MICROGW_HOME%\lib\jdk8u202-b08-jre
SET HOME_CACHE=%MICROGW_HOME%\lib\gateway-balo

REM ******* Below is the line we added to reset the JAVA_HOME *******
SET JAVA_HOME=

REM Check JAVA availability
if EXIST "%JAVA_HOME%" (
    ECHO JAVA_HOME: %JAVA_HOME%
.
.
.

保存文件并再次尝试 build 命令。应该可以。