【问题标题】:Java webservice and .net client Date datatype interpolability issueJava Web 服务和 .net 客户端日期数据类型互操作性问题
【发布时间】:2011-07-15 12:47:47
【问题描述】:

有一个 .net 客户端调用 java web 服务 api - addSchedule(Date startDate, Date endDate)。 endDate 是可选的 - 即客户端可以传递 endDate= null 并且一切都很好。但问题是 - .Net 客户端无法将 null 分配给 Date 变量类型。

我们检查的另一件事是,如果 java Web 服务响应将空 Date 值传递给 .net 客户端,那么 .Net 会以 Date.MIN_VALUE 的形式接收它。所以我们想如果 .Net 传递 endDate=Date.MIN_VALUE 怎么办,所以 java 会得到 endDate=null。但是 java 将 Date.MIN_VALUE 作为有效日期。

所以我们被困住了。请提出一个好的解决方法。

【问题讨论】:

    标签: java .net web-services date types


    【解决方案1】:

    尝试使用 Nullable DateTime(Nullable<DateTime>DateTime?),因为它可以包含空值。普通值类型(如 DateTime)不能保持 null,并且会有一个默认值(在 DateTime 的情况下,这是 DateTime.MinValue,但对于 int,它是 0)

    【讨论】:

    • 当我们通过 Nullable 时,它说你不能通过 Nullable,DateTime 应该在 addSchedule 中
    • 你需要让所有相关代码使用DateTime?/Nullable<DateTime>或者使用Value属性(注意:如果你访问Value属性时它为null,它会抛出例外!您可以使用HasValue 属性进行检查,或将其与null 进行比较。
    • 我对 .Net 没有太多经验。只是好奇addSchedule中java端的Date dataType应该是什么,所以在.net端客户端包装器调用看起来像AddSchdule(DateTime,Nullable
    • 如果 DateTime 在 Java 中可以为空,那么您希望在 .NET 中任何需要使用它们的地方使用 DateTime?(它只是 Nullable<DateTime> 的缩写)。如果这些值实际上永远不会为空,您可以从DateTime? 中读取Value 属性。否则,您需要修复所有代码以正确处理nulls 或Values。如果不确切知道您正在编写什么代码、正在生成什么、它们如何相互通信等,我很难说得更具体。
    • 在Java中,任何对象都可以被赋值为'null',Date object.Webservice方法-addSchedule(Date startDate, Date endDate)可以被java客户端调用-addSchedule(new Date, null)。完全没有问题。 .Net 客户端,它使用 Java webservice WSDL 结果生成客户端代理到 AddScheule(DateTime, DateTime)。但是.net 客户端不能使用空值 AddSchedule(currentDate, null) 调用。使用Nullable<DateTime>:Nullable<DateTime> endTime = Null; EndPoint.AddSchedule(currentDate, endTime)。它会引发类型不匹配错误,请参阅上面的1条评论。
    【解决方案2】:

    我们需要在 Java webservice 方法中添加 nillable=true :- addSchedule(Date startDate, @XmlElement(nillable=true) Date endDate) 。使用这个新的 wsdl 定义,.Net 客户端会生成 AddScheule(DateTime, <Nullable>DateTime)。metro 2.2 版本的 jar(jaxb 和 jaxws.jar)支持此功能。如果 jre6 有这些 jar 的旧版本,请下载这些 jar 的 2.2 版本并放在 JRE_HOME/lib/endorsed 文件夹中。使用相同的 jre 路径来构建您的项目。

    并且在tomcat上部署应用时,复制目录CATALINA_HOME/endorsed中的jaxb和jaxws.jar [2.2版本]。你可以走了。

    【讨论】:

      猜你喜欢
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多