2016-12-16 8 views
0

У меня есть простой XSD, который нельзя изменить (предоставляется сторонним). Я пытаюсь использовать XJC для создания классов java для XSD. Очень упрощенный XSD является:JAXB с nillable root

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="receive" nillable=true /> 
</xs:schema> 

Я хочу, чтобы мобилизовывать объект к XML, так что элемент установлен в ноль. Когда я создаю классы java с XJC, я получаю ObjectFactory, который имеет метод JAXBElement<Object> createReceive(Object). Тем не менее, нет аннотации @XmlElementRoot. Я видел this question and answer, однако у меня также нет доступа к сторонним плагинам. Есть ли возможное решение через привязки или любое другое собственное решение?

ответ

1

Выяснено, что это было намного проще, чем я делал, или подразумеваемый связанный вопрос. Меня повесили на то, что не было @XmlElementRoot, но это оказалось ненужным.

simple.xsd:

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="receive" nillable="true" /> 
</xs:schema> 

В командной строке, побежал .../jdk1.8/bin/xjc simple.xsd, который генерируется ObjectFactory. Один метод в ObjectFactory имел подпись public JAXBElement<Object> createReceive(Object value).

Создано ниже код реализации:

package aTest; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBElement; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Marshaller; 

import generated.ObjectFactory; 

public class start { 

    public static void main(final String[] args) { 
    final ObjectFactory factory = new ObjectFactory(); 
    final JAXBElement<Object> element = factory.createReceive(null); 

    try { 
     final JAXBContext jaxbContext = JAXBContext.newInstance(JAXBElement.class); 
     final Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

     jaxbMarshaller.marshal(element, System.out); 
    } catch (final JAXBException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

В этом генерируется следующий вывод: по желанию

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<receive xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>