Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe gerade ein Problem mit JaxB und finde keine Lösung.
Ich habe eine Klasse.
Java:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class MyClass {
private Object valueObject;
private List<Object> valueObjectList;
....
Speichern:
Java:
public String generateXMLCode(OtherClass otherClass){
JAXBContext jc = JAXBContext.newInstance(MyClass.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter sw = new StringWriter();
marshaller.marshal(otherClass, sw);
String result = sw.toString();
return result;
}
Nun bekomme ich aber folgende Fehlermeldung:
[com.sun.istack.SAXException2: java.lang.ClassCastException: class java.lang.String cannot be cast to class java.time.LocalDate (java.lang.String and java.time.LocalDate are in module java.base of loader 'bootstrap') java.lang.ClassCastException: class java.lang.String cannot be cast to class java.time.LocalDate (java.lang.String and java.time.LocalDate are in module java.base of loader 'bootstrap')]
Für LocalDate / LocalDateTime gibt es soweit ein Problem mit JaxB, sodass ich selber einen Konverter brauche.
Diesen habe ich auch. Aber wie muss ich die Properties dann annotieren?
Hier mal eines der Konverter für LocalDateTime:
Java:
public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {
public LocalDateTime unmarshal(String v) throws Exception {
return LocalDateTime.parse(v);
}
public String marshal(LocalDateTime v) throws Exception {
return v.toString();
}
}
1) Danke. Ich denke der Ansatz geht eher in die richtige Richtung....
Ich habe mal das versucht, bin mir aber nicht sicher, ob das so passt? type= Object.class?
Jedenfalls geht es nicht
Java:
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters({
@XmlJavaTypeAdapter(value = LocalDateAdapter.class, type = Object.class),
@XmlJavaTypeAdapter(value = LocalTimeAdapter.class, type = Object.class),
@XmlJavaTypeAdapter(value = LocalDateTimeAdapter.class, type = Object.class),
})
package de.mypackage.condition.model;
import de.mypackage.LocalDateTimeAdapter;
2) Kann ich die "package-info.java" auch irgendwo ablegen, in der das "global" gilt und nicht nur in diesem einen speziellen Package?
3) Wenn ich das Package: de.mypackage.condition.model habe, die package-info.java auch hier ablege, gilt diese dann auch für die Elternknoten (also de.mypackage.condition) ?