编辑:
解决方案是创建一个镜像相关表的视图,并将日期转换为 varchar,然后使用匹配的排序规则将其转换回日期
编辑结束
谁能告诉我为什么 OData4j 从我的一个 WCF 数据服务服务器读取日期时间值但在从另一个 WCF 数据服务读取具有相同格式的完全相同的日期时间类型时遇到非法参数异常(错误的 valueString 作为 keyString 的一部分)?
java.lang.IllegalArgumentException: bad valueString [datetime'2012-01-24T14%3A57%3A22.243'] 作为 keyString 的一部分
另一个问题是,当我从 OData4j 读取日期时间类型没有问题的服务请求 JSON 响应时,我得到另一个非法参数异常,错误消息是 - 奇数个字符。
java.lang.IllegalArgumentException:org.odata4j.repack.org.apache.commons.codec.DecoderException:奇数个字符。
因为 WCF 数据服务不能有多个源,所以我制作了 2 个项目,每个项目都有自己的实体数据模型源(来自现有数据库)。就像我上面提到的,我遇到了这些烦人的错误。
总结...
示例 1:作为 keyString 一部分的错误 valueString - 读取日期时间时。也发生在FormatType.JSON
.
ODataConsumer customerInfoServices = ODataConsumer
.newBuilder("http://10.0.2.2:41664/CustomerInfoWCFDataServices.svc/")
.setFormatType(FormatType.ATOM)
.build();
customer = customerInfoServices
.getEntities("Customers")
.select("name, id")
.filter("id eq " + 5)
.execute()
.firstOrNull();
示例 2:奇数个字符。只有在FormatType.JSON
读取日期时间时才发生并且没有问题。
ODataConsumer businessServices = ODataConsumer
.newBuilder("http://10.0.2.2:35932/BusinessWCFDataServices.svc/")
.setFormatType(FormatType.JSON)
.build();
Enumerable<?> ordrer = businessServices
.getEntities("Orders")
.filter("custId eq " + customer.getProperty("id").getValue())
.execute();
我想要的是接收 JSON 响应(对于 android,ATOM 仍然过于繁琐)并且读取日期时间属性没有问题。
没有人能帮助我吗?
我一直在努力在谷歌上找到解决方案,但没有任何运气。
没有日期时间问题的数据库的排序规则是“Danish_Norwegian_CI_AS”,而有读取错误的数据库的排序规则是“SQL_Danish_Pref_CP1_CI_AS”。我不知道这是否有任何意义,但我怀疑它与它有关。