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

时间:2015-08-18 05:14:26

标签: web-services wcf deserialization java-client

我有一个只有一种方法的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属性为null。在java客户端中生成请求的人通过调试代码确认InwardDocument.Citizen属性不为null。事实上,我在this SO thread中描述的java客户端中生成代理类时遇到了问题。所以我假设它与同一个问题有关。也许我需要为我的类及其成员添加更多属性来处理其他平台可能出现的任何此类问题?任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

您是否尝试在InwardDocument类中添加Know Type属性。请参见链接here

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

答案 1 :(得分:0)

问题是由不正确创建相应的JAXBelement实例引起的。该问题的解决方案在 this SO thread answer