JAXB IllegalAnnotationExceptions

Estoy trabajando con JAXB por primera vez, y tengo algunos problemas para entender lo que quiere que haga.

He configurado una clase que formará parte de un XML bastante grande; esta clase representará la sección “Encabezado” del documento XML.

package com.somecompany.jscentral.xml.integrator.soc; import javax.xml.bind.JAXBException; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import com.somecompany.jscentral.xml.AbstractXML; @XmlRootElement(name = "Header") @XmlAccessorType(XmlAccessType.NONE) @XmlType(propOrder = {"OrderRoutine", "CreationDate", "CreationTime", "UserId", "CustomerNumber", "OrderType", "Salesman", "Handler", "Warehouse", "PrimaryCurrency", "OrderNumber", "Name", "OrderDate", "DeliveryAddressNumber", "ConfirmationAddressNumber", "FullName999", "CompanyName999", "StreetAddress999Line1", "StreetAddress999Line2", "City999", "StateProvince999", "PostCode999", "Country999", "Resale999", "InvoiceCustomerNumber", "CustomerReference", "NumberOfInvoiceCopies", "Language", "VAT", "Backlog", "OrderDiscountPercent", "DiscountGroup", "PriceCode", "StandardTextNumber", "HoldOrder", "TermsOfPayment", "CreditDays", "TermsOfDelivery", "MannerOfTransport", "FreightFee", "PostageFee", "InsuranceFee", "AdministrationFee", "InvoiceFee", "CustomersOrderNumberReference", "GoodsMarking", "HoldInvoice", "DeliveryAddressEngineer", "DeliveryAddressLocation", "CountryDispatchedToArrivedFrom", "VATRegNumberOfDebtorAddr", "NatureOfTransaction", "VATHandlingCode", "PortOfArrivalDispatch", "CountryOfTrader", "InternalOrder", "ToWarehouse", "RouteId", "DepartureId", "DestinationId", "ShippingAgent", "ContactListCode", "Salesman2", "CreationDate2", "Sequence", "DebtorNumber", "DebtorAddressNumber", "InvoiceAddressNumber", "WebOrder", "Confirmed", "ClientIdentity"}) public class Header extends AbstractXML { public Header() throws JAXBException { super(); } @XmlElement(name = "OrderRoutine", required = true) private String orderRoutine; public void setOrderRoutine(String orderRoutine) { this.orderRoutine = orderRoutine; } public String getOrderRoutine() { return this.orderRoutine; } @XmlElement(name = "CreationDate", required = false) private String creationDate; public void setCreationDate(String creationDate) { this.creationDate = creationDate; } public String getCreationDate() { return this.creationDate; } @XmlElement(name = "CreationTime", required = false) private String creationTime; public void setCreationTime(String creationTime) { this.creationTime = creationTime; } public String getCreationTime() { return this.creationTime; } @XmlElement(name = "UserId", required = false) private String userId; public void setUserId(String userId) { this.userId = userId; } public String getUserId() { return this.userId; } @XmlElement(name = "CustomerNumber", required = true) private String customerNumber; public void setCustomerNumber(String customerNumber) { this.customerNumber = customerNumber; } public String getCustomerNumber() { return this.customerNumber; } @XmlElement(name = "OrderType", required = true) private String orderType; public void setOrderType(String orderType) { this.orderType = orderType; } public String getOrderType() { return this.orderType; } @XmlElement(name = "Salesman", required = true) private String salesman; public void setSalesman(String salesman) { this.salesman = salesman; } public String getSalesman() { return this.salesman; } @XmlElement(name = "Handler", required = true) private String handler; public void setHandler(String handler) { this.handler = handler; } public String getHandler() { return this.handler; } @XmlElement(name = "Warehouse", required = true) private String warehouse; public void setWarehouse(String warehouse) { this.warehouse = warehouse; } public String getWarehouse() { return this.warehouse; } @XmlElement(name = "PrimaryCurrency", required = true) private String primaryCurrency; public void setPrimaryCurrency(String primaryCurrency) { this.primaryCurrency = primaryCurrency; } public String getPrimaryCurrency() { return this.primaryCurrency; } @XmlElement(name = "OrderNumber", required = false) private String orderNumber; public void setOrderNumber(String orderNumber) { this.orderNumber = orderNumber; } public String getOrderNumber() { return this.orderNumber; } @XmlElement(name = "Name", required = false) private String name; public void setName(String name) { this.name = name; } public String getName() { return this.name; } @XmlElement(name = "OrderDate", required = false) private String orderDate; public void setOrderDate(String orderDate) { this.orderDate = orderDate; } public String getOrderDate() { return this.orderDate; } @XmlElement(name = "DeliveryAddressNumber", required = false) private String deliveryAddressNumber; public void setDeliveryAddressNumber(String deliveryAddressNumber) { this.deliveryAddressNumber = deliveryAddressNumber; } public String getDeliveryAddressNumber() { return this.deliveryAddressNumber; } @XmlElement(name = "ConfirmationAddressNumber", required = false) private String confirmationAddressNumber; public void setConfirmationAddressNumber(String confirmationAddressNumber) { this.confirmationAddressNumber = confirmationAddressNumber; } public String getConfirmationAddressNumber() { return this.confirmationAddressNumber; } @XmlElement(name = "FullName999", required = true) private String fullName999; public void setFullName999(String fullName999) { this.fullName999 = fullName999; } public String getFullName999() { return this.fullName999; } @XmlElement(name = "CompanyName999", required = true) private String companyName999; public void setCompanyName999(String companyName999) { this.companyName999 = companyName999; } public String getCompanyName999() { return this.companyName999; } @XmlElement(name = "StreetAddress999Line1", required = true) private String streetAddress999Line1; public void setStreetAddress999Line1(String streetAddress999Line1) { this.streetAddress999Line1 = streetAddress999Line1; } public String getStreetAddress999Line1() { return this.streetAddress999Line1; } @XmlElement(name = "StreetAddress999Line2", required = true) private String streetAddress999Line2; public void setStreetAddress999Line2(String streetAddress999Line2) { this.streetAddress999Line2 = streetAddress999Line2; } public String getStreetAddress999Line2() { return this.streetAddress999Line2; } @XmlElement(name = "City999", required = true) private String city999; public void setCity999(String city999) { this.city999 = city999; } public String getCity999() { return this.city999; } @XmlElement(name = "StateProvince999", required = true) private String stateProvince999; public void setStateProvince999(String stateProvince999) { this.stateProvince999 = stateProvince999; } public String getStateProvince999() { return this.stateProvince999; } @XmlElement(name = "PostCode999", required = true) private String postCode999; public void setPostCode999(String postCode999) { this.postCode999 = postCode999; } public String getPostCode999() { return this.postCode999; } @XmlElement(name = "Country999", required = true) private String country999; public void setCountry999(String country999) { this.country999 = country999; } public String getCountry999() { return this.country999; } @XmlElement(name = "Resale999", required = false) private String resale999; public void setResale999(String resale999) { this.resale999 = resale999; } public String getResale999() { return this.resale999; } @XmlElement(name = "InvoiceCustomerNumber", required = false) private String invoiceCustomerNumber; public void setInvoiceCustomerNumber(String invoiceCustomerNumber) { this.invoiceCustomerNumber = invoiceCustomerNumber; } public String getInvoiceCustomerNumber() { return this.invoiceCustomerNumber; } @XmlElement(name = "CustomerReference", required = false) private String customerReference; public void setCustomerReference(String customerReference) { this.customerReference = customerReference; } public String getCustomerReference() { return this.customerReference; } @XmlElement(name = "NumberOfInvoiceCopies", required = false) private String numberOfInvoiceCopies; public void setNumberOfInvoiceCopies(String numberOfInvoiceCopies) { this.numberOfInvoiceCopies = numberOfInvoiceCopies; } public String getNumberOfInvoiceCopies() { return this.numberOfInvoiceCopies; } @XmlElement(name = "Language", required = false) private String language; public void setLanguage(String language) { this.language = language; } public String getLanguage() { return this.language; } @XmlElement(name = "VAT", required = false) private String vat; public void setVAT(String vat) { this.vat = vat; } public String getVAT() { return this.vat; } @XmlElement(name = "Backlog", required = false) private String backlog; public void setBacklog(String backlog) { this.backlog = backlog; } public String getBacklog() { return this.backlog; } @XmlElement(name = "OrderDiscountPercent", required = false) private String orderDiscountPercent; public void setOrderDiscountPercent(String orderDiscountPercent) { this.orderDiscountPercent = orderDiscountPercent; } public String getOrderDiscountPercent() { return this.orderDiscountPercent; } @XmlElement(name = "DiscountGroup", required = false) private String discountGroup; public void setDiscountGroup(String discountGroup) { this.discountGroup = discountGroup; } public String getDiscountGroup() { return this.discountGroup; } @XmlElement(name = "PriceCode", required = false) private String priceCode; public void setPriceCode(String priceCode) { this.priceCode = priceCode; } public String getPriceCode() { return this.priceCode; } @XmlElement(name = "StandardTextNumber", required = false) private String standardTextNumber; public void setStandardTextNumber(String standardTextNumber) { this.standardTextNumber = standardTextNumber; } public String getStandardTextNumber() { return this.standardTextNumber; } @XmlElement(name = "HoldOrder", required = false) private String holdOrder; public void setHoldOrder(String holdOrder) { this.holdOrder = holdOrder; } public String getHoldOrder() { return this.holdOrder; } @XmlElement(name = "TermsOfPayment", required = true) private String termsOfPayment; public void setTermsOfPayment(String termsOfPayment) { this.termsOfPayment = termsOfPayment; } public String getTermsOfPayment() { return this.termsOfPayment; } @XmlElement(name = "CreditDays", required = false) private String creditDays; public void setCreditDays(String creditDays) { this.creditDays = creditDays; } public String getCreditDays() { return this.creditDays; } @XmlElement(name = "TermsOfDelivery", required = false) private String termsOfDelivery; public void setTermsOfDelivery(String termsOfDelivery) { this.termsOfDelivery = termsOfDelivery; } public String getTermsOfDelivery() { return this.termsOfDelivery; } @XmlElement(name = "MannerOfTransport", required = true) private String mannerOfTransport; public void setMannerOfTransport(String mannerOfTransport) { this.mannerOfTransport = mannerOfTransport; } public String getMannerOfTransport() { return this.mannerOfTransport; } @XmlElement(name = "FreightFee", required = true) private String freightFee; public void setFreightFee(String freightFee) { this.freightFee = freightFee; } public String getFreightFee() { return this.freightFee; } @XmlElement(name = "PostageFee", required = false) private String postageFee; public void setPostageFee(String postageFee) { this.postageFee = postageFee; } public String getPostageFee() { return this.postageFee; } @XmlElement(name = "InsuranceFee", required = false) private String insuranceFee; public void setInsuranceFee(String insuranceFee) { this.insuranceFee = insuranceFee; } public String getInsuranceFee() { return this.insuranceFee; } @XmlElement(name = "AdministrationFee", required = false) private String administrationFee; public void setAdministrationFee(String administrationFee) { this.administrationFee = administrationFee; } public String getAdministrationFee() { return this.administrationFee; } @XmlElement(name = "InvoiceFee", required = false) private String invoiceFee; public void setInvoiceFee(String invoiceFee) { this.invoiceFee = invoiceFee; } public String getInvoiceFee() { return this.invoiceFee; } @XmlElement(name = "CustomersOrderNumberReference", required = true) private String customersOrderNumberReference; public void setCustomersOrderNumberReference(String customersOrderNumberReference) { this.customersOrderNumberReference = customersOrderNumberReference; } public String getCustomersOrderNumberReference() { return this.customersOrderNumberReference; } @XmlElement(name = "GoodsMarking", required = true) private String goodsMarking; public void setGoodsMarking(String goodsMarking) { this.goodsMarking = goodsMarking; } public String getGoodsMarking() { return this.goodsMarking; } @XmlElement(name = "HoldInvoice", required = false) private String holdInvoice; public void setcustomersOrderNumberReference(String holdInvoice) { this.holdInvoice = holdInvoice; } public String getcustomersOrderNumberReference() { return this.holdInvoice; } @XmlElement(name = "DeliveryAddressEngineer", required = false) private String deliveryAddressEngineer; public void setDeliveryAddressEngineer(String deliveryAddressEngineer) { this.deliveryAddressEngineer = deliveryAddressEngineer; } public String getDeliveryAddressEngineer() { return this.deliveryAddressEngineer; } @XmlElement(name = "DeliveryAddressLocation", required = false) private String deliveryAddressLocation; public void setDeliveryAddressLocation(String deliveryAddressLocation) { this.deliveryAddressLocation = deliveryAddressLocation; } public String getDeliveryAddressLocation() { return this.deliveryAddressLocation; } @XmlElement(name = "CountryDispatchedToArrivedFrom", required = false) private String countryDispatchedToArrivedFrom; public void setCountryDispatchedToArrivedFrom(String countryDispatchedToArrivedFrom) { this.countryDispatchedToArrivedFrom = countryDispatchedToArrivedFrom; } public String getCountryDispatchedToArrivedFrom() { return this.countryDispatchedToArrivedFrom; } @XmlElement(name = "VATRegNumberOfDebtorAddr", required = false) private String vatRegNumberOfDebtorAddr; public void setVATRegNumberOfDebtorAddr(String vatRegNumberOfDebtorAddr) { this.vatRegNumberOfDebtorAddr = vatRegNumberOfDebtorAddr; } public String getVATRegNumberOfDebtorAddr() { return this.vatRegNumberOfDebtorAddr; } @XmlElement(name = "NatureOfTransaction", required = false) private String natureOfTransaction; public void setNatureOfTransaction(String natureOfTransaction) { this.natureOfTransaction = natureOfTransaction; } public String getNatureOfTransaction() { return this.natureOfTransaction; } @XmlElement(name = "VATHandlingCode", required = false) private String vatHandlingCode; public void setVATHandlingCode(String vatHandlingCode) { this.vatHandlingCode = vatHandlingCode; } public String getVATHandlingCode() { return this.vatHandlingCode; } @XmlElement(name = "PortOfArrivalDispatch", required = false) private String portOfArrivalDispatch; public void setPortOfArrivalDispatch(String portOfArrivalDispatch) { this.portOfArrivalDispatch = portOfArrivalDispatch; } public String getPortOfArrivalDispatch() { return this.portOfArrivalDispatch; } @XmlElement(name = "CountryOfTrader", required = false) private String countryOfTrader; public void setCountryOfTrader(String countryOfTrader) { this.countryOfTrader = countryOfTrader; } public String getCountryOfTrader() { return this.countryOfTrader; } // ETC... } 

Aquí está la traza de la stack:

 Exception in thread "main" com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 142 counts of IllegalAnnotationExceptions Property orderRoutine is present but not specified in @XmlType.propOrder this problem is related to the following location: at private java.lang.String com.somecompany.jscentral.xml.integrator.soc.Header.orderRoutine at com.somecompany.jscentral.xml.integrator.soc.Header Property creationDate is present but not specified in @XmlType.propOrder this problem is related to the following location: at private java.lang.String com.somecompany.jscentral.xml.integrator.soc.Header.creationDate at com.somecompany.jscentral.xml.integrator.soc.Header Property creationTime is present but not specified in @XmlType.propOrder this problem is related to the following location: at private java.lang.String com.somecompany.jscentral.xml.integrator.soc.Header.creationTime at com.somecompany.jscentral.xml.integrator.soc.Header Property userId is present but not specified in @XmlType.propOrder this problem is related to the following location: at private java.lang.String com.somecompany.jscentral.xml.integrator.soc.Header.userId at com.somecompany.jscentral.xml.integrator.soc.Header 

.. ETC ..

 Property OrderRoutine appears in @XmlType.propOrder, but no such property exists. Maybe you meant orderRoutine? this problem is related to the following location: at com.somecompany.jscentral.xml.integrator.soc.Header Property CreationDate appears in @XmlType.propOrder, but no such property exists. Maybe you meant creationDate? this problem is related to the following location: at com.somecompany.jscentral.xml.integrator.soc.Header Property CreationTime appears in @XmlType.propOrder, but no such property exists. Maybe you meant creationTime? this problem is related to the following location: at com.somecompany.jscentral.xml.integrator.soc.Header .. ETC .. Property InvoiceAddressNumber appears in @XmlType.propOrder, but no such property exists. Maybe you meant invoiceAddressNumber? this problem is related to the following location: at com.somecompany.jscentral.xml.integrator.soc.Header Property WebOrder appears in @XmlType.propOrder, but no such property exists. Maybe you meant webOrder? this problem is related to the following location: at com.somecompany.jscentral.xml.integrator.soc.Header Property Confirmed appears in @XmlType.propOrder, but no such property exists. Maybe you meant confirmed? this problem is related to the following location: at com.somecompany.jscentral.xml.integrator.soc.Header Property ClientIdentity appears in @XmlType.propOrder, but no such property exists. Maybe you meant clientIdentity? this problem is related to the following location: at com.somecompany.jscentral.xml.integrator.soc.Header 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.(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.(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.somecompany.jscentral.xml.AbstractXML.(AbstractXML.java:21) at com.somecompany.jscentral.xml.integrator.soc.Header.(Header.java:33) at com.somecompany.jscentral.xml.integrator.IntegratorSOCXML.main(IntegratorSOCXML.java:22) 

He intentado diferentes @XmlAccessorType ‘s … pero ningún cambio. También he intentado anotar los métodos con @XmlTransient y no hay diferencia. ¿Qué estoy haciendo mal?

El propOrder se basa en el nombre del campo / propiedad y no en el nombre del elemento. Si haces este cambio todo funcionará correctamente.

Además, si va a anotar los campos, debe especificar @XmlAccessorType(XmlAccessType.FIELD) en su clase.

Además, como me doy cuenta de que tiene herencia en su modelo, no puede incluir propiedades heredadas en la propOrder menos que marque la clase de pieza con @XmlTransient .