JAXB: добавлен дополнительный тег в XML, процесс демаршаллинга не работает - PullRequest
0 голосов
/ 03 апреля 2012

Это XML, данный

<AuthentXML>
<Data>
<header>
<asid>AuthenticationSubjectID</asid>
<teid>B6F997AE-FB4E-11D3-80BD-0050DA5DC7B8</teid>
<replyTo>https://r1.authentify.net/s2s/default.asp</replyTo>
</header>
</Data>
</AuthentXML>

Это мой класс парсера

public class Test {
    public static void main(String args[]) throws Exception {

        File file = new File("D:\\Ravi.xml");
        JAXBContext jaxbContext = JAXBContext
                .newInstance(AuthentifyResult.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        AuthentifyResult authentifyResult = (AuthentifyResult) jaxbUnmarshaller
                .unmarshal(file);
        System.out.println(authentifyResult.getData().getHeader().getTeid());
    }
}

Это AuthentifyResult.java

package com;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="AuthentXML")
public class AuthentifyResult { 
    private Data data;

    @XmlElement(name="Data")
    public Data getData() {
        return data;
    }
    public void setData(Data data) {
        this.data = data;
    }
}

Это Data.java

package com;

import javax.xml.bind.annotation.XmlRootElement;


public class Data { 
    private Header header;
    public Header getHeader() {
        return header;
    }
    public void setHeader(Header header) {
        this.header = header;
    }
}

Это файл Header.java

  package com;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;



public class Header {

private String ASD;
@XmlAttribute
public String getASD() {
    return ASD;
}
public void setASD(String aSD) {
    ASD = aSD;
}
@XmlAttribute
public String getTeid() {
    return teid;
}
public void setTeid(String teid) {
    this.teid = teid;
}
@XmlAttribute
public String getReplyTo() {
    return replyTo;
}
public void setReplyTo(String replyTo) {
    this.replyTo = replyTo;
}
private String teid;
private String replyTo;

}

Я получаю ноль в качестве вывода, я не знаю, почему привязки не происходят ??

1 Ответ

1 голос
/ 03 апреля 2012

Тег <Data> заставляет JAXB думать, что <header> содержится в объекте с именем Data. Вы хотите переместить содержимое AuthentifyResult в новый класс, а затем класс AuthentifyResult содержит этот новый класс с именем элемента Data.

@XmlRootElement(name="AuthentXML")
public class AuthentifyResult { 
    private Data data;

    @XmlElement(name="Data")
    public Data getData() {
        return data;
    }
    public void setData(Data data) {
        this.data = data;
    }
}

public class Data { 
    private Header header;
    public Header getHeader() {
        return header;
    }
    public void setHeader(Header header) {
        this.header = header;
    }
}

Что касается класса заголовка, вы хотите заменить аннотации @XmlAttribute на @XmlElement. @XmlAttribute означает, что вы хотите, чтобы ваш XML выглядел как

<header teid="A Value"></header

Принимая во внимание, что @XmlElement означает, что вы хотите, чтобы ваш XML выглядел как

   <header>
     <teid>A Value</teid>
   </header>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...