当前位置: 首页 > 知识库问答 >
问题:

使用Smook和Freemarker将Java对象转换为XML的模型是什么?

漆雕和雅
2023-03-14

我很难找到关于如何进行以下转换的清晰文档:

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);
        }
    }
}

所以这就是我困惑的地方...我已经看到了几种不同的方法来“映射”模板

以下是我看到的一些例子:

     <Nm> ${Name} </Nm>
    <medi:segment minOccurs="0" maxOccurs="1" segcode="" xmltag="Group">
                <medi:field xmltag="Name" />
    </medi:segment>
 <?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>

共有1个答案

越运锋
2023-03-14

我不知道它在Smooks中是如何实现的,但很可能需要向JavaObject类添加公共字符串getName(){return name;},否则它在FreeMarker模板中是不可见的。它实际上取决于FreeMarker的配置设置(我不知道Smooks是如何配置的),所以理论上任何事情都是可能的,但可能需要一个getter方法,但如果不需要,那么至少该字段需要public

此外,在示例代码中,您也没有将JavaObject传递给Smoks,尽管我认为这不是真正的代码。

 类似资料:
  • 我怎么能转换java对象到xml?我试图转换一个传入的java对象到xml在Spring集成与转换器豆。有没有其他的方法比编组在Jaxb?喜欢使用@TypeConver。或实现转换器类。

  • 我有一个用例,其中输入数据是xml格式的。它包含多个字段,而我们只感兴趣阅读很少的字段。 根据不同的用例,必须编写单独的velocity模板来将xml转换为json数据。 关于如何编写velocity模板以将XML转换为JSON,我找不到更好的指南。有人能帮助我们如何编写从XML到JSON转换的velocity吗? 提前感谢!

  • 我想使用XML有效载荷,比如: 另一种有效载荷是: 所以我想为创建一个类,其中包含和一个,我可以在其中放置不同类型的对象,所以我尝试了多种类型的对象一个带有的类,但它不允许我具有相同的名称 在这种情况下我能做什么?提前感谢。

  • 我试图将我下面的xml转换为java对象。 这是我的xml: 我需要在"提供者组织"下获取"name"的值。下面是我Java课。 诊所ocument.java 记录目标。JAVA 病人ole.java 供应商组织。JAVA XMLFileParserSAXUtility.java 我得到的结果是 如果我尝试打印syso(临床文件); 结果是临床文档[recordTarget=null] 请帮帮我!

  • 我有以下XML,需要将其转换为java对象。 我不确定当我使用JAXB转换它时,我的pojo将是什么。 根据我的理解,我创建了以下POJO: 请帮帮我。提前感谢。

  • 问题内容: 我想知道将Java对象转换为xml的最佳或最广泛使用的api是什么。我在这个话题上还很新。您可以通过某种API调用来传递对象并返回xml吗?还是在需要通过拉出对象值来手动构造文档的地方更加繁琐? 我一直在阅读有关xerces,sax和jaxb的信息。我想继续沿着这条开源路线走。 谢谢! 问题答案: JAXB 绝对 是 解决方案。 为什么?好吧,它 位于JDK 6中 ,因此您永远不会发现