2016-09-15 23 views
7

Etki alanı modelimi XML ve JSON temsilcilerine dönüştürmek için JAXB kullanıyorum. XMl/JSON'a dönüştürmek için Student pojo'm var. Herhangi bir veri tipinde olabilen bir content özelliğine sahiptir. bunun içinxsi: remove from xml/json JAXB?

şema tanımlama:

<xs:element name="content" type="xs:anyType" /> 

Böylece Java dosyası oluşturulur içerik Object türü vardır.

Student.java:

@XmlAccessorType(XmlAccessType.FIELD) 
    @XmlType(name = "", propOrder = { 
     "content" 
    }) 
    @XmlRootElement(name = "student") 
    public class Student 
     extends People 
    { 
     ................ 

     @XmlElement(required = true) 
     protected Object content; 

    } 

Ben Marshall Aşağıdaki kodu kullanarak:

Marshall:

Map<String, Object> properties = new HashMap<String, Object>(1); 
       properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "name-binding.xml"); 


    this.ctx = JAXBContext.newInstance("packagename", 
    packagename.ObjectFactory.class.getClassLoader(), properties); 

    Marshaller marshaller = ctx.createMarshaller(); 

    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.setProperty(MarshallerProperties.MEDIA_TYPE,media-type); 
     marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT,true); 
     marshaller.setProperty(MarshallerProperties.JSON_REDUCE_ANY_ARRAYS, true); 

     StringWriter sw = new StringWriter(); 
     marshaller.marshal(object, sw); 

XML:

İçerik öğesinde eklenen
<student> 

    <name>Jack n Jones</name> 
    <content xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">Sid</content> 

</student> 

ve xsi:type="xsd:string">. Bu tür bilgileri XML'imde istemiyorum.

Benzer JSON için tip bilgisi ekler:

JSON: Ben tür bilgileri kaldırmak ve çalışma zamanında azından en türüne göre XML/JSON üretebilir nasıl

 { 
      "name" : "Jack n Jones", 
      "content" : { 
       "type" : "string", 
       "value" : "Sid" 
      } 
     } 

.

<student> 

     <name>Jack n Jones</name> 
     <content>Sid</content> 

    </student> 

cevap

2

bir java.lang.Object parametre aktarımı ve JAXB açıklamalı pojo ve: İçerik sonra XML String Yani eğer ne olursa olsun türüdür content o en Örneğin tip bilgilere

olmadan tip dönüştürülür olsun marshalling sonrasında ek olarak oluşturulmamış meta bilgiye sahip olmak mümkün değildir. Nesne "bilinmeyen" olduğu için, sıralama işlemi sırasında algılanması ve dönüştürülmesi gerekir ve meta veriler her zaman varsayılan marşalör tarafından oluşturulur. Bu noktadan itibaren, üç seçenek vardır:

  1. özel diziciyi veya adaptör
  2. Kullanım dize yerine (hızlı ve temiz çözelti) Nesne
  3. ise (WEB'inizdekini örnekler bol) Beyaz gerçekten genel bir şey kullanmalısınız, "Öğe" (https://jaxb.java.net/nonav/2.2.4/docs/api/javax/xml/bind/annotation/XmlAnyElement.html)
kullanın