Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java webservice和.net客户端日期数据类型可插入性问题_Java_.net_Web Services_Date_Types - Fatal编程技术网

Java webservice和.net客户端日期数据类型可插入性问题

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。但

有一个.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_值作为有效日期


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

尝试使用可为空的日期时间(
可为空的
日期时间?
),因为这可能包含空值。一个普通的值类型(比如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条注释。