サーバー上に特定のディレクトリ(特定のディレクトリ)(たとえば5分)ごとにファイルを取得するプロセスがあります。 ピックアップされているファイルは、Webサービスによって生成されます。 JAXBマーシャリングはファイルをオブジェクトからxmlファイルに変換します。 問題は、ファイルが完了する前にピックアップされることが頻繁に発生することです。 解決方法は、一時ディレクトリにファイルを配置するか、一時的な特定の拡張子を付けて、ポーリングプロセスにこれらをスキップするよう通知させることです。 その後、ファイルを処理ディレクトリに移動することができます。または、拡張機能を変更して、ポーリングプロセスがそれらを取得できるようにすることができます。JAXBがファイルにマーシャリングされたことを確認する方法
この方法は次のようになります。
private void writeToFile(Object obj, String outputFileName) {
LOG.debug("Executing operation writeToFile using filename '{}' and object of type '{}'.", outputFileName, obj.getClass());
try {
Marshaller jaxbMarshaller = JAXB_CONTEXT.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(obj, new File(outputFileName));
LOG.debug("Wrote request to file '{}'.", outputFileName);
} catch (JAXBException e) {
LOG.error("Exception occurred while writing request to file:", e);
}
LOG.debug("Done executing operation writeToFile.");
}
私の質問は、ファイルがさらなる処理のためにリリースすることができるようにマーシャリングプロセスへが行われていることdtermineする暑いですか?ここで
jaxbMarshaller.marshalの後に.xmlpartialという別の拡張子を付けてoutputFileNameを試してみると、ファイル名を.xml拡張子に戻す行を追加すると、完了したらウォッチャーがxmlファイルをピックアップするようにすることができます – Saran
これは問題ありませんが、マーシャリングが完了したときはどうすればわかりますか?それは私が悩んでいる本質的な問題です。 PS:私は 'lck'のような拡張機能についてもっと考えていましたが、すべてが本当にうまいです。 – Frazz
[link](https://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html#marshalEventCallback)afterMarshal – Saran