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

Oracle OSB接收外部请求报Illegal XML character:0x10错误求助

问题排查:Oracle OSB 12c接收含Base64的外部请求报非法XML字符错误

环境与核心问题

  • 运行环境:Oracle OSB + WebLogic 12c,XML版本1.0
  • 核心现象:接口接收后端系统请求时,消息直接进入错误队列;控制台测试含Base64的消息正常,后端发送不含Base64的请求也正常,仅后端发送带Base64的请求触发报错。

错误堆栈信息

Caused by: org.apache.xmlbeans.XmlException: error: Unexpected element: CDATA ................
Caused by: org.xml.sax.SAXParseException; systemId: file:; lineNumber: 1; columnNumber: 1; Illegal XML character: 0x10

涉及的XQuery CDATA代码

<![CDATA[<ns0:Request xmlns="" xmlns:ns0="http://blabla/testest">
           <ns0:MessageType>{ $body/ns0:Request/ns0:MessageType/text() }</ns0:MessageType>
           <ns0:Feature>{ $body/ns0:Request/ns0:Feature/text() }</ns0:Feature>
           <ns0:Identity>
               <ns0:nummer>{ $body/ns0:Request/ns0:Identity/ns0:nummer/text() }</ns0:nummer>
               <ns0:type>{ $body/ns0:Request/ns0:Identity/ns0:type/text() }</ns0:type>
           </ns0:Identity>
           <ns0:InterestedParty>{ $body/ns0:Request/ns0:InterestedParty/text() }</ns0:InterestedParty>
           <ns0:ReceiveParty>
               <ns0:nummer>{ $body/ns0:Request/ns0:ReceiveParty/ns0:nummer/text() }</ns0:nummer>
               <ns0:type>{ $body/ns0:Request/ns0:ReceiveParty/ns0:type/text() }</ns0:type>
           </ns0:ReceiveParty>
           <ns0:PartyRole>{ $body/ns0:Request/ns0:PartyRole/text() }</ns0:PartyRole>
           <ns0:SubjectMessage>
               <ns0:mimeType>{ $body/ns0:Request/ns0:SubjectMessage/ns0:mimeType/text() }</ns0:mimeType>
               <ns0:Filename>{ $body/ns0:Request/ns0:SubjectMessage/ns0:Filename/text() }</ns0:Filename>
               <ns0:subject>{ $body/ns0:Request/ns0:SubjectMessage/ns0:subject/text() }</ns0:subject>
           </ns0:SubjectMessage>
           <ns0:autorisatieAdres>http://geenausp.nl</ns0:autorisatieAdres>
       </ns0:Request>
]]>

已尝试的无效操作

  • 在setDomainenv中添加Java参数-Dcom.bea.osb.http.cookieAsNoComplexElement=true,未解决问题。

排查方向与解决建议

排查方向

  1. Base64内容差异:后端生成的Base64可能包含XML 1.0禁止的控制字符(如0x10),而控制台测试用的是纯净Base64字符串。XML 1.0仅允许制表符(0x09)、换行(0x0A)、回车(0x0D)三种控制字符,0x10属于非法字符。
  2. 传输层字符注入:后端发送请求时,HTTP传输过程中可能自动给Base64字段添加了换行或其他控制字符,控制台直接提交数据则无此问题。
  3. 解析器配置差异:控制台测试与外部请求可能使用不同的XML解析器配置,控制台解析器可能宽松忽略非法字符,生产环境解析器严格遵循规范。

解决建议

  • 抓包验证后端请求:用工具抓取后端发送的请求包,用十六进制编辑器查看Base64字段,确认是否存在0x10等非法字符。
  • 添加字符过滤逻辑:在OSB代理服务的请求管道中,通过XSLT或自定义Java代码过滤Base64字段中的XML非法控制字符。
  • 调整解析器参数:在WebLogic/OSB中添加JVM参数-Djavax.xml.stream.isCoalescing=true,或调整OSB的XML验证策略为宽松模式,允许忽略部分非法字符。
  • 统一传输编码:确认后端与OSB之间的HTTP请求编码一致,避免传输过程中引入额外字符。

内容的提问来源于stack exchange,提问作者The real Van Gogh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:40:22