Java webservice和.net客户端日期数据类型可插入性问题
有一个.net客户端调用JavaWeb服务api-addSchedule(DateStartDate,DateEndDate)。endDate是可选的-即客户端可以传递endDate=null,一切正常。但问题是-.Net客户端无法将null分配给日期变量类型 我们还检查了一件事,如果java web服务响应将空日期值传递给.net客户端,则.net会将其作为Date.MIN_值接收。所以我们认为如果.Net传递endDate=Date.MIN_值,那么java将得到endDate=null。但是java将Date.MIN_值作为有效日期Java webservice和.net客户端日期数据类型可插入性问题,java,.net,web-services,date,types,Java,.net,Web Services,Date,Types,有一个.net客户端调用JavaWeb服务api-addSchedule(DateStartDate,DateEndDate)。endDate是可选的-即客户端可以传递endDate=null,一切正常。但问题是-.Net客户端无法将null分配给日期变量类型 我们还检查了一件事,如果java web服务响应将空日期值传递给.net客户端,则.net会将其作为Date.MIN_值接收。所以我们认为如果.Net传递endDate=Date.MIN_值,那么java将得到endDate=null。但
所以我们被困住了。请建议一个好的解决方法。尝试使用可为空的日期时间(
可为空的
或日期时间?
),因为这可能包含空值。一个普通的值类型(比如DateTime)不能为null,并且会有一个默认值(在DateTime
的情况下,这是DateTime.MinValue
,但是对于int
它是0)我们需要在Java webservice方法中添加nillable=true:-addSchedule(Date startDate,@XmlElement(nillable=true)Date endDate)
。通过这个新的wsdl定义,.Net客户端生成AddScheule(DateTime,DateTime)
。metro 2.2版本jars(jaxb和jaxws.jar)支持这一点。如果jre6有这些JAR的旧版本,请下载这些JAR的2.2版本,并将其放在JRE_HOME/lib/approved文件夹中。使用相同的jre路径构建项目
在tomcat上部署应用程序时,将jaxb和jaxws.jar[2.2版本]复制到目录CATALINA_HOME/approved中。您可以开始了。当我们传递Nullable时,它表示您不能传递Nullable,DateTime应在AddSchedule中。您需要使所有相关代码使用
DateTime?
/Nullable
或使用值属性(注意:如果在Value
属性为null时访问它,它将抛出一个异常!您可以使用HasValue
属性进行检查,或将其与null进行比较。我对.Net没有太多经验。只是好奇addSchedule中java端的日期数据类型应该是什么,因此在.Net端客户端包装器调用看起来像一个ddSchdule(DateTime,Nullable)如果DateTime在Java中可以为null,那么您希望使用DateTime?
(它只是Nullable
的缩写)在.NET中需要使用它们的任何地方。如果值实际上永远不会为null,则可以从DateTime?
读取Value
属性。否则,您需要修复所有代码以正确处理null
或Value
属性。如果不确切知道您在编写什么代码,我很难更具体地说在Java中,任何对象都可以被分配为“null”,对象也是如此。Date
Object。Web服务方法-addSchedule(Date startDate,Date endDate)
可以由Java客户端调用-addSchedule(new Date,null).Net客户端,该客户端使用Java webservice WSDL结果将客户端代理生成到AddScheule(DateTime,DateTime)。但是.Net客户端不能使用空值AddSchedule(currentDate,null)调用。使用Nullable
:Nullable endTime=null;EndPoint.AddSchedule(currentDate,endTime)
。它抛出类型不匹配错误,请参阅上面的1条注释。