問題タブ [smooks]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wso2 - wso2 による XML から XML への変換
wso2 esb 4.8.1 を使用しています。smooks メディエーターを使用して xml から xml への変換を実行しようとしていますが、wso2 のアプリケーション展開コンソールからの試行から要求がヒットすると、次の例外が発生します。
シーケンス xml は次のとおりです。
以下は smooks 設定ファイルです。
私の代行依頼は添付画像のとおりです。
java - smooks で ISA-Segment を定義するには?
smooks を使用して、Java プログラムで ANSI.X12 メッセージを作成しています。私はxmlファイルを使用してX12メッセージを自分で定義しています(http://www.milyn.org/schema/edi-message-mapping-1.2.xsd
. そのほとんどは十分に機能しますが、ISA セグメントに問題があります。私はそれを次のように定義しています:
正しい長さの文字列を挿入する限り、これは主に使用できます。問題はコンポーネントセパレーターにあります(^
この場合)。ISA セグメントは、どの文字がセグメントや要素などを区切るために使用される特別な文字であるかを定義し"^"
ますComponentElementSeparator
。特別な ISA セグメント。
私は得る
どこにあるべきか
?
(の前の最後の に注意してください^
)。
medi:delimiters
これまでに得た唯一の回避策は、などに別の文字を入れる<medi:delimiters segment=" " field="*" component="<" sub-component="~" escape="?" />
ことですが、その文字がデータのどこかに現れるとすぐに問題が発生します。メッセージは分離する必要のあるコンポーネントを使用していないため、これは特にイライラします。
smooks のドキュメントでそれに関する情報を見つけることができませんでしたが、何らかの方法でそれを行う必要があります。結局のところ、X12 は私が知っている 2 つの理由のうちの 1 つであり、誰もがそもそも smook を使用する (もう 1 つは EDIFACT である) ということです。
smooks メッセージの説明に ISA を挿入する正しい方法を知っている人はいますか?
xml - wso2 esb smooks un/edifact 96a EDI から XML
私は WSO2 ESB から始めることはほとんどなく、VFS (既に有効になっている) 経由で取得した .edi ファイル (96a) から XML に変換できるスキームを作成する必要があります ... このために、私は Smooks を使用しています。 UN / EDIFACT を使用して解析を実行します。実行すると、次のエラー WSO2 が表示されます。
Smooks の構成は次のとおりです。
これと同じ構成を Java アプリケーションで使用したことがあり、完全に機能しました。
また、CLASSPATH と build-classpath-directory コマンドを作成する以外に、ドロップインと lib ディレクトリ内の WSO2 に依存関係を手動で追加しようとしましたが、役に立ちませんでした。
wso2 - WSO2 が Smooks からの例外をキャッチしない
私は WSO2 ESB 4.8.1 を使用しており、Smooks 1.5 を使用して固定長ファイルを読み取り、生の XML で解析しています。正常に動作していますが、例外的なフローも実装する必要があります。
問題:
問題は、smooks 構成ファイルを台無しにすると、例外がスローされますが、WSO2 によってキャッチされないことです。他のすべてのエラーと例外の場合、WSO2 はエラー シーケンスを開始し、そこで ERROR_MESSAGE、ERROR_DETAIL プロパティを取得できますが、この場合はフローを終了するだけで、サービスはエラー シーケンスに入りません。したがって、サービスが障害シーケンスに入らない限り、私はそれについて何もできません。
サンプル ファイル:
例外を作成するために使用している Smooks-config ファイル:
wso2 ログ ファイルの例外:
注: Smooks は正しい例外を提供していますが、WSO2 esb サービスが障害シーケンスに入らず、終了しないのはなぜですか? それはスムックによる何らかの動作ですか..?
java - Smooks などを使用して要素ごとに XML ファイルを分割する
ここで基本的なタスクと見なすことをやろうとしています。
私は、 XML コンテンツを要素ごとに分割できるシンプルできちんとしたJava ソリューションを求めています。コンテンツ全体をメモリにロードするのではなく (つまり、要素をストリーミングしたい)、各要素の文字列表現を取得して、必要な場所に送信したいと考えています。
私の明らかに失敗した StAX でのプル解析の試み:
Smooksも試しましたが成功しませんでした。特に、ここで提供されている例http://www.smooks.org/mediawiki/index.php?title=V1.4:Smooks_v1.4_User_Guide#Basic_Splitting_and_Routingは、要素。XML 要素をファイル、DB、または JMS キューに送信したい場合は、すべて簡単でスムーズですが、文字列 XML を手に入れたい場合はそうではありません。
私は、SAX ベースのソリューションを独自に作成する方が労力がかからないのではないかと考え始めたことに落胆しています。私が間違っていることを証明できる人はいますか?
windows - Windows で Java によってロックされた Smooks JAR
現在、Mule ESB でカスタム Smooks トランスフォーマーを使用しています。このトランスフォーマーによって使用される一部のクラスは、アプリのシャットダウン時にメモリに保持されます (org.milyn.cdr.SmooksResourceConfiguration、org.milyn.xml.Namespace$SmooksNamespaceMappings)。クラスが属する jar はロックされ (milyn-smooks-core-1.5.2.jar)、アンデプロイ時に jar はミュールによって削除されません (これは Windows でのみ発生します)。
spring destroy メソッドを使用して Smooks オブジェクトをクリーンアップしようとしました。また、起動時に smooks オブジェクトをレジストリに配置して削除しようとしましたが、どちらも問題を解決しませんでした。
機能している唯一の回避策は、smooks 関連の jar (milyn-commons、milyn-smooks-core、milyn-smooks-templating) を ${MULE_HOME}/lib/user フォルダーにコピーすることです。
ここでの問題は、Mule ではなく Smooks に関連しているようです。おそらく、Smooks はデフォルトでオブジェクトをキャッシュしているのか、それともストリームではないのでしょうか?
これに関する助けをいただければ幸いです。
groovy - Java Camel で Smooks または Groovy を使用して XML を分割/変換する
Camel バージョン 2.14 Smooks バージョン 1.5.1
分割して変換したいメッセージを受け取りましたが、親からのIDが必要です。そこで、Smooks を使用してメッセージを分割し、各出力を変換してキューに送信することを考えました。変換に freemarker テンプレートを使用します。
たくさんの例があります。ただし、たとえば、キャメルの例は、既知の問題である「java.lang.ClassNotFoundException: org.apache.camel.component.ResourceBasedComponent」が原因で機能しません。
代替手段は、変換にgroovyを使用することですか?
では、これを最も簡単に解決するにはどうすればよいでしょうか。
java - レコードで二重引用符が検出された場合、Smooks はカンマ区切りの値を返さない
私は CSV ファイルを持っています。smooksConfig ファイルで「コンマ」を区切り文字として指定しています。しかし、smooks は値の 1 つに二重引用符 (例: 21 インチ TV、10 インチ スクリーン) が含まれていると、値の取得に失敗します。
ありがとう。