当前位置: 首页 > 知识库问答 >
问题:

Jaxb解封不起作用

姬昀
2023-03-14

我有这个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”

共有1个答案

琴元凯
2023-03-14

我认为是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: 我不太