Apache Olingo - 尝试获取 Odata 但无法创建实体容器; getDefaultEntityContainer 给出空指针错误

问题描述 投票:0回答:1

我正在使用 apache olingo lib 来获取 Odata。我能够获取 edm 和元数据,但无法获取实体容器。我也尝试使用默认方法,但结果为 null。 这是示例代码。

InputStream content = execute(serviceUri , APPLICATION_XML, HTTP_METHOD_GET);
edm =  EntityProvider.readMetadata(content, false); 
System.out.println("Read default EntityContainer: " + edm.getDefaultEntityContainer().getName());

最后一行出现以下错误

the return value of "org.apache.olingo.odata2.api.edm.Edm.getDefaultEntityContainer()" is null

请帮忙。

java apache odata olingo
1个回答
0
投票

您在最后一行遇到的错误可能表明方法 getDefaultEntityContainer() 返回 null。这可能是由于与 Apache Olingo 库处理 OData 元数据的方式相关的各种原因造成的。

可能原因: 元数据问题:如果未正确读取 XML 元数据或者 EntityProvider.readMetadata 无法解析元数据,则 edm.getDefaultEntityContainer() 返回的值可能为 null。

无效的 URI 或数据:如果 serviceUri 不正确或响应不包含有效的 OData 元数据,您可能会遇到此错误。

数据格式不正确:确保serviceUri返回的数据格式正确(本例中为APPLICATION_XML)。如果服务以不同的格式响应或者响应内容存在问题,Olingo 可能无法正确处理元数据。

建议的解决方案: 检查响应内容:在调用 EntityProvider.readMetadata 之前,请验证 serviceUri 返回的内容是否有效且符合预期的 XML 格式。

代码

InputStream content = execute(serviceUri , APPLICATION_XML, HTTP_METHOD_GET);
String responseBody = new BufferedReader(new InputStreamReader(content))
         .lines().collect(Collectors.joining("\n"));
System.out.println("Response Body: " + responseBody);

检查EntityContainer是否存在:在尝试访问DefaultEntityContainer之前,检查它是否为空以及元数据是否正确加载。

代码

edm = EntityProvider.readMetadata(content, false);
if (edm == null) {
    System.out.println("Metadata could not be read.");
} else if (edm.getDefaultEntityContainer() == null) {
    System.out.println("Default EntityContainer is null.");
} else {
    System.out.println("Read default EntityContainer: " + edm.getDefaultEntityContainer().getName());
}

验证 OData 服务 URL:确保 serviceUri 正确并指向有效的 OData 服务。尝试在浏览器或 API 工具(如 Postman)中手动访问 URL,以确认它返回正确的 OData 元数据。

启用详细调试:启用 Olingo 库的日志记录,以便在读取元数据时获取有关任何潜在问题的更详细信息。这可以更深入地了解流程可能失败的地方。

代码

Logger logger = Logger.getLogger("org.apache.olingo");
logger.setLevel(Level.ALL);

结论: 该错误可能表明 EntityContainer 为空,可能是由于处理元数据时出现问题。验证响应、服务 URI 和内容,以确定问题的根本原因。

© www.soinside.com 2019 - 2024. All rights reserved.