2013-09-21 16 views
6

Sto lavorando con JAXB per la prima volta e sto avendo alcuni problemi a capire cosa vuole che faccia.JAXB IllegalAnnotationExceptions

Ho impostato una classe che farà parte di un XML piuttosto grande, questa classe rappresenterà la sezione "Intestazione" 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... 

} 

Ecco la traccia dello 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 

.. ECC ..

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.<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.somecompany.jscentral.xml.AbstractXML.<init>(AbstractXML.java:21) 
    at com.somecompany.jscentral.xml.integrator.soc.Header.<init>(Header.java:33) 
    at com.somecompany.jscentral.xml.integrator.IntegratorSOCXML.main(IntegratorSOCXML.java:22) 

ho provato diverse @XmlAccessorType 's ... ma nessun cambiamento. Ho anche provato ad annotare i metodi con @XmlTransient e nessuna differenza. Che cosa sto facendo di sbagliato?

+1

Si potrebbe essere meglio specificare uno schema XML per il documento e l'utilizzo di 'xjc' di compilarlo in classi. –

+0

@BoristheSpider hmm ... interessante, non sapevo che avrei potuto farlo. Non ho uno schema scritto ma ho un XML di produzione da costruire contro. Forse scrivere lo schema sarà meno digitando ... – SnakeDoc

risposta

14

Il propOrder si basa sul campo/nome della proprietà e non sul nome dell'elemento. Se apporti questa modifica, tutto funzionerà correttamente.

Inoltre, se avete intenzione di annotare i campi è necessario specificare @XmlAccessorType(XmlAccessType.FIELD) sulla tua classe.

Anche perché Ho notato che avete eredità nel modello Non è possibile includere proprietà nel propOrder ereditato a meno che non si contrassegna la classe parte con @XmlTransient.

+0

+1 che ha fatto il trucco! - Originariamente avevo il tipo di accesso impostato su "CAMPO", ma la mia sperimentazione mi portò a "NONE". Risolto anche ora. (Accetterò una volta scaduto il tempo) – SnakeDoc