まだメソッドが1つしかない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
引数自体は null ではありませんが、何らかの理由で Citizen プロパティが null になっています。Java クライアントでリクエストを生成する担当者は、コードをデバッグして InwardDocument.Citizen プロパティが null でないことを確認します。実際、この SO スレッドで説明する Java クライアントでプロキシ クラスを生成する際に問題が発生しました。だから私はそれが同じ問題と関係があると仮定しています.おそらく、他のプラットフォームで発生する可能性のあるそのような問題に対処するために、クラスとそのメンバーにさらに属性を追加する必要がありますか? 任意の提案をいただければ幸いです。