0

まだメソッドが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 クライアントでプロキシ クラスを生成する際に問題が発生しました。だから私はそれが同じ問題と関係があると仮定しています.おそらく、他のプラットフォームで発生する可能性のあるそのような問題に対処するために、クラスとそのメンバーにさらに属性を追加する必要がありますか? 任意の提案をいただければ幸いです。

4

2 に答える 2

0

この問題は、対応する JAXBelement インスタンスの不適切な作成が原因でした。問題の解決策は、この SO スレッドの回答にあります

于 2015-08-18T14:25:25.533 に答える