我正在构建一系列链接类,我希望这些类的实例能够整理成XML,这样我就可以将它们保存到一个文件中,以后再读进去。
目前我使用以下代码作为测试用例:
import javax.xml.bind.annotation.*;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.time.LocalDate;
public class LocalDateExample
{
@XmlRootElement
private static class WrapperTest {
public LocalDate startDate;
}
public static void main(String[] args) throws JAXBException
{
WrapperTest wt = new WrapperTest();
LocalDate ld = LocalDate.of(2016, 3, 1);
wt.startDate = ld;
marshall(wt);
}
public static void marshall(Object jaxbObject) throws JAXBException
{
JAXBContext context = JAXBContext.newInstance(jaxbObject.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(jaxbObject, System.out);
}
}
XML输出为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<wrapperTest>
<startDate/>
</wrapperTest>
startdate
元素为空有什么原因吗?我希望它包含日期的字符串表示(即toString()
)。为了做到这一点,我需要编写一些我自己的代码吗?
java-version
的输出是:
openjdk version "1.8.0_66-internal"
OpenJDK Runtime Environment (build 1.8.0_66-internal-b17)
OpenJDK 64-Bit Server VM (build 25.66-b17, mixed mode)
您必须创建一个XMLAdapter
,如下所示:
public class LocalDateAdapter extends XmlAdapter<String, LocalDate> {
public LocalDate unmarshal(String v) throws Exception {
return LocalDate.parse(v);
}
public String marshal(LocalDate v) throws Exception {
return v.toString();
}
}
并使用
@XmlJavaTypeAdapter(value = LocalDateAdapter.class)
如果希望在包级别上定义适配器,请参见javax.xml.bind.annotation.adapters.XMLJavatypeAdapters
。
我正在尝试使用JAXB进行封送处理。 我的输出是这样的: ...但我需要这样的输出: 如果取消对代码的注释,则会得到。没有它,我可以编译,但我不能得到所需的精确输出。 我的豆子长这样: 适配器类
我有这些课程: 用户 地址 输出 我如何解决这个问题?我是否可以使用一些JAXB注释?怎么做?还是需要创建某种类型的XmlAdapter?(我试过这个,但没有成功……)
问题内容: 我试图编组多个对象,例如添加到via中。我开始使用此设置: 和 但是,我得到了以下运行时例外: javax.xml.bind.JAXBException:com.jaxb.example.marshall.Book或其任何超类对此上下文都是未知的] 我的类型定义如下。 书:- 图书清单:- 马歇尔代码:- 我正在尝试放置注释(参考:-JAXB异常:该上下文未知的类)。该注释在我的版本中
我正在尝试封送和取消封送映射到值对/从值对。我可以成功封送该对象,但是,我不能从XML中取消封送它。反封送结果是映射中存在的关键字,但其值为空。 下面是我要封送和取消封送的模型: 而且我还发现了一个关于这个问题的类似问题“JAXB:如何将映射编入 value ”,然而,它并没有解决解编组问题?
我正在尝试解封包含CDATA元素的XML。我得到的字符串仍然有CDATA“包装器”。我使用XJC从XSD创建Java类,它们在包中。我正在使用包含在Oracle(Sun)Java7 JDK中的JAXB。 CDATA包装器为什么会持续存在?在我在这个站点和其他站点上看到的每一个示例中,它们都是在解封过程中被删除的。这肯定是个简单的问题,但我就是看不出来。
我有一个由第三方供应商提供的XSD文件。我需要解析该XSD文件并生成Java对象。我使用JAXB通过maven插件解析XSD文件。 一切都很顺利,直到我最近要求使用来自正在解析的XML中的一个标记的数据。标记的complexType具有mixed=true,因此JAXB生成的java类如下所示。 XSD复杂类型: 生成的JAXB类 GeneralRemark>类不包含List ,而是包含List