wso2 - 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)
解决方案
查看评论中的回复,看起来外部 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>/bin
SET HOME_CACHE=%MICROGW_HOME%\lib\gateway-balo
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
再次尝试该命令。它应该工作。
推荐阅读
- c# - 在 MVC API 中提供授权和未授权的端点(路由?)
- sql - 如何按字母顺序构建连接字符串?
- c# - 为什么“statusQueryGetUri”中的“runtimeStatus”没有在计时器完成后立即设置?
- javascript - 按位打包/解包 - 任意值的通用解决方案
- postgresql - Entity Framework Core 设置 ID 以从序列中获取值
- logging - 限制 Kubernetes 中的日志
- laravel - 特定路由调用上的 Laravel 502 代理错误
- python - 我的程序第 481 行有问题,它说语法错误,但语法似乎很好
- c# - 显示 Spritesheet 的帧
- javascript - 如何使用 AWS CDK 查找现有的 ApiGateway