首页 > 解决方案 > WSO2 API Microgateway 3.1.0 中的 API 构建失败

问题描述

我是 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:数组索引超出范围:org.ballerinalang.nativeimpl.jvm 中的 0。 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。在 ballerina.compiler_backend_jvm.interop.interop_method_gen.createJInteropFunctionWrapper(interop/interop_method_gen.bal:128) 在 ballerina.compiler_backend_jvm.interop.external_method_gen.createExternal_method_gen( bal:180) at ballerina.compiler_backend_jvm.jvm_package_gen.generateClassNameMappings(jvm_package_gen.bal:477) at ballerina.compiler_backend_jvm.jvm_package_gen.generatePackage(jvm_package_gen.bal:149) at ballerina.compiler_backend_jvm.jvm_package_gen.generateDependencyList(jvm_package_gen.bal:12) 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) at ballerina.compiler_backend_jvm.jvm_package_gen.generateDependencyList(jvm_package_gen.bal:120) atballerina.compiler_backend_jvm.jvm_package_gen.generatePackage(jvm_package_gen.bal:142) atballerina.compiler_backend_jvmDependencyList。 (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) at ballerina.compiler_backend_jvm.___init$$Lambda$11.000000001107AEE0.apply(Unknown Source) at org.ballerinalang.jvm.scheduling.SchedulerItem.execute(Scheduler.java :426) 在 org.ballerinalang.jvm。schedule.Scheduler.run(Scheduler.java:218) at org.ballerinalang.jvm.scheduling.Scheduler.runSafely(Scheduler.java:191) at org.ballerinalang.jvm.scheduling.Scheduler$$Lambda$6.0000000010F6DAF0.run(未知来源)在 java.lang.Thread.run(Thread.java:813)

标签: wso2wso2-am

解决方案


查看评论中的回复,看起来外部 jdk 与 mgw 不完全兼容。虽然不确定确切的原因。下面是关于构建命令期间发生的事情的更多背景信息以及强制 mgw 使用内部 jdk 的可能解决方法。

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

所以为了避免 mgw 拾取外部 jdk,我们应该将 JAVA_HOME 变量设置为 "" 或无效位置。为此,在添加为命令后在目录中和第 55 行附近打开micro-gw.bat(假设您在 Windows 上)文件。更改上述行周围的代码块后,将如下所示。<TOOLKIT_HOME>/binSET HOME_CACHE=%MICROGW_HOME%\lib\gateway-baloSET 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再次尝试该命令。它应该工作。


推荐阅读