[英]What is the model of using Smook and Freemarker to transform Java Objects to XML?
我很难找到有关如何进行以下转换的清晰文档:
Java对象-> Smooks / Freemarker模板-> XML输出
这是我尝试的示例:
Java POJO(我有一个单独的DAO clas填充此对象):
package Transformer;
public class JavaObject {
String name;
}
主变压器等级:
package Transformer;
import java.io.IOException;
import java.io.StringWriter;
import javax.xml.transform.stream.StreamResult;
import org.milyn.Smooks;
import org.milyn.container.ExecutionContext;
import org.milyn.payload.JavaSource;
import org.xml.sax.SAXException;
public class Transformer {
protected static String runSmooksTransform(Object javaObject) throws IOException, SAXException {
Smooks smooks = new Smooks("smooks-config.xml");
try {
ExecutionContext executionContext = smooks.createExecutionContext();
StringWriter writer = new StringWriter();
smooks.filterSource(executionContext, new JavaSource("smooks-config.xml"), new StreamResult(writer));
return writer.toString();
} finally {
smooks.close();
}
}
public static void main(String args[]) {
try {
Transformer.runSmooksTransform(javaObject);
} catch(Throwable ex){
System.err.println("Uncaught exception - " + ex.getMessage());
ex.printStackTrace(System.err);
}
}
}
所以这是我感到困惑的地方...我已经看到了几种“映射”模板的方法
这是我看到的一些示例:
映射如下的.ftl模板文件:
<Nm> ${Name} </Nm>
这样的XML映射:
<medi:segment minOccurs="0" maxOccurs="1" segcode="" xmltag="Group">
<medi:field xmltag="Name" />
</medi:segment>
在smooks-config.xml本身中进行映射:
<?xml version="1.0"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.0.xsd"
xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd">
<resource-config selector="global-parameters">
<param name="stream.filter.type">SAX</param>
</resource-config>
<reader mappingModel="example.xml" />
<ftl:freemarker applyOnElement="order">
<ftl:template>
<Nm>${name}</Nm>
</ftl:template>
</ftl:freemarker>
</smooks-resource-list>
因此,谁能解释使用Smooks + Freemarker模板将Java对象转换为指定XML输出的正确方法吗?
或点我具体到这个用例文档/例子吗?
谢谢
我对Smooks中的操作一无所知,但是很有可能需要添加一个public String getName() { return name; }
public String getName() { return name; }
到JavaObject
类,否则它将在FreeMarker模板中不可见。 它实际上取决于FreeMarker的配置设置(而且我不知道Smooks是如何配置的),因此理论上一切皆有可能,但是您可能需要使用getter方法,但如果没有,那么至少该字段需要public
。
同样,您也不要在示例代码中将javaObject
传递给Smooks,尽管我认为这不是真正的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.