You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2微集成器API构建Passthrough流时出现StringIndexOutOfBoundsException排查

问题分析:java.lang.StringIndexOutOfBoundsException 错误原因排查

问题背景

通过API Manager发布Micro Integrator API后,客户端测试时遇到java.lang.StringIndexOutOfBoundsException错误,请求未被API的第一个中介器记录日志。使用Postman发送相同请求可正常工作,无法复现该错误,客户端声称请求发送正确,需排查该异常的可能原因。

错误日志

Error while building Passthrough stream java.lang.StringIndexOutOfBoundsException: begin 0, end -1, length 1025
        at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3319)
        at java.base/java.lang.String.substring(String.java:1874)
        at org.apache.synapse.commons.builders.XFormURLEncodedBuilder.extractParametersFromRequest(XFormURLEncodedBuilder.java:223)
        at org.apache.synapse.commons.builders.XFormURLEncodedBuilder.processDocumentWrapper(XFormURLEncodedBuilder.java:128)
        at org.apache.synapse.commons.builders.XFormURLEncodedBuilder.processDocument(XFormURLEncodedBuilder.java:52)
        at org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:153)
        at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:169)
        at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:122)
        at org.apache.synapse.transport.util.PassThroughMessageHandler.buildMessage(PassThroughMessageHandler.java:103)
        at org.apache.synapse.mediators.AbstractListMediator.buildMessage(AbstractListMediator.java:155)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:96)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
        at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
        at org.apache.synapse.api.Resource.process(Resource.java:342)
        at org.apache.synapse.api.API.process(API.java:477)
        at org.apache.synapse.api.AbstractApiHandler.apiProcessNonDefaultStrategy(AbstractApiHandler.java:107)
        at org.apache.synapse.api.AbstractApiHandler.identifyAPI(AbstractApiHandler.java:127)
        at org.apache.synapse.api.AbstractApiHandler.dispatchToAPI(AbstractApiHandler.java:54)
        at org.apache.synapse.api.rest.RestRequestHandler.dispatchToAPI(RestRequestHandler.java:90)
        at org.apache.synapse.api.rest.RestRequestHandler.process(RestRequestHandler.java:76)
        at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:54)
        at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:344)
        at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:101)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
        at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:376)
        at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:435)
        at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183)
        at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)

{api:v1.0.0} Error while building message. Error while building Passthrough stream org.apache.axis2.AxisFault: Error while building Passthrough stream
        at org.apache.synapse.transport.passthru.util.RelayUtils.handleException(RelayUtils.java:453)
        at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:216)
        at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:122)
        at org.apache.synapse.transport.util.PassThroughMessageHandler.buildMessage(PassThroughMessageHandler.java:103)
        at org.apache.synapse.mediators.AbstractListMediator.buildMessage(AbstractListMediator.java:155)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:96)
        at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:72)
        at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
        at org.apache.synapse.api.Resource.process(Resource.java:342)
        at org.apache.synapse.api.API.process(API.java:477)
        at org.apache.synapse.api.AbstractApiHandler.apiProcessNonDefaultStrategy(AbstractApiHandler.java:107)
        at org.apache.synapse.api.AbstractApiHandler.identifyAPI(AbstractApiHandler.java:127)
        at org.apache.synapse.api.AbstractApiHandler.dispatchToAPI(AbstractApiHandler.java:54)
        at org.apache.synapse.api.rest.RestRequestHandler.dispatchToAPI(RestRequestHandler.java:90)
        at org.apache.synapse.api.rest.RestRequestHandler.process(RestRequestHandler.java:76)
        at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:54)
        at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:344)
        at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:101)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
        at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:376)
        at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:435)
        at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183)
        at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.StringIndexOutOfBoundsException: begin 0, end -1, length 1025
        at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3319)
        at java.base/java.lang.String.substring(String.java:1874)
        at org.apache.synapse.commons.builders.XFormURLEncodedBuilder.extractParametersFromRequest(XFormURLEncodedBuilder.java:223)
        at org.apache.synapse.commons.builders.XFormURLEncodedBuilder.processDocumentWrapper(XFormURLEncodedBuilder.java:128)
        at org.apache.synapse.commons.builders.XFormURLEncodedBuilder.processDocument(XFormURLEncodedBuilder.java:52)
        at org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:153)
        at org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:169)
        ... 24 more

{api:v1.0.0} ERROR_CODE = 0, ERROR_MESSAGE = Error while building message. Error while building Passthrough stream, ERROR_DETAILS = null

可能的原因

  • 表单请求格式不规范:
    异常栈显示错误发生在XFormURLEncodedBuilder的参数解析步骤,说明Micro Integrator在解析application/x-www-form-urlencoded类型请求时失败。常见情况包括:
    • 请求体中存在无值的参数(如key=或仅key),解析逻辑未处理该场景;
    • 参数包含未正确转义的特殊字符,导致字符串截取时索引计算错误;
    • 请求体格式损坏,缺少参数分隔符&或存在非法字符。
  • 请求头与请求体不匹配:
    客户端请求头声明Content-Type: application/x-www-form-urlencoded,但实际发送的请求体并非标准表单格式,解析器按表单规则解析非表单数据,触发索引越界。
  • Micro Integrator版本bug:
    部分旧版本的WSO2 Micro Integrator在处理特定表单请求时存在边界校验漏洞,比如处理空值参数或超长参数时未做索引合法性检查,升级到稳定版本可解决。
  • 请求编码不一致:
    客户端发送的请求体编码与Content-Encoding头声明的编码不匹配,导致解析器读取的字符串内容异常,触发索引越界。

内容的提问来源于stack exchange,提问作者idix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 01:27:02