2016-05-04 14 views
0

この問題の解決策が必要です:外部フォーマットを内部フォーマットに変換する

私はサービスプロバイダであり、私が扱っているサービスクライアントがいくつかあります。

service client 1 fields are --> f1 , f2 , f3 
service client 2 fields are --> f2 , f3 , f4 
service client 3 fields are --> f3 , f7 , f8 

それは彼らが追加または新しいフィールドを削除するか、「サービスクライアント1」とは、例えば、彼らの現在のフォーマットを変更することも可能である組み合わせ: 各サービスクライアントは、例えば、独自の形式で私に要求を送信し

f1+f2 ==> f12 and adds f5 

またはクライアント3:

decomposes f7 ---> f1,f2 

私は、例えば、自分のために内部形式を必要とする:

この形式は、xml構成ファイルで変更できるように構成する必要があります。クライアント側で変更が発生した場合は、ソースコードを変更せずにxmlを変更して修正します。

どうすればいいですか?

答えて

0

簡単に言えば、外部メッセージを手渡すAPIと「方法」ファイルが必要で、それにはいくつかの魔法があり、内部メッセージを伝える必要があります。メッセージ変換であるAPIの主な義務に注目しましょう。あなたが言及したように、それはXML設定ファイルによって設定可能であるべきです。 「名前」と呼ばれる少なくとも1つの属性を持つ「フィールド」と呼ばれる要素が必要です。これらのField要素のコレクションを親要素内にラップします。 "Field"要素の各々は、ターゲット内部メッセージのフィールドを指定する。 Field要素内では、私の望みのフィールドを集める責任を負う別の要素を追加し、その上で関数を実行します。

<fields> 
    <field name="aLong"> 
     <function name="add"> 
      <arg> 
       <function name="readExternalField"> 
        <arg> 
         f1 
        </arg> 
       </function> 
      </arg> 
      <arg> 
       <function name="readExternalField"> 
        <arg> 
         f2 
        </arg> 
       </function> 
      </arg> 
     </function> 
    </field> 
    <field name="aStr"> 
     <function name="getFromArray" index="0"> 
      <arg> 
       <function name="splitStr" character=" "> 
        <arg> 
         <function name="readExternalField"> 
          <arg> 
           f3 
          </arg> 
         </function> 
        </arg> 
       </function> 
      <arg> 
     </function> 
    </field> 
</fields> 

たちは「一緒に」と「ASTR」と呼ばれる、少なくとも2つのフィールドがあり内部オブジェクトと、少なくとも三つのフィールドがある外部のオブジェクト持って想像してみて:ここでは、XML設定のサンプルの「F1」は、 "f2"と "f3"。要点は、戻り値の型が対象フィールドに代入可能な関数を使用することを確認する必要があります。関数 "add"は、フィールド "f1"と "f2"の値を加算し、結果をフィールド "aLong"に割り当て、関数 "splitStr"は "f3"フィールドを分割し、関数 "getFromArray結果として配列の最初の項目を取得します。
JAXB APIを使用して自分のXMLファイルを非整列化して簡単に解析できるので、XMLファイルからオンラインツールを使用して生成できるXSDドキュメントが必要です。私は地図をベースにしたオブジェクトを利用して反射物を行う必要性を排除することを提案します。 RESTサービスを開発すると、受信したJSONメッセージをマップオブジェクトに変換できます。このように、APIにはマップベースのオブジェクトを受け取り、それを返すメソッドがあります。したがって、すべてのフィールドは、マップ内のキーであり、クラス内のフィールドではありません。しかし、関数は特定の型を持つ特定のパラメータを持つことができます。 API本体は、取得したオブジェクトを外部マップからキャストして関数に渡し、返された値をXMLファイル内の指定されたフィールド名を持つ内部メッセージに配置する必要があります。
私はこの短い答えが満足のいく解決方法を示してくれることを願っています。あなたの同僚と誇らしげに分かち合うことができる効率的なAPIを書くことはスキルであり、

+0

この素晴らしい情報をすべて私と共有していただきありがとうございます。あなたのソリューションは非常に包括的で、私が必要としていたものです。 – mhsaeedi

+0

あなたは大歓迎です:) –

関連する問題