简体   繁体   English

JAXB-如何封送没有标题的Java对象

[英]JAXB - How to marshal java object without header

I'm trying to marshal a java object but I want to remove the header that Jaxb is introducing. 我试图封送一个Java对象,但我想删除Jaxb引入的标头。

Object: 宾语:

@XmlRootElement
public class FormElement implements Serializable {
    private String id;
    private String name;
    private Integer order;
}

Expected output: 预期产量:

<element>
    <id>asd</id>
    <name>asd</name>
    <order>1</order>
</element>

My output: 我的输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<formElement>
  <id>asd</id>
  <name>asd</name>
  <order>1</order>
</formElement>

My marshal method: 我的元帅方法:

public String marshal() {
        JAXBContext context;
        try {
            context = JAXBContext.newInstance(FormElement.class);
            Marshaller marshaller = context.createMarshaller();
            StringWriter stringWriter = new StringWriter();
            marshaller.marshal(this, stringWriter);
            return stringWriter.toString();
        } catch (JAXBException e) {
        }
        return null;
    }

How can I remove it? 如何删除?

Thanks in advance. 提前致谢。

I have solved it using 我已经解决了

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);

and adding (name = "element") to the @XmlRootElement annotation. 并将(name = "element")@XmlRootElement批注。

The correct method: 正确的方法:

public String marshal() {
    JAXBContext context;
    try {
        context = JAXBContext.newInstance(FormElement.class);
        Marshaller marshaller = context.createMarshaller();
        StringWriter stringWriter = new StringWriter();
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
        marshaller.marshal(this, stringWriter);
        return stringWriter.toString();
    } catch (JAXBException e) {
        String mess = "Error marshalling FormElement " + e.getMessage()
                + (e.getCause() != null ? ". " + e.getCause() : " ");
        System.out.println(mess);
    }
    return null;
}

And the correct annotation: 以及正确的注释:

@XmlRootElement(name = "element")

JAXB元帅套装<object><div id="text_translate"><p>我有一个类似于此的 object:</p><pre class="lang-java prettyprint-override"> public class Obj { @XmlElement(name="value") public Set&lt;Object&gt; values; }</pre><p> 编组时,这会生成 xml ,如:</p><pre class="lang-xml prettyprint-override"> &lt;Obj&gt; &lt;value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;2009-02-14T00:31:30.001+01:00&lt;/value&gt; &lt;value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;test&lt;/value&gt; &lt;/Obj&gt;</pre><p> 但是,我想更改其中一些值(例如用于序列化Date和Timestamp对象的日期格式),并摆脱烦人的xsi属性(但这并不是真正的要求,我可以接受)</p><p> 我尝试将@XmlJavaTypeAdapter添加到values ,但在适配器中我得到了完整的Set&lt;Object&gt;来适应,而不是单个元素。 我也尝试过使用 package 适配器,但是,由于我的Set是用于Object ,所以我不能放置@XmlJavaTypeAdapter(type)属性。</p><p> 另外,我尝试使用@XmlJavaTypeAdapter(value=MyAdapter.class, type=Timestamp.class)来获取我想要的 Object 中的值的适配器。</p><p> 所以问题是,有人知道让适配器为此工作的方法吗? 或者,每次序列化Date或Timestamp object 时更改日期格式?</p><p> 提前致谢!</p></div></object> - JAXB marshal Set<Object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在没有任何相关信息的情况下通过JAXB封送对象? - How to marshal an object via JAXB without any information about it? JAXB-具有XML字符串字段的元组Java对象 - JAXB - marshal java object with XML string field 如何将JAXB对象封送到XOM? - How do I marshal a JAXB object to XOM? JAXB元帅套装<object><div id="text_translate"><p>我有一个类似于此的 object:</p><pre class="lang-java prettyprint-override"> public class Obj { @XmlElement(name="value") public Set&lt;Object&gt; values; }</pre><p> 编组时,这会生成 xml ,如:</p><pre class="lang-xml prettyprint-override"> &lt;Obj&gt; &lt;value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;2009-02-14T00:31:30.001+01:00&lt;/value&gt; &lt;value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;test&lt;/value&gt; &lt;/Obj&gt;</pre><p> 但是,我想更改其中一些值(例如用于序列化Date和Timestamp对象的日期格式),并摆脱烦人的xsi属性(但这并不是真正的要求,我可以接受)</p><p> 我尝试将@XmlJavaTypeAdapter添加到values ,但在适配器中我得到了完整的Set&lt;Object&gt;来适应,而不是单个元素。 我也尝试过使用 package 适配器,但是,由于我的Set是用于Object ,所以我不能放置@XmlJavaTypeAdapter(type)属性。</p><p> 另外,我尝试使用@XmlJavaTypeAdapter(value=MyAdapter.class, type=Timestamp.class)来获取我想要的 Object 中的值的适配器。</p><p> 所以问题是,有人知道让适配器为此工作的方法吗? 或者,每次序列化Date或Timestamp object 时更改日期格式?</p><p> 提前致谢!</p></div></object> - JAXB marshal Set<Object> JAXB - 用java评论编组 - JAXB - marshal with java comments 使用jaxb将Java对象转换为xml,反之亦然(将其转换为元组和非元组) - convert java object using jaxb to xml and vice versa (marshal and unmarshal) 使用JAXB编写对象的迭代器 - Marshal an iterator of object using JAXB 使用JAXB的元帅内部类-Java - Marshal inner class with JAXB - Java 如何将JAXB对象封送到org.w3c.dom.Document? - how to marshal a JAXB object to org.w3c.dom.Document? 如何使用JAXB封送/解组链接的Java对象 - How to marshal/unmarshal linked Java objects using JAXB
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM