Staxmate API を使用して XML ファイルを生成しています。チュートリアルを読んだ後: http://staxmate.codehaus.org/Tutorialコードを変更してみました。最後に私は呼び出しを追加しました
doc.setIndentation("\n ", 1, 1);
これにより、新しく生成された XML ファイルが空になります。このメソッドを呼び出さないと、XML ファイル全体が期待どおりに生成されます。
プロジェクトのセットアップで怪しいものを疑って、チュートリアルで指定されたコードを使用して、同じパッケージに Test クラスを作成しました。
package ch.synlogic.iaf.export;
import java.io.File;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import org.codehaus.staxmate.SMOutputFactory;
import org.codehaus.staxmate.out.SMOutputDocument;
import org.codehaus.staxmate.out.SMOutputElement;
public class Test {
public static void main(String[] args) {
main("c:\\tmp\\empl.xml");
}
public static void main(String fname)
{
// 1: need output factory
SMOutputFactory outf = new SMOutputFactory(XMLOutputFactory.newInstance());
SMOutputDocument doc;
try {
doc = outf.createOutputDocument(new File(fname));
// (optional) 3: enable indentation (note spaces after backslash!)
doc.setIndentation("\n ", 1, 1);
// 4. comment regarding generation time
doc.addComment(" generated: "+new java.util.Date().toString());
SMOutputElement empl = doc.addElement("employee");
empl.addAttribute(/*namespace*/ null, "id", 123);
SMOutputElement name = empl.addElement("name");
name.addElement("first").addCharacters("Tatu");
name.addElement("last").addCharacters("Saloranta");
// 10. close the document to close elements, flush output
doc.closeRoot();
} catch (XMLStreamException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
コードからメソッドを呼び出してmain(String)
も問題は解決しませんが、クラス Test をそのまま実行するとスムーズに動作します。私のコードには、データベースの初期化とその他の製品固有のアクションが含まれています。
道に迷っています。これをどのように進めるべきかについて何か考えはありますか?