ODataModel报错Invalid metadata document 元数据请求200仍加载失败
OData读取报错排查问题
问题描述
我在尝试读取OData时遇到报错 ODataModel error: Invalid metadata document (Initial loading of metadata failed),无法排查问题原因:
我调用的函数代码如下:
_getHanaData: function() { var xsODataModel = new sap.ui.model.odata.v2.ODataModel("/catalog/"); // ... },
如下图所示,元数据已成功拉取,请求状态码为200:
请问该问题的引发原因是什么,应如何解决?
问题原因及解决方案
常见引发原因
- 元数据XML格式不符合OData V2规范:即使返回状态码200,XML中可能存在未闭合标签、命名空间声明错误、实体类型/实体集定义不符合规范的问题,常见于HANA XS OData服务定义中存在拼写错误、关联定义缺失主键约束的场景
- 响应头配置不符合要求:元数据响应的
Content-Type值错误,正确值应为application/xml,如果被代理服务或者服务器错误设置为text/plain、application/json等类型,ODataModel会拒绝解析 - OData服务根路径配置错误:代码中传入的
/catalog/路径不是OData服务的根路径,导致ODataModel拼接的$metadata请求路径实际返回的不是标准元数据内容,比如误将服务的实体集路径作为根路径传入 - SAP UI5版本兼容性问题:当前使用的UI5版本对部分OData特性支持有缺陷,比如新版本HANA XS OData返回的某些标注字段在旧版本UI5的OData解析器中无法识别
对应解决方法
验证元数据格式合法性
把请求返回的$metadata完整XML内容复制到OData校验工具中校验,重点检查是否有格式错误、实体定义是否符合V2规范,同时核对HANA中.xsodata服务定义文件的语法是否正确,确认是否存在遗漏主键、关联配置错误的问题。检查响应头配置
查看$metadata请求的响应头,确认Content-Type值为application/xml,如果配置错误需要调整HANA XS引擎的响应头配置,或者在代理层修正响应头参数。修正OData服务根路径配置
确认OData服务的实际根路径,比如如果服务的访问地址是/catalog/odata.xsodata,那么初始化ODataModel的时候需要传入完整的根路径/catalog/odata.xsodata,不要只传入上级目录路径。调整ODataModel初始化配置
如果确认元数据本身没有格式问题,可以在初始化ODataModel的时候添加配置项关闭严格解析,降低兼容性要求,示例如下:
_getHanaData: function() { var xsODataModel = new sap.ui.model.odata.v2.ODataModel("/catalog/", { skipMetadataAnnotationValidation: true, // 关闭元数据注解校验,兼容非标准元数据 disableHeadRequestForToken: true }); // ... },
内容的提问来源于stack exchange,提问作者M.Morris
相关产品推荐
相关产品推荐

