WSO2无法接收传递JWT响应 报Unexpected字符'e'错误的解决方法咨询
WSO2无法处理JWT响应的解析报错解决方法
问题描述
应用从外部端点接收到JWT响应,但WSO2无法接收并传递该响应,抛出如下错误:
Error while building Passthrough stream org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'e' (code 101) in prolog; expected '<'
已排查axis2配置文件中的message builder和message formatter,配置内容如下:
<messageBuilders> <messageBuilder contentType="application/xml" class="org.apache.axis2.builder.ApplicationXMLBuilder"/> <messageBuilder contentType="application/x-www-form-urlencoded" class="org.apache.synapse.commons.builders.XFormURLEncodedBuilder"/> <messageBuilder contentType="multipart/form-data" class="org.apache.axis2.builder.MultipartFormDataBuilder"/> <messageBuilder contentType="application/json" class="org.wso2.micro.integrator.core.json.JsonStreamBuilder"/> <messageBuilder contentType="application/json/badgerfish" class="org.apache.axis2.json.JSONBadgerfishOMBuilder"/> <messageBuilder contentType="text/javascript" class="org.apache.axis2.json.JSONBuilder"/> <messageBuilder contentType="text/plain" class="org.apache.axis2.format.PlainTextBuilder"/> <messageBuilder contentType="application/octet-stream" class="org.wso2.carbon.relay.BinaryRelayBuilder"/> <messageBuilder contentType="application/binary" class="org.apache.axis2.format.BinaryBuilder"/> </messageBuilders> <messageFormatters> <messageFormatter contentType="application/x-www-form-urlencoded" class="org.apache.synapse.commons.formatters.XFormURLEncodedFormatter"/> <messageFormatter contentType="multipart/form-data" class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/> <messageFormatter contentType="application/xml" class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/> <messageFormatter contentType="text/xml" class="org.apache.axis2.transport.http.SOAPMessageFormatter"/> <messageFormatter contentType="application/soap+xml" class="org.apache.axis2.transport.http.SOAPMessageFormatter"/> <messageFormatter contentType="text/plain" class="org.apache.axis2.format.PlainTextFormatter"/> <messageFormatter contentType="application/json" class="org.wso2.micro.integrator.core.json.JsonStreamFormatter"/> <messageFormatter contentType="application/json/badgerfish" class="org.apache.axis2.json.JSONBadgerfishMessageFormatter"/> <messageFormatter contentType="text/javascript" class="org.apache.axis2.json.JSONMessageFormatter"/> <messageFormatter contentType="application/octet-stream" class="org.wso2.carbon.relay.ExpandingMessageFormatter"/> <messageFormatter contentType="application/binary" class="org.apache.axis2.format.BinaryFormatter"/> </messageFormatters>
报错原因
这个错误的核心是:WSO2接收到JWT响应时,没有匹配到对应Content-Type的Message Builder,默认使用XML解析器处理非XML格式的JWT内容,导致解析失败。JWT通常是纯文本格式,或带有application/jwt的Content-Type,而当前配置中缺少对application/jwt类型的处理规则。
解决步骤
确认响应的Content-Type
先抓包查看外部端点返回JWT时的Content-Type,常见类型有text/plain、application/jwt,少数情况是包裹在JSON里的application/json。添加对应类型的Builder和Formatter
根据实际的Content-Type,在axis2配置文件中补充配置:- 如果是
application/jwt类型:
在<messageBuilders>节点内添加:
在<messageBuilder contentType="application/jwt" class="org.apache.axis2.format.PlainTextBuilder"/><messageFormatters>节点内添加:<messageFormatter contentType="application/jwt" class="org.apache.axis2.format.PlainTextFormatter"/> - 如果是
text/plain类型但未生效:
检查配置中text/plain的builder是否在XML相关builder之前(当前配置已满足),若仍有问题,可尝试调整顺序,让纯文本解析器优先匹配。 - 如果是JSON包裹的JWT:
确认当前application/json的builder配置正常(现有配置中的JsonStreamBuilder可处理标准JSON),检查外部端点的响应是否为合法JSON格式。
- 如果是
重启服务验证
保存axis2配置文件后,重启WSO2服务,重新测试JWT响应的接收和传递流程。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

