我正在尝试使用 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”,而不是获取所有字段。这是一个临时修复,除非我找到更好的解决方案。