[OSB] MFL and the BEA-382030 Error Message

CSVファイルをXMLに変換するという簡単なMFLファイルを作成していたときのこと、Format Builderでテストすると問題ないのですが、プロキシサービスに登録すると、BEA-382030(Error: メッセージのアンマーシャリング中にエラーが発生しました : Failed to transform MFL content from binary to XML)というエラーが発生しました。
Webで探しても十分な情報がなく、バグ発見か、と思いましたが、結果的には、MFLでの設定ミスであることがわかりました。問題は、MFLツールの設定がまずかった、ということです。問題の設定方法を再確認しましたので、非常にシンプルな解決方法を紹介します。

処理したいCSVファイルには、3つのフィールド(姓、名および会社)があります。以下はその例です。
Bob,Hope,MGM
Lucille,Ball,MGM
Harold,Lloyd,Unknown
各行は顧客を表します。このCSVファイルから次のようなXMLを作成したかったのです。
<?xml version="1.0" encoding="UTF-8"?>
<CustomerList>
  <Customer>
    <firstName>Bob</firstName>
    <lastName>Hope</lastName>
    <company>MGM</company>
  </Customer>
  <Customer>
    <firstName>Lucille</firstName>
    <lastName>Ball</lastName>
    <company>MGM</company>
  </Customer>
  <Customer>
    <firstName>Harold</firstName>
    <lastName>Lloyd</lastName>
    <company>Unknown</company>
  </Customer>
</CustomerList>
まず、XMLルートノードを"CustomerList"と定義し、"Customer"グループをルートノードに追加しました。グループの発生回数は"Unlimited"とし、Groupのデリミタを"無し"(None)としました(下図はスクリーンショット)。


次に、CustomerグループにfirstName(名)、lastName(姓)というフィールドを追加し、データ型をstring、発生回数を1回、区切り文字をカンマ(,)としました。最後のフィールドCompanyは、区切り文字を\n(改行)とし、その他の設定はfirstNameなどと同じにしました。MFLに組み込まれているテストツールで確認したところ、問題なく動作しました。



では、何が問題だったのでしょうか。BEA-382030というエラーメッセージが発生しないようにMFLを適切に設定するためには、Customerグループをちょっと変更する必要があります。その設定とは以下のようなものです。
  • Group Delimiterグループ内のDelimitedラジオボタンを選択
  • "Delimiter Is Shared"と"Delimiter Is Not Optional"の両チェックボックスをON
  • Valueフィールドに\nを指定
この設定により、各行末の\nがCompanyフィールドの区切り文字というだけでなく、Customerグループの区切り文字でもある(区切り文字を共有している)ことをMFLツールに指示します。Customerグループの正しい設定は以下のようになります。


正しく設定し終えたら、MFLファイルを保存しましょう。MFLファイルを再読み込みすることをお勧めします(Project Explorerでハイライトして、F5ボタンを押す)。すると、MFLファイルをプロキシサービスにて再選択でき、全てが正しく更新されます。あとは、プロキシサービスをデプロイして、通常通りテストをするだけです。もうこれからはあの忌々しい BEA-382030 エラーメッセージが出てくることはありません。


原文はこちら。
http://blogs.oracle.com/jeffdavies/entry/mfl_and_the_bea_382030

0 件のコメント:

コメントを投稿