将 Java 客户端请求反序列化到 WCF 服务时出错

Error when deserializing Java client request to WCF service

我的 WCF 服务只有一种方法:

[OperationContract]
void SaveDocument (InwardDocument doc);

[DataContract]
public class InwardDocument{
   [DataMember]
   public Citizen Citizen {get;set;}
   ....
}

[DataContract]
public class Citizen{
   [DataMember]
   public string LastName {get;set;}
   ....
}

我已经使用 WCF 测试客户端和单独的 .NET 控制台应用程序测试了该服务。在这两种情况下,服务都按预期工作。但是当 java 客户端尝试使用它时,会出现反序列化问题。我在 SaveDocument 方法中放置了一些标记以查看导致问题的原因:

public void SaveDocument(InwardDocument doc){
   if(doc==null)
      throw new ArgumentnullException("InwardDocument");
   if(doc.Citizen==null)
      throw new ArgumentnullException("InwardDocument.Citizen");//This exception is thrown when consumed by java client
}

如您所见,第一个异常被跳过,这意味着 doc 参数本身不为空,但出于某种原因,Citizen 属性 为空。在 java 客户端中生成请求的人通过调试代码确认 InwardDocument.Citizen 属性 不为空。事实上,我们在 java 客户端中生成代理 class 时遇到了问题,我在 中对此进行了描述。所以我假设它与相同的 problem.Maybe 有关,我需要向我的 classes 及其成员添加更多属性,以解决其他平台可能出现的任何此类问题?任何建议表示赞赏。

您是否尝试过在 InwardDocument 中添加 Know Type 属性 class。参见 link here

[DataContract]
[KnownType(typeof(Citizen))]
public class InwardDocument{
   [DataMember]
   public Citizen Citizen {get;set;}
   ....
}

问题是由于相应的 JAXBelement 实例的创建不正确造成的。问题的解决方案在