42 Stimmen

JAXB IllegalAnnotationException wird beim Parsen von XML ausgelöst

Dies ist meine XML-Datei:

Ich habe 2 Klassen erstellt, um sie zu parsen (Fields.java und Field.java):

@XmlRootElement(name = "fields")
public class Fields {

    @XmlElement(name = "field")
    List fields = new ArrayList();
        //getter, setter
}

und

public class Field {

    @XmlAttribute(name = "mappedField")
    String mappedField;
    //getter,setter
}

Aber ich erhalte diese Ausnahme:

[INFO] com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
[INFO]  at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:66) ~[na:1.6.0_07]
[INFO]  at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:422) ~[na:1.6.0_07]
[INFO]  at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.(JAXBContextImpl.java:270) ~[na:1.6.0_07]

Ich kann nicht verstehen, warum diese Ausnahme ausgelöst wird. Die Ausnahme befindet sich hier:

JAXBContext context = JAXBContext.newInstance(Fields.class);

Ich verwende JDK 1.6_0.0.7. Danke.

0voto

Arefe Punkte 8879

Dies geschieht, weil Sie 2 Klassen mit gleichem Namen haben. Zum Beispiel habe ich 2 SOAP-Webservices namens Einstellungen und Einstellungen2, die beide die gleiche Klasse GetEmployee haben, und das ist mehrdeutig und führt zu einem Fehler.

0voto

bamossza Punkte 3202

JAXB (java.xml.bind)

Diese Antwort:

JDK 14

Spring Boot WebFlux 2.3.3.RELEASE

Lombok 1.18.12

Funktioniert für mich >>>>> JDK 14

    javax.xml.bind
    jaxb-api
    2.3.1

    com.sun.xml.bind
    jaxb-impl
    2.3.3

    org.glassfish.jaxb
    jaxb-runtime
    3.0.0-M4

Also Abhängigkeiten(jaxb-api, jaxb-impl, jaxb-runtime)

Ich versuche jede Version zu testen.

Anforderungskörper:

        OK
        success

DTO:

import lombok.Getter;
import lombok.Setter;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.List;

public class SmsSend {

    @Getter
    @Setter
    @XmlRootElement(name = "service")
    public static class ReplyMethodSend {
        private List send = new ArrayList<>();
    }

    @Getter
    @Setter
    @XmlAccessorType(XmlAccessType.FIELD)
    public static class ReplyValue {
        private String message;
        private String status;
    }
}

Antwort:

{
    "send": [
        {
        "message": "OK",
        "status": "success"
        }
    ]
}

Viel Spaß beim Programmieren ^__^

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X