我在将一个java.util.Date对象从我的C#客户端发送到我的java webserver时遇到问题。 当我使用Date WebParam调用WebMethod时,它可以工作。但是,如果我使用自定义对象调用WebMethod,该对象具有Date作为WebParam,则它始终为null。
所以,这有效:
@WebMethod(operationName="thisWorks")
public void thisWorks(@WebParam(name="from")Date from)
{
System.out.println(from); //prints the value of the date
}
这不起作用:
class MyObj { java.util.Date getMyDate(); }
@WebMethod(operationName="thisDoesntWork")
public void thisDoesntWork(@WebParam(name="myObj")MyObj myObj)
{
System.out.println(myObj.getMyDate()); //prints null
}
客户端:
ServiceClient client = new ServiceClient();
client.thisWorks(DateTime.Now);
myObj o = new myObj();
o.myDate = DateTime.Now;
client.thisDoesntWork(o);
答案 0 :(得分:1)
wsdl为myDate生成一个额外的字段:“bool myDateSpecified”。当我将其设置为true时,它可以正常工作。这很奇怪,因为当我有一个int字段而不是date时我也得到了一个指定的字段,但现在我没有必要设置指定的字段才能工作。
答案 1 :(得分:1)
这个问题似乎是.Net XML Serializer。我用Java重写了我的代码,它运行得非常好。
我可以想办法解决{!variable}Specified = true;
句子:
将对象的整个声明移动到单独的命名空间。因此,每次更新WSDL时,您的代码都不会被覆盖。
请勿在属性声明中使用System.Nullable<bool>
,请使用bool
或DateTime
或Double
。明白这一点?