getSummaryListXML()を実装する

XMLシリアライズするコードはこのように書けます。

MessageService.java

/**
 * 投稿された全てのメッセージの概要リストをXMLにしたものを取得します。
 */
public String getSummaryListXML() throws Exception {
	String result = null;

	try {
		System.out.println("getSummaryList INVOKED");
		DataContext context = Configuration.getSharedConfiguration().getDomain().createDataContext();

		//親メッセージだけを全てフェッチする
		SelectQuery query = new SelectQuery("Message");
		query.setLoggingLevel(Level.INFO);
		Expression expression = ExpressionFactory.matchExp("parentId", null);
		query.setQualifier(expression);
		query.addOrdering("modificationDate", false); //修正日時でソート

		List allDatas = context.performQuery(query);

		StringWriter writer = new StringWriter();

		BeanWriter bw = new BeanWriter(writer);
		bw.enablePrettyPrint();//XMLを読みやすいように整形する
		BindingConfiguration binding = new BindingConfiguration();
		binding.setMapIDs(false);//内部循環を持つ場合、一意のIDを自動的にふる
		bw.setBindingConfiguration(binding);
		bw.getXMLIntrospector().getConfiguration().setWrapCollectionsInElement(true);
		bw.writeXmlDeclaration("<?xml version=?"1.0?" encoding=?"Shift_JIS?"?>");


		bw.write(allDatas);
		bw.flush();
		bw.close();
		result = writer.toString();

	} catch (Exception e) {
		System.out.println(e.getMessage());
		e.printStackTrace();
		throw e;
	}

	System.out.println(result);

	return result;
}

今回はとりあえずメッセージを全てフェッチします。そのListをbetwixtにシリアライズさせます。


次に.betwixtファイルです。
このファイルはMessage.javaと同じ階層に入れておきます。

Message.betwixit

<?xml version="1.0" encoding="utf-8"?>
<info>
	<element name="Message" property="message">
		<attribute name="data" property="pk"/>
		<attribute name="label" property="shortSubject"/>
		<attribute name="toolTip" property="toolTip"/>
		<attribute name="child" property="child"/>
		<element name="Message" property="children">
		</element>
	</element>
</info>