代码之家  ›  专栏  ›  技术社区  ›  swilliams

Java Web服务和.NET客户端删除DateTime对象

  •  1
  • swilliams  · 技术社区  · 17 年前

    在Java web服务和与之对话的.NET客户端之间看到一些奇怪的东西。我们正在发送一个对象来回与一个 DateTime

    [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://ournamespace.com/")]
    public partial class myClass {
        private System.DateTime expirationDateField;
        private string nameField;
    
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public System.DateTime expirationDate {
            get {
                return this.expirationDateField;
            }
            set {
                this.expirationDateField = value;
            }
        }
    
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string name {
            get {
                return this.nameField;
            }
            set {
                this.nameField = value;
            }
        }
    }
    

    我们接收到的对象的日期刚刚好,但是当我们将它们发送回Web服务时 expirationDate 财产显示为 null . 我们查看了Java服务器正在接收的原始XML和标记 到期日 没有,有点像这样:

    <myClass><name>My Name</name></myClass>
    

    (这不是确切的XML,但已经足够接近了)。我仔细检查了一下 在发送之前,必须在.NET客户端上进行设置。WSDL的XSD看起来并不奇怪:

    <xs:element name="Expiration" type="xs:dateTime" minOccurs="0"/>
    

    我们在其他东西上使用相同的类型,它们也工作得很好。在.NET方面,我们使用 wsdl.exe 用于生成类和代码的工具。

    2 回复  |  直到 17 年前
        1
  •  5
  •   John Saunders    17 年前

    如果模式中的值类型是可选的,WSDL.EXE将为该值生成一个属性,并生成一个bool属性以指示该值是否存在。您应该具有需要设置为的ExpirationSpecified属性 符合事实的 何时发送到期日期,以及 错误的 当你不知道的时候。

        2
  •  1
  •   oak    12 年前

    除了我接受约翰的答案作为解决方案之外,我还要说明完整的机制。每当与“not nullable”C#type对应的“nullable”java类型用作web服务对象类型属性时,就会发生这种情况。例如,如果使用Java中的基本包装类型,如“Integer”、“Boolean”,则这些类型对应于int、bool,它们不可为null。因此,应设置“*指定”属性,以便发送它们。


    http://msdn.microsoft.com/en-us/library/exchange/bb402199%28v=exchg.140%29.aspx