我有这个xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"
xmlns="http://tempuri.org/" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<DocumentElement xmlns="">
<Result diffgr:id="Result1" msdata:rowOrder="0">
<CITY>York</CITY>
</Result>
</DocumentElement>
</diffgr:diffgram>
我有以下java代码:
XMLInputFactory xif = XMLInputFactory.newFactory();
String content = readFile("D:\\work\\cim\\target\\my.xml", Charset.defaultCharset());
StreamSource xml = new StreamSource(new StringReader(content));
XMLStreamReader xsr = xif.createXMLStreamReader(xml);
xsr.nextTag();
while(!xsr.getLocalName().equals("Result")) {
xsr.nextTag();
}
JAXBContext jc = JAXBContext.newInstance(CimRecordTest.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<CimRecordTest> jb = unmarshaller.unmarshal(xsr, CimRecordTest.class);
xsr.close();
CimRecordTest cimRecordTest = jb.getValue();
System.out.println(cimRecordTest.getCity());
在控制台输出中,我看到null
我做错了什么?
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "record")
@XmlAccessorType(XmlAccessType.FIELD)
public class CimRecordTest {
/**
* CITY
*/
@XmlElement(name="CITY")
private String city;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
java版本“1.7.0_45”
我认为是jaxb版本问题。
将此内容添加到pom.xml后
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.7</version>
</dependency>
这个问题消失了
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.6</version>
</dependency>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.1</version>
</dependency>
但仅对project2有效
dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.7</version>
</dependency>
我很困惑,很乱。但我想知道这个问题的真相。
问题内容: 我遵循此经常引用的博客文章中有关使用xsi:type的说明: http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using- xsitype.html 基本上我有这个: 而这个测试: 我得到这个结果: 我已经尝试了JAXB的默认实现jaxb- impl-2.1.2,并基于此bug尝试了jaxb- impl-2.2.6-b38.j
我有这些课程: 用户 地址 输出 我如何解决这个问题?我是否可以使用一些JAXB注释?怎么做?还是需要创建某种类型的XmlAdapter?(我试过这个,但没有成功……)
我正在尝试使用JAXB进行封送处理。 我的输出是这样的: ...但我需要这样的输出: 如果取消对代码的注释,则会得到。没有它,我可以编译,但我不能得到所需的精确输出。 我的豆子长这样: 适配器类
我试图散集XML。 这就是我的XML的样子 我正在尝试获取Obj123下的Id和姓名。然而,当我运行我的解组命令时,我得到了以下错误。 我的代码在主类中如下所示: 我的Obj123类如下所示: 我认为通过设置我的XMLRootElement,我应该能够跳过XML的前2行,但这似乎并没有发生。有什么想法吗? 编辑: 我的 JAXB 上下文就是这样制作的:
我对JAXB很陌生,在解封一般对象时遇到了麻烦。问题是我需要能够封送和解封任何对象(java.lang.object)。我成功地进行了封送处理,但是当我运行解封处理时,响应中得到的是一个“ElementNSimpl”对象,而不是我自己的对象。 这是涉及的bean: message.java somebean.java jaxb.index的内容: 生成的xml很好()但是在解封后计算“msg.ge
我目前正在尝试将一些现有的XML解组到我手工创建的几个类中。问题是,我总是得到一个错误,告诉我,JaxB需要一个天气元素,但却找到了一个天气元素。(?) UnMarshalException:意外元素(URI:“http://www.aws.com/aws”,本地:“weather”)。需要的元素为<{}API>、<{}Location>、<{}Weather> 这就是我试图解析的XML: 我不太