Soru JAXB - Öğeyi yoksay


Jaxb ayrıştırmadan bir öğeyi görmezden gelmenin bir yolu var mı? Büyük bir XML dosyasına sahibim ve eğer büyük, karmaşık elemanlardan birini görmezden gelseydim, muhtemelen çok daha hızlı ayrıştırırdı.

Öğe içeriğini hiç doğrulayamasaydı ve bu öğe doğru olmasa bile belgenin geri kalanını ayrıştırırsa daha da iyi olurdu.

Örn: Bu sadece Foo.element1 ve Foo.element2 üretmelidir

<foo>
    <element1>I want this</element1>
    <element2>And this</element2>
    <bar>
       <a>ALL of bar should be ignored</a>
       <b>this also should be ignored</b>
       <c>
           <x>a lot of C that take time to process</x>
       </c>
       <c>
            <x>a lot of C that take time to process</x>
       </c>
       <c>
          <x>a lot of C that take time to process</x>
       </c>
      <c>
          <x>a lot of C that take time to process</x>
      </c>
  </bar>
</foo>

25
2018-02-18 16:44


Menşei




Cevaplar:


JAXB modelinizin şu şekilde gözüktüğünü varsayalım:

@XmlRootElement(name="foo")
public class Foo {

   @XmlElement(name="element1")
   String element1;

   @XmlElement(name="element2")
   String element2;

   @XmlElement(name="bar")
   Bar bar;
}

sonra basitçe bar alandan Foo atlayacak <bar/> giriş belgesindeki öğe.

Alternatif olarak, alanı @XmlTransient yerine @XmlElementve ayrıca atlanacak.


37
2018-02-18 16:57



Bir yıldan fazla sürdüğünü biliyorum ... ama bu standart JAXB için pek de doğru değil ... eksik alanı bulma konusunda şikayette bulunup hatalar atıyor. En son sürüm bu veya daha eski bir sürüm yapmış olabilir ... veya çekirdek kümede genişletilmiş başka bir API kullanıyorsunuz. Eğer yanılıyorsam, haberim olsun ama bunu denedim ve erittim. - jghost
İşte belirli bir hata: Exception in thread "main" com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions Property [property_name] appears in @XmlType.propOrder, but no such property exists. Maybe you meant [unmapped_property_name]? this problem is related to the following location: at [JAXB_object_name] - jghost
@jghost: Eğer bir propOrder ayarı ile sınıfınıza bir XmlType öğesi ayarladığınız gibi geliyor ve şimdi XJC şikayet ediyor. Belki de alan adını bu propOrder ayarından kaldırmalı ve nasıl tepki verdiğini görmelisiniz? - JBert
Ardından unmapped_property_name öğesinin bulunduğundan, propOrder'dan şikayetçi. - OrangeDog


JAXB, eşlenmemiş özellikleri yok sayar.

Uygulama bilge (inleast in EcliseLink JAXB (MOXy), ben liderim). İçeriği bir SAX ayrıştırıcısıyla işlediğimizde (yani girdi bir SAXSource), o zaman bu bölüm için işlem yapılmayan bir nesneyi (org.eclipse.persistence.oxm.unmapped) oluşturmaktan sorumlu olan ContentHandler ürünümüzü değiştiririz. UnmappedContentHandler). İçeriği bir StAX ayrıştırıcısıyla işlemeyi kullandığımızda, bir sonraki eşlenen olaya geçiyoruz.

Bu düğüme karşılık gelen bir mülkünüz varsa, @XmlTransient eşlenmemiş bir özellik yapmak için.


12
2018-02-18 16:56





İhtiyacınız olan her şey, @XmlTransient (gerekli olmayan alanları gizlemesi gereken @XmlTransient notu) olarak işaret alanını işaretler. Aşağıdaki örnek

JavaEE:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "DeletedIds")
public class DeletedIds {

    @XmlElement(name = "DeletedId")
    private List<DeletedId> id;    

    @XmlTransient
    @XmlElement(name = "success")
    private String success;

    //getters&setters
}

@XmlAccessorType(XmlAccessType.FIELD)
public class DeletedId {

    private int id;

    //getters&setters
}

xml:

<DeletedIds>
    <DeletedId>
        <id>1</id>
    </DeletedId>
    <DeletedId>
        <id>2</id>
    </DeletedId>
</DeletedIds>

2
2018-01-03 13:28





Bir SAX çözümleyicisini ve ilgi alanı dışındaki düğümü etkin bir şekilde "atlayan" bir belge işleyicisi kullanmanız gerekir. Byte'ları okuyamazsın, ama en azından ek kaynaklar harcayarak etrafta dolaşabilirsin.

Kodunuz bir DOM ağacı gerektiriyorsa temel olarak DOM düğümleri üreten bir SAX belge işleyicisi kullanırsınız, ancak ilgi alanı dışındaki düğümleri "atlar". Sağlanan DOM ağaç jeneratörler kullanarak, ancak iyi bir ticaret-off kullanarak kesinlikle daha az uygun, istenmeyen düğümlerin ekstra bellek yükü ile yaşayamazsınız ama DOM ağacına ihtiyacınız var.


1
2018-02-18 16:48