Konwersja ze XML-string do obiektu java

Jestem czosnek
2015-11-16 21:16
Jestem czosnek
0

Witam,

Przeglądnąłem internety w zdłuż i wszerz i nie mogę rozwiązać mojego problemu dot. poniższego wyjątku :

Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"upload"). Expected elements are (none)

Będe zobowiązany za każdą pomoc.

Klasa upload.java:

package classes;

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

@XmlRootElement(name="upload")
public class Upload {

    @XmlElement(name="token")
    private String token;
//    private String filename;
//    private String description;
//    private String contentType;

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

//    public String getFilename() {
//        return filename;
//    }
//
//    public void setFilename(String filename) {
//        this.filename = filename;
//    }
//
//    public String getDescription() {
//        return description;
//    }
//
//    public void setDescription(String description) {
//        this.description = description;
//    }
//
//    public String getContentType() {
//        return contentType;
//    }
//
//    public void setContentType(String contentType) {
//        this.contentType = contentType;
//    }
}

Test.java:

package classes;

import java.io.StringReader;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

public class Test {

    public static void main(String[] args) throws JAXBException {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><upload><token>24.33ba3561b08fbaf554c9dd6db0d615fa</token></upload>";
        Upload upload = convertXmlToObject(xml, Upload.class);
    }

    public static <T>T convertXmlToObject(String xml, Class<T> obj) throws JAXBException {
        JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        StringReader reader = new StringReader(xml);
        T customer = (T) jaxbUnmarshaller.unmarshal(reader);
        return customer;
    }

}

Pozostało 580 znaków

2015-11-16 21:27
Moderator

Rejestracja: 16 lat temu

Ostatnio: 22 minuty temu

0

Wygeneruj sobie plik XML za pomocą jaxb z tej klasy i porównaj z tym co chcesz wczytac. Zapewne to problem z jakimś namespace czy coś.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Jestem czosnek
2015-11-16 21:50
Jestem czosnek
0

DAlej ten sam Błąd.
Po małej poprawce, która dopiero została znaleziona po próbie wygenerowania xml z objectu Upload

Upload.java:

package classes;

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

@XmlRootElement(name="upload")
public class Upload {

    private String token;

    @XmlElement(name="token")
    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }
}

Test.java:

package classes;

import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class Test {

    public static void main(String[] args) throws JAXBException {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><upload><token>24.33ba3561b08fbaf554c9dd6db0d615fa</token></upload>";
        Upload upload = convertXmlToObject(xml, Upload.class);

//      Upload up = new Upload();
//      up.setToken("24.33ba3561b08fbaf554c9dd6db0d615fa");
//      convertObjectToXml(up);
    }

    public static void convertObjectToXml(Upload upload) throws JAXBException {
        JAXBContext jaxbContext = JAXBContext.newInstance(Upload.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
        //for pretty-print XML in JAXB
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        jaxbMarshaller.marshal(upload, System.out);
    }

    public static <T>T convertXmlToObject(String xml, Class<T> obj) throws JAXBException {
        JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        StringReader reader = new StringReader(xml);
        T customer = (T) jaxbUnmarshaller.unmarshal(reader);
        return customer;
    }

}

Pozostało 580 znaków

2015-11-16 22:01
Moderator

Rejestracja: 16 lat temu

Ostatnio: 22 minuty temu

0

A jak zapiszesz plik serializując obiekt przez jaxb a potem spróbujesz go wczytać? Bo to musi działać chyba że masz coś źle w tym kodzie ;]


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Jestem czosnek
2015-11-16 22:14
Jestem czosnek
0

Porble był w linijce JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());

Próbowałem jakby uzyskać "Klase z klasy".

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0