WSO2 AM 4.3.0禁用OpenAPI验证后调用API遇空指针错误求助
问题:WSO2 API Manager 4.3.0导入旧API后调用出现NullPointerException
我使用WSO2 API Manager 4.3.0,为导入存在验证错误的旧API,通过启动参数-DswaggerRelaxedValidation=true禁用了OpenAPI验证。但调用API时出现NullPointerException,API无法响应,错误日志如下:
ERROR - ServerWorker Error processing GET request for : /xxxx/xxxx. java.lang.NullPointerException: null at io.swagger.v3.parser.converter.SwaggerConverter.lambda$addProperties$11(SwaggerConverter.java:1268) ~[swagger-parser_2.1.20.wso2v1.jar:?] at java.util.LinkedHashMap.forEach(LinkedHashMap.java:684) ~[?:?] at io.swagger.v3.parser.converter.SwaggerConverter.addProperties(SwaggerConverter.java:1267) ~[swagger-parser_2.1.20.wso2v1.jar:?] at io.swagger.v3.parser.converter.SwaggerConverter.convert(SwaggerConverter.java:1225) ~[swagger-parser_2.1.20.wso2v1.jar:?] at io.swagger.v3.parser.converter.SwaggerConverter.convert(SwaggerConverter.java:865) ~[swagger-parser_2.1.20.wso2v1.jar:?] at io.swagger.v3.parser.converter.SwaggerConverter.convert(SwaggerConverter.java:635) ~[swagger-parser_2.1.20.wso2v1.jar:?] at io.swagger.v3.parser.converter.SwaggerConverter.convert(SwaggerConverter.java:535) ~[swagger-parser_2.1.20.wso2v1.jar:?] at io.swagger.v3.parser.converter.SwaggerConverter.convert(SwaggerConverter.java:250) ~[swagger-parser_2.1.20.wso2v1.jar:?] at io.swagger.v3.parser.converter.SwaggerConverter.readResult(SwaggerConverter.java:104) ~[swagger-parser_2.1.20.wso2v1.jar:?] at io.swagger.v3.parser.converter.SwaggerConverter.readContents(SwaggerConverter.java:99) ~[swagger-parser_2.1.20.wso2v1.jar:?] at io.swagger.parser.OpenAPIParser.readContents(OpenAPIParser.java:29) ~[swagger-parser_2.1.20.wso2v1.jar:?] at org.wso2.carbon.apimgt.gateway.handlers.common.APIMgtLatencyStatsHandler.setSwaggerToMessageContext_aroundBody8(APIMgtLatencyStatsHandler.java:134) ~[org.wso2.carbon.apimgt.gateway_9.29.120.jar:?] at org.wso2.carbon.apimgt.gateway.handlers.common.APIMgtLatencyStatsHandler.setSwaggerToMessageContext(APIMgtLatencyStatsHandler.java:1) ~[org.wso2.carbon.apimgt.gateway_9.29.120.jar:?] at org.wso2.carbon.apimgt.gateway.handlers.common.APIMgtLatencyStatsHandler.handleRequest_aroundBody4(APIMgtLatencyStatsHandler.java:98) ~[org.wso2.carbon.apimgt.gateway_9.29.120.jar:?] at org.wso2.carbon.apimgt.gateway.handlers.common.APIMgtLatencyStatsHandler.handleRequest(APIMgtLatencyStatsHandler.java:1) ~[org.wso2.carbon.apimgt.gateway_9.29.120.jar:?] at org.apache.synapse.api.API.process(API.java:407) ~[synapse-core_4.0.0.wso2v105.jar:4.0.0-wso2v105] at org.apache.synapse.api.AbstractApiHandler.apiProcessNonDefaultStrategy(AbstractApiHandler.java:109) ~[synapse-core_4.0.0.wso2v105.jar:4.0.0-wso2v105] at org.apache.synapse.api.AbstractApiHandler.identifyAPI(AbstractApiHandler.java:129) ~[synapse-core_4.0.0.wso2v105.jar:4.0.0-wso2v105] at org.apache.synapse.api.AbstractApiHandler.dispatchToAPI(AbstractApiHandler.java:61) ~[synapse-core_4.0.0.wso2v105.jar:4.0.0-wso2v105] at org.apache.synapse.api.rest.RestRequestHandler.dispatchToAPI(RestRequestHandler.java:90) ~[synapse-core_4.0.0.wso2v105.jar:4.0.0-wso2v105] at org.apache.synapse.api.rest.RestRequestHandler.process(RestRequestHandler.java:76) ~[synapse-core_4.0.0.wso2v105.jar:4.0.0-wso2v105] at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:54) ~[synapse-core_4.0.0.wso2v105.jar:4.0.0-wso2v105] at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:350) ~[synapse-core_4.0.0.wso2v105.jar:4.0.0-wso2v105] at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:101) ~[synapse-core_4.0.0.wso2v105.jar:4.0.0-wso2v105] at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) ~[axis2_1.6.1.wso2v76.jar:?] at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:401) ~[synapse-nhttp-transport_4.0.0.wso2v105.jar:?] at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:215) ~[synapse-nhttp-transport_4.0.0.wso2v105.jar:?] at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) ~[axis2_1.6.1.wso2v76.jar:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?] at java.lang.Thread.run(Thread.java:834) ~[?:?]
解决方向
- 修复API定义中的空值问题:堆栈信息显示错误出在SwaggerConverter处理属性环节,说明旧API定义的
properties节点下存在空值(比如某个属性键对应null值)。检查并清理Swagger/OpenAPI定义里的空属性项,或者补全缺失的属性内容。 - 临时禁用延迟统计处理器:若需紧急恢复API可用性,可尝试禁用
APIMgtLatencyStatsHandler。在网关配置文件repository/deployment/server/synapse-configs/default/api/_TokenAPI_.xml(或对应API的Synapse配置文件)中,移除或注释该处理器的配置。注意此操作会关闭延迟统计功能,仅作为临时方案。 - 升级Swagger Parser依赖包:当前使用的
swagger-parser_2.1.20.wso2v1.jar可能存在空指针bug,可替换为兼容WSO2 AM 4.3.0的更高版本定制Swagger Parser jar包。 - 修复API定义后重新导入:即使禁用验证,有缺陷的API定义仍会在运行时解析出错。建议先在本地用Swagger Editor或OpenAPI验证工具修复定义问题,确保无空值、格式错误后再导入,无需依赖
swaggerRelaxedValidation参数。
内容的提问来源于stack exchange,提问作者Lilan Mihiranga
相关产品推荐
相关产品推荐

