Konwersja ze XML-string do obiektu java

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;
    }
	
}
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ś.

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;
    }
	
}
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 ;]

0

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

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

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