0

.NETクライアントからJavaWebサービスへのWebサービス呼び出しを行っています。Webサービス要求メッセージのフィールドの1つは小数です。

プロキシリクエストオブジェクトを使用して設定されます。

decimal value = 3.0
request.DecimalValue = value ;
javaService.Process(request);

メッセージがsoapにシリアル化されると、DecimalValueは3.000000に設定されます。ただし、Java Webサービスは、小数点以下3桁しか期待していないため、エラーになります。これを解決する方法について何かアイデアはありますか?JavaWebサービスを制御できません。

添加:

Java Webサービスのスキーマは、DecimalValueを次のように定義します。

<xs:simpleType name="DecimalValue">
 <xs:restriction base="xs:decimal">
  <xs:totalDigits value="9" />
  <xs:fractionDigits value="3" />
  <xs:pattern value="\d{1,5}\.\d{3}" />
 </xs:restriction>

Webサービスプロキシは、エンドポイントへの参照を追加することによって生成されます。

4

1 に答える 1

0

この例では、提供した単純なxsdを使用して作成されています。

    [System.Runtime.Serialization.DataMemberAttribute(Order=0)]
    public decimal DecimalValue;

次のように変更します。

    [System.Runtime.Serialization.DataMemberAttribute(Order=0, Name="DecimalValue")]
    private string DecimalValueFormatted;
    private decimal decimal_value_int;

    public decimal DecimalValue {
        get { return decimal_value_int; }
        set 
        { 
            decimal_value_int = value; 
            DecimalValueFormatted = String.format("{0:N2}", value);
        }
    }

注:これは多少のハックであり、多くの型に対して行う必要がある場合は、データメンバーに配置できる独自の形式属性を作成し、属性をチェックする10進数のカスタム型バインディングを追加する必要があります。私は実際に属性メソッドを実行していないので、それは思ったより難しいかもしれません。

于 2012-05-07T16:41:37.580 に答える