2013-07-23 9 views
8

ho ottenuto il seguente errore durante l'esecuzione del progetto sul prompt dei comandi conIllegalAnnotationExceptions non c'è ObjectFactory con @XmlElementDecl per l'elemento

java com.javavids.jaxb.sitemap.main.Main 

ho ottenuto il seguente errore

Exception in thread "main" com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions 
There's no ObjectFactory with an @XmlElementDecl for the element {unison}FromTime. 
    this problem is related to the following location: 
      at protected java.util.List com.javavids.jaxb.sitemap.UPM.Test.dateOrStartDateOrEndDate 
      at com.javavids.jaxb.sitemap.UPM.Test 
      at protected java.util.List com.javavids.jaxb.sitemap.UPM.Condition.content 
      at com.javavids.jaxb.sitemap.UPM.Condition 
      at protected com.javavids.jaxb.sitemap.UPM.Condition com.javavids.jaxb.sitemap.UPM.Rule.condition 
      at com.javavids.jaxb.sitemap.UPM.Rule 
      at protected java.util.List com.javavids.jaxb.sitemap.UPM.Policy.rule 
      at com.javavids.jaxb.sitemap.UPM.Policy 
      at protected java.util.List com.javavids.jaxb.sitemap.UPM.Configuration.policyOrConditionOrActionList 
      at com.javavids.jaxb.sitemap.UPM.Configuration 
      at protected com.javavids.jaxb.sitemap.UPM.Configuration com.javavids.jaxb.sitemap.UPM.BMWebgateConf.configuration 
at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source) 
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(Unknown Source) 
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at javax.xml.bind.ContextFinder.newInstance(Unknown Source) 
at javax.xml.bind.ContextFinder.newInstance(Unknown Source) 
at javax.xml.bind.ContextFinder.find(Unknown Source) 
at javax.xml.bind.JAXBContext.newInstance(Unknown Source) 
at javax.xml.bind.JAXBContext.newInstance(Unknown Source) 
at com.javavids.jaxb.sitemap.main.Main.main(Main.java:55) 

Fonte: it/javavids/jaxb/sitemap/UPM/Test.java

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
"conditionRef", 
"attribute", 
"op", 
"dateOrStartDateOrEndDate", 
"listRef", 
"value" 
}) 
@XmlRootElement(name = "Test") 

public class Test { 

@XmlElement(name = "ConditionRef") 
protected String conditionRef; 
@XmlElement(name = "Attribute") 
protected String attribute; 
@XmlElement(name = "Op") 
protected String op; 
@XmlElementRefs({ 

    @XmlElementRef(name = "FromTime", namespace = "unison", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "Date", namespace = "unison", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "DurationInDays", namespace = "unison", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "EndDate", namespace = "unison", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "StartDate", namespace = "unison", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "ToTime", namespace = "unison", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "Weekday", namespace = "unison", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "Frequency", namespace = "unison", type = JAXBElement.class, required = false) 
}) 
protected List<JAXBElement<? extends Serializable>> dateOrStartDateOrEndDate; 
@XmlElement(name = "ListRef") 
protected String listRef; 
@XmlElement(name = "Value") 
protected String value; 
@XmlAttribute(name = "Type", required = true) 
protected String type; 


public List<JAXBElement<? extends Serializable>> getDateOrStartDateOrEndDate() { 
    if (dateOrStartDateOrEndDate == null) { 
     dateOrStartDateOrEndDate = new ArrayList<JAXBElement<? extends Serializable>>(); 
    } 
    return this.dateOrStartDateOrEndDate; 
} 

Fonte: com/javavids/JAXB/mappa del sito/UPM/ObjectFactory.java

@XmlRegistry 
public class ObjectFactory { 

private final static QName _StartDate_QNAME = new QName("unison", "StartDate");  
private final static QName _Date_QNAME = new QName("unison", "Date"); 
private final static QName _ToTime_QNAME = new QName("unison", "ToTime"); 
private final static QName _CreateTime_QNAME = new QName("unison", "CreateTime"); 
private final static QName _EndDate_QNAME = new QName("unison", "EndDate"); 
private final static QName _FromTime_QNAME = new QName("unison", "FromTime"); 
private final static QName _DurationInDays_QNAME = new QName("unison", "DurationInDays"); 
private final static QName _ImportTime_QNAME = new QName("unison", "ImportTime"); 
private final static QName _Frequency_QNAME = new QName("unison", "Frequency"); 
private final static QName _Weekday_QNAME = new QName("unison", "Weekday"); 

@XmlElementDecl(namespace = "unison", name = "StartDate") 
public JAXBElement<String> createStartDate(String value) { 
    return new JAXBElement<String>(_StartDate_QNAME, String.class, null, value); 
} 

@XmlElementDecl(namespace = "unison", name = "FromTime") 
public JAXBElement<String> createFromTime(String value) { 
    return new JAXBElement<String>(_FromTime_QNAME, String.class, null, value); 
} 

Fonte: com/javavids/JAXB/mappa del sito/main/Main.java

public static void main(String[] args) throws JAXBException { 

    File file = new File("C:\\Users\\t_pavans\\workspace\\jaxbTest1\\medialossy.xml"); 

    JAXBContext jaxbContext = JAXBContext.newInstance(com.javavids.jaxb.sitemap.UPM.BMWebgateConf.class); 
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 

    //BMWebgate Root element variables 
    bmw = (BMWebgateConf) jaxbUnmarshaller.unmarshal(file); 

NOTA: Il il codice funziona perfettamente con Eclipse. Ma quando provo a eseguire il prompt dei comandi, si genera ed eccezione

risposta

12

Quando si crea il JAXBContext dalle classi è necessario includere la classe ObjectFactory nelle classi passate per creare lo JAXBContext.

JAXBContext jaxbContext = JAXBContext.newInstance(BMWebgateConf.class, ObjectFactory.class); 

Se il modello è generato da uno schema XML, allora mi sento di raccomandare la creazione del JAXBContext sul nome del pacchetto:

JAXBContext jaxbContext = JAXBContext.newInstance("com.javavids.jaxb.sitemap"); 
+1

Grazie Blaise! Ha funzionato! Apprezzato per il tuo aiuto. –

+0

ha funzionato anche per me !! Grazie – Stainedart

Problemi correlati