【问题标题】:Date SOAP webservice日期 SOAP 网络服务
【发布时间】:2011-12-31 00:05:11
【问题描述】:

我在将 java.util.Date 对象从我的 C# 客户端发送到我的 java Web 服务器时遇到问题。 当我使用 Date WebParam 调用 WebMethod 时,它可以工作。但是,如果我使用具有 Date 作为 WebParam 的自定义对象调用 WebMethod,则它始终为空。

所以,这行得通:

@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);

【问题讨论】:

  • 使用fiddler2.com/fiddler2devolutions.net/products/HTTP-Spy-Net.aspx 调试服务器和客户端之间发送的内容
  • 您展示的是 Java 端,愿意分享您的 C# 客户端代码吗?
  • 你在服务器端显示class MyObj { java.util.Date getMyDate(); },而在客户端你显示一个字段/属性myDate - 这根本不匹配IMO!
  • myObj 是从 wsdl 生成的。服务器上的 MyObj 类有一个带有 getter 和 setter 的字段 myDate。当我给这个类一个 int 成员时,它就起作用了。但随着日期它没有
  • wsdl 为 myDate 生成一个额外的字段:“bool myDateSpecified”。当我将其设置为 true 时,它​​可以工作。这很奇怪,因为当我有一个 int 字段而不是 date 时,我也得到了一个指定的字段,但现在我不必设置指定的字段来让它工作。

标签: c# java web-services soap


【解决方案1】:

wsdl 为 myDate 生成一个额外的字段:“bool myDateSpecified”。当我将其设置为 true 时,它​​可以工作。这很奇怪,因为当我有一个 int 字段而不是 date 时,我也得到了一个指定的字段,但现在我不必设置指定的字段就可以了。

【讨论】:

    【解决方案2】:

    这个问题似乎是.Net XML Serializer。我确实用 Java 重写了我的代码,并且效果很好。

    我可以想办法解决{!variable}Specified = true;这句话:

    将对象的整个声明移至单独的命名空间。因此,每次更新 WSDL 时,您的代码都不会被覆盖。

    并且不要在属性声明中使用System.Nullable<bool>,使用boolDateTimeDouble。明白了吗?

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      相关资源
      最近更新 更多