【问题标题】:EclipseLink MOXy @XmlPath support for element with different values e.g. <Pty ID="ID1" Src="6" R="1">EclipseLink MOXy @XmlPath 支持具有不同值的元素,例如<Pty ID="ID1" Src="6" R="1">
【发布时间】:2012-08-15 06:50:38
【问题描述】:

谁能帮我生成&lt;Pty ID="ID1" Src="6" R="1"&gt;标签使用

EclipseLink MOXy @XmlPath 在单个注释中。

非常感谢。

【问题讨论】:

  • 您能否更新您的问题以包含您的域模型的外观?
  • 我需要使用 EclipseLink MOXy @XmlPath 生成 FIXML,如下所示。系统只有基于单个标签中的 ID 值的 ID 值,我需要为 Src 和 R 属性设置默认值。 `

标签: eclipselink moxy


【解决方案1】:

我不确定我是否满足您的要求,但这是我认为您正在尝试做的事情的答案。

IdAdapter

您可以编写 XmlAdapter 将单个 id 值转换为具有多个属性的对象。这些其他属性将设置为默认值。

package forum11965153;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class IdAdapter extends XmlAdapter<IdAdapter.AdaptedId, String> {

    public static class AdaptedId {
        @XmlAttribute(name="ID") public String id;
        @XmlAttribute(name="Src") public String src = "6";
        @XmlAttribute(name="R") public String r = "1";
    }

    @Override
    public AdaptedId marshal(String string) throws Exception {
        AdaptedId adaptedId = new AdaptedId();
        adaptedId.id = string;
        return adaptedId;
    }

    @Override
    public String unmarshal(AdaptedId adaptedId) throws Exception {
        return adaptedId.id;
    }
}

私人

@XmlJavaTypeAdapter 注解用于指定XmlAdapter。要将值折叠到根元素中,请使用 MOXy 的 @XmlPath(".") 注释(请参阅:http://blog.bdoughan.com/2010/07/xpath-based-mapping.html)。

package forum11965153;

import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement(name="Pty")
@XmlAccessorType(XmlAccessType.FIELD)
public class Pty {

    @XmlJavaTypeAdapter(IdAdapter.class)
    @XmlPath(".")
    String id;

}

jaxb.properties

如您所知,要将 MOXy 指定为您的 JAXB 提供程序,您需要在与您的域模型相同的包中包含一个名为 jaxb.properties 的文件,其中包含以下条目(请参阅:http://blog.bdoughan.com/search/label/jaxb.properties

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

演示

下面的演示代码可以用来证明一切正常:

package forum11965153;

import java.io.StringReader;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Pty.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        StringReader xml = new StringReader("<Pty ID='ID1' Src='6' R='1'/>");
        Pty pty = (Pty) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.marshal(pty, System.out);
    }

}

输出

下面是运行演示代码的输出:

<?xml version="1.0" encoding="UTF-8"?>
<Pty ID="ID1" Src="6" R="1"/>

【讨论】:

  • 非常感谢您的帮助。
  • 我有多层/分层标签。我想知道是否有可能在单个标签中生成 ''。 @XmlPath("ExecRpt/Pty/@ID") 在同一个标​​签中我想在同一个标​​签中注入 src 和 R。
猜你喜欢
  • 1970-01-01
  • 2012-01-14
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多