gpt4 book ai didi

java - OData4j 0.7 检索工作项时出现异常

转载 作者:行者123 更新时间:2023-12-01 04:37:26 26 4
gpt4 key购买 nike

我正在尝试使用 Java 中的 OData4j 0.7 从 TFS 服务器检索工作项。

这是我的代码:

public List<TFSWorkItem> getWorkItems(final String projectName)  
{
final List<TFSWorkItem> tfsWorkItems = new ArrayList<TFSWorkItem>();
String filter = String.format("Project eq '%s'", projectName);
Enumerable<OEntity> workItems = consumer.getEntities("WorkItems").filter(filter).execute();
for (OEntity workitem : workItems)
{
System.out.println(workitem.getProperty("Title", String.class));
}
}

当我运行此代码时,我得到一个

Exception in thread "main" java.lang.IllegalArgumentException: Illegal datetime format 2013-03-15T14:22:08.077+05:30
at org.odata4j.internal.InternalUtil.parseDateTimeFromXml(InternalUtil.java:96)

在进一步调试代码时,我发现 OData4j 在尝试映射从 TFS 服务器检索到的日期时发现它不兼容。

从 TFS 检索的日期:

2013-03-15T14:22:08.077+05:30

OData4j 预计的日期:

2013-03-15T14:22:08.077

有什么办法可以避免这种情况吗?

已更新

对于任何面临同样问题的人。

我已将代码修改为:

    final String fields = "Id,Project,Title";
Enumerable<OEntity> workItems = consumer.getEntities("WorkItems").filter(filter).select(fields.toString()).execute();
for (OEntity workitem : workItems)
{
System.out.println("Id : " + workitem.getProperty("Id").getValue());
System.out.println("Project : "+workitem.getProperty("Project").getValue());
System.out.println("Title : "+workitem.getProperty("Title").getValue());
}

由于我只需要这些字段来处理,因此我给出了一个选择查询来选择“Id”、“Project”和“Title”,而不是获取所有字段。这是一个临时修复,除非我找到更好的解决方案。

最佳答案

我想我已经明白了这一点。查看这篇文章:OData4J exception

基本上,它归结为使用 DateTime.Now 在 C# 代码中设置 Edm.DateTime 列的值。 OData 生产者应使用 DateTime.UtcNow

DateTime.Now 包含本地时区信息。 Microsoft 的代码在 DateTime 结构中查看本地时区信息,并发送回格式化为 Edm.DateTimeOffset 字符串的 Edm.DataTime 字段。 DateTime.UtcNow 属性不包含任何时区信息,因此在发送回 OData Consumer 时,它会正确格式化为 Edm.DateTime 字符串。

我怀疑这可能是 Microsoft 的 WCF 数据服务堆栈或其 Entity Framework 中的错误。

关于java - OData4j 0.7 检索工作项时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17148746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com