我有一些代码使用JAXB API类,它们是作为Java 6/7/8中JDK的一部分提供的.当我使用Java 9运行相同的代码时,在运行时我得到错误,指示无法找到JAXB类.
自Java 6以来,JAXB类已作为JDK的一部分提供,为什么Java 9不再能够找到这些类?
我正在尝试从FpML(Finanial产品标记语言)4.5版生成Java类.生成了大量代码,但我无法使用它.尝试序列化一个简单的文档,我得到这个:
javax.xml.bind.MarshalException
- with linked exception: [com.sun.istack.SAXException2: unable
to marshal type
"org.fpml._2008.fpml_4_5.PositionReport"
as an element because it is missing an
@XmlRootElement annotation]
Run Code Online (Sandbox Code Playgroud)
实际上没有类有@XmlRootElement注释,所以我可以做错什么?我将xjc(JAXB 2.1)指向fpml-main-4-5.xsd,然后包含所有类型.
如何使用以下代码解组XML字符串并将其映射到下面的JAXB对象?
JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Person person = (Person) unmarshaller.unmarshal("xml string here");
Run Code Online (Sandbox Code Playgroud)
@XmlRootElement(name = "Person")
public class Person {
@XmlElement(name = "First-Name")
String firstName;
@XmlElement(name = "Last-Name")
String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Run Code Online (Sandbox Code Playgroud) 我已经确定存在两个用于Maven 2的JAXB插件,具有一些不同的配置.
一个来自Sun:http://jaxb.dev.java.net/jaxb-maven2-plugin/,另一个来自Mojohaus:http://mojohaus.org/jaxb2-maven-plugin/
可以推荐这两个插件中的哪一个?
谢谢马特.在我的小型研究项目中,我发现还有另一个来自sunners的插件:
<groupId>com.sun.tools.xjc.maven2</groupId>
<artifactId>maven-jaxb-plugin</artifactId>
Run Code Online (Sandbox Code Playgroud)
那一个:
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
Run Code Online (Sandbox Code Playgroud)
仍然是Codehouse的那个.
我是XML的新手.我正在做一个Java EE项目REST实现,我们返回了很多XML.有了这个,我们决定使用JAXB.到目前为止,我们手动编写了XML的模型.
但是已经存在这些复杂的结构,我们不知道如何编码.我们已经阅读了有关从XSD生成类的信息.我们有一个XSD.
我的问题:
1.)我读过有关XJC的文章,我在哪里可以找到它?
2.)我们必须安装整个JAXB吗?(所以我们到目前为止使用的是什么?这不是JAXB?)
我需要创建其中一个,因为界面需要它...有人可以让我知道如何创建一个,因为似乎没有定义c'tor?
问题有点理论化,创建JAXB上下文,marshaller和unmarshaller的成本是多少?
我发现我的代码可以从保持相同的JAXB上下文和可能与所有编组操作相同的编组器中受益,而不是在每个编组时创建上下文和编组器.
那么创建JAXB上下文和marshaller/unmarshaller的成本是多少?是否可以为每个编组操作创建context + marshaller,或者最好避免它?
我正在寻找一种在两个方向上在java.util.Date和javax.xml.datatype.XMLGregorianCalendar之间进行转换的简单方法.
这是我现在使用的代码:
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
/**
* Utility class for converting between XMLGregorianCalendar and java.util.Date
*/
public class XMLGregorianCalendarConverter {
/**
* Needed to create XMLGregorianCalendar instances
*/
private static DatatypeFactory df = null;
static {
try {
df = DatatypeFactory.newInstance();
} catch (DatatypeConfigurationException dce) {
throw new IllegalStateException(
"Exception while obtaining DatatypeFactory instance", dce);
}
}
/**
* Converts a java.util.Date into an instance of XMLGregorianCalendar
*
* @param date Instance of java.util.Date …Run Code Online (Sandbox Code Playgroud) 使用jaxb,我尝试读取xml文件只有xml文件中的一些元素很有趣,所以我想跳过很多元素
xml我尝试阅读
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2010 rel. 3 sp1 (http://www.altova.com)-->
<flx:ModeleREP xsi:schemaLocation="urn:test:mod_rep.xsd mod_rep.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:flx="urn:test:mod_rep.xsd">
<flx:DocumentHeader>
<flx:Identification v="04489"/>
</flx:DocumentHeader>
<flx:TimeSeries>
<flx:Identification v="test1a"/>
<flx:BusinessType v="A01"/>
<flx:Product v="123a"/>
<flx:ResourceObject codingScheme="N" v="testa"/>
<flx:Period>
<flx:TimeInterval v="2011-07-02T00:00/2011-07-16T00:00"/>
<flx:Resolution v="PT2H"/>
<flx:Pt>
<flx:P v="1"/>
<flx:Q unitCode="String" v="1.0"/>
<flx:A currencyIdentifier="String" v="195.0"/>
</flx:Pt>
</flx:Period>
</flx:TimeSeries>
<flx:TimeSeries>
<flx:Identification v="test2a"/>
<flx:BusinessType v="A01"/>
<flx:Product v="a123b"/>
<flx:ResourceObject codingScheme="N" v="test2"/>
<flx:Period>
<flx:TimeInterval v="2011-07-02T00:00/2011-07-16T00:00"/>
<flx:Resolution v="PT2H"/>
<flx:Pt>
<flx:P v="1"/>
<flx:Q unitCode="String" v="1.0"/>
<flx:A currencyIdentifier="String" v="195.0"/>
</flx:Pt>
<flx:Pt>
<flx:P …Run Code Online (Sandbox Code Playgroud) 有人在这里发誓JAXB是切片面包以来最棒的东西.我很想知道Stack Overflow用户认为JAXB的用例是什么,以及是什么使它成为一个好的或坏的解决方案.