java xmlns属性在使用JAXB解组时使对象为空

0mkxixxg  于 2023-01-01  发布在  Java
关注(0)|答案(1)|浏览(200)

下面的代码工作得很好,当我从xml中删除命名空间xmlns(xmlns=“http://w/p-print”)时,我能够获得成功值。但是当xml带有xmlns属性时,响应对象在解组后变为空。我也尝试在Response类中Mapxmlns属性,但没有任何区别。似乎每当我在xml中遇到xmlns属性时,整个Response对象都为空。对此有什么想法吗?提前感谢大家。
正在解组的xml '

<?xml version="1.0" encoding="utf-8"?>
<PRInfo Version="2.00">
    
        <ePrint>
            <Params>
                <devid>test</devid>
                <printjobid>2323</printjobid>
            </Params>
            <PResonse>
                <response xmlns="http://w/p-print" success="true"/>. 
                </response>
            </PResonse>
        <ePrint>

</PRInfo>

'
基于类的Map

@XmlAccessorType(XmlAccessType.FIELD)
public class PRInfo {

    // required XmlElements comes here

    @XmlAccessorType(XmlAccessType.FIELD)
    public static class ePrint {

        //required XmlElementa comes here

        @XmlAccessorType(XmlAccessType.FIELD)
        public static class Params {
            // required XmlElement come here...
        }

        @XmlAccessorType(XmlAccessType.FIELD)
        @XmlType(name = "", propOrder = {"response"})
        public static class PResonse {

            @XmlElement
            private Response response;
           // Getter Setter
        }
    }
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "response")
public class Response {

    @XmlAttribute(name = "success")
    protected Boolean success;
// Getter and Setter
}

解组XML并从响应对象获取成功值。

2lpgd968

2lpgd9681#

xmlns属性出现在response元素中时,它会为元素及其子元素创建默认命名空间。这意味着success属性位于默认命名空间中,并且您定义的Response类无法Map它,因为它没有命名空间声明。
尝试将命名空间声明添加到Response类。可以通过使用**@XmlType注解对该类进行注解,并将namespace特性设置为XML文档中的xmlns**特性的值来完成此操作。例如:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "response", namespace = "http://w/p-print")
public class Response {

    @XmlAttribute(name = "success")
    protected Boolean success;
    // Getter and Setter
}

相关问题