如何使在Java 8上运行的IBM ODM Rule Designer识别java.time。*类?

时间:2018-06-22 22:22:58

标签: java-8 ibm-odm

我已经在Java 8 vm上运行了ODM 8.9.1 Rule Designer。 Java.time。*类型显示在XOM中,但无法在BOM表中识别。例如,一个java.time.LocalDate显示“无法被语言化”,并且不能在Ctrl-Shift-Space的语言完成选项中找到。 我已经在Java 8上安装了XOM。如何将BOM升级到Java 8?

2 个答案:

答案 0 :(得分:1)

虽然ODM 8.10已有一段时间可用,并且包括对double软件包的本机支持,但我停留使用ODM 8.9.1的时间更长了。这就是我在ODM 8.9.1 Rule Apps中使用java.timejava.time.LocalDate的方式。

我在BOM表项目中手动创建了一个新的BOM表项,并手动添加了没有成员的java.time.ZonedDateTimejava.time.LocalDate类。我可以说java.time.ZonedDateTime,但不能说LocalDate。规则设计器不会报告任何错误或警告,并且我能够很好地构建和执行。只要我远离BOM更新,在BOM中定义这些类就可以正常工作。

我有一些自定义类,其数据成员的类型为ZonedDateTime。这些位于与Java时间类分开的BOM表条目中。我可以对这些成员进行口头表达,并按预期与我的自定义方法一起使用它们,这些自定义方法接受参数并返回类型为ZonedDateTime的值。

有一个小故障:那些ZonedDateTime成员在词汇表中显示为系统类型ZonedDateTime,并在Intellirule编辑器中为系统'date'操作提出。不出所料,在规则中使用这些操作之一会产生错误,但是该错误仅在ARL点击中可见,而在Intellirule选项卡或“问题”视图中则不可见。

我不确定RD如何或为什么确定那些成员为'date'类型。我希望找到一种方法来关闭与'date'相关的系统语言。同时,我只是避免使用系统'date'操作,而我的Rule Apps执行得很好。当我们最终切换到ODM 8.10时,我就准备好了。

现在,关于HTDS,REST和JSON。 'date'的Swagger使用格式“日期时间”。 java.util.Date的Swagger也使用“日期时间”,而java.time.ZonedDateTime的Swagger使用“日期”。因此,java.time.LocalDatejava.time.ZonedDateTime的直接替代品,而不会影响调用应用程序。但是您必须使用自定义解串器才能使其正常工作,这涉及几个步骤:

在定义数据成员的类中,必须使用注释:

java.util.Date

并且您必须定义一个自定义反序列化器类:

@JsonDeserialize(using = CustomZonedDateTimeDeserializer.class)
private ZonedDateTime yourDateMember;

答案 1 :(得分:0)

使用Java 8日期获取BOM的一种方法是在XOM中创建一个辅助方法,该方法采用语言化的java.util.Date并将其转换为java.time.LocalDateTime例如,

public static int compareDates(Date date1, Date date2) {

    LocalDateTime newDate1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();

    LocalDateTime newDate2 = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime() ;   

    return newDate1.compareTo(newDate2);

}