我无法在不了解根元素的情况下取消 XML 的编组。例如。
<foo>
<bar/>
</foo>
或
<bar>
<bar/>
</bar>
等等...
我想在类上映射解组结果,例如:
// @XmlRootElement ??
public class Container
implements Serializable
{
private Bar bar;
}
我总是需要修复< code>@XmlRootElement。< br >我搜索了如何在运行时设置@XmlRootElement,但没有成功。知道吗?
我在Spring Batch上下文中,我可以使用我选择的解组器。
注意:我不能使用这里显示的< code>@XmlElementDecl或< code>ObjectFactory,因为我不知道可能的根名称。
调整了他的方法:https://stackoverflow.com/a/33824472/181336
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.transform.stream.StreamSource;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Serializable;
public class Test {
@XmlAccessorType(XmlAccessType.PROPERTY)
public static class Bar {
private String name;
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
}
@XmlAccessorType(XmlAccessType.PROPERTY)
public static class Container implements Serializable {
private Bar bar;
public Bar getBar() {
return bar;
}
@XmlElement
public void setBar(Bar bar) {
this.bar = bar;
}
}
public static void main(String[] args) throws Exception {
JAXBContext jaxbContext = JAXBContext.newInstance(Container.class);
String xml = "<foo><bar><name>Barry</name></bar></foo>";
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
InputStream is = new ByteArrayInputStream(xml.getBytes());
JAXBElement<Container> barWrapperElement = unmarshaller.unmarshal(new StreamSource(is), Container.class);
Container container = barWrapperElement.getValue();
System.out.println(container.getBar().getName());
}
}
它工作!
问题内容: 我需要在sakila数据库中找到电影的最长租借期。我有这个尝试: 但我得到了错误: 有人知道为什么吗?我使用了应该是汇总数据的列..我缺少什么 问题答案: 如文档中所写 SQL标准要求HAVING必须仅引用GROUP BY子句中的列或聚合函数中使用的列。但是,MySQL支持对此行为的扩展,并允许HAVING引用SELECT列表中的列以及外部子查询中的列。 您必须在select子句中指定
问题内容: 我的错误输出: 无效的配置对象。已使用与API模式不匹配的配置对象初始化Webpack。-configuration.module具有未知的属性“ loaders”。这些属性是有效的:对象{exprContextCritical?,exprContextRecursive?,exprContextRegExp?,exprContextRequest?,noParse ?、规则?,def
问题内容: 我正在尝试从FpML(金融产品标记语言)4.5版生成Java类。生成了大量代码,但是我不能使用它。尝试序列化一个简单的文档,我得到以下信息: 实际上,没有任何类具有@XmlRootElement批注,那么我该怎么做呢?我将xjc(JAXB 2.1)指向fpml-main-4-5.xsd,其中包括所有类型。 问题答案: v
问题内容: 我有一个无法控制其生成方式的XML。我想通过将其分解为我手工编写的类来创建一个对象。 其结构的一个片段如下所示: 我该如何处理这种情况?当然,元素数是可变的。 问题答案: 如果使用以下对象模型,则每个未映射的key_#元素都将保留为org.w3c.dom.Element的实例: 如果任何元素对应于使用@XmlRootElement批注映射的类,则可以使用@XmlAnyElement(l