jaxb不要元帅属性

发布于 2025-02-12 18:45:51 字数 1586 浏览 0 评论 0原文

我有一些由Jaxb Mave插件生成的类:

@XmlType
@XmlRootElement(name = "Foo", namespace = "urn://some-urn")
public class Foo {
    @XmlAttribute(name = "id", required = true)
    protected String id;
    @XmlAttribute(name = "name", required = true)
    protected BigInteger name;
    @XmlAttribute(name = "age", required = true)
    protected String age;

我需要从该类中元使用对象,但是JAXB将属性作为一个元素。

必要:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:Foo xmlns:ns2="urn://some-urn" id="1" name="Boris" age="43">
    //some elements in the root element
</ns2:Foo>

提供:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:Foo xmlns:ns2="urn://some-urn">
    <id>1</id>
    <name>Boris</name>
    <age>43</age>
</ns2:Foo>

编组方法:

public String marshalToXml(Foo foo) {
        StringWriter stringWriter = new StringWriter();
        try {
            Marshaller marshaller = JAXBContext.newInstance(Foo.class).createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            QName qName = new QName("urn://some-urn",
                    "Foo");
            JAXBElement<Foo> bar = new JAXBElement<>(qName, Foo.class, foo);
            marshaller.marshal(bar, stringWriter);
            return stringWriter.toString();
        } catch (JAXBException e) {
            log.error(e.getMessage(), e);
        }
        return null;
    }

I have some class generated by jaxb mave plugin like this:

@XmlType
@XmlRootElement(name = "Foo", namespace = "urn://some-urn")
public class Foo {
    @XmlAttribute(name = "id", required = true)
    protected String id;
    @XmlAttribute(name = "name", required = true)
    protected BigInteger name;
    @XmlAttribute(name = "age", required = true)
    protected String age;

I need to marshal object from this class, but JAXB marshaling attributes as an elements.

Required:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:Foo xmlns:ns2="urn://some-urn" id="1" name="Boris" age="43">
    //some elements in the root element
</ns2:Foo>

Provided:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:Foo xmlns:ns2="urn://some-urn">
    <id>1</id>
    <name>Boris</name>
    <age>43</age>
</ns2:Foo>

Marshalling method:

public String marshalToXml(Foo foo) {
        StringWriter stringWriter = new StringWriter();
        try {
            Marshaller marshaller = JAXBContext.newInstance(Foo.class).createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            QName qName = new QName("urn://some-urn",
                    "Foo");
            JAXBElement<Foo> bar = new JAXBElement<>(qName, Foo.class, foo);
            marshaller.marshal(bar, stringWriter);
            return stringWriter.toString();
        } catch (JAXBException e) {
            log.error(e.getMessage(), e);
        }
        return null;
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文