2015-10-17 3 views
0

Я пытаюсь создать простой XML из POJO с помощью JAXB. Вот мой выход XML:JAXB генерировать XML-элемент с именем пакета

<Customer> 
 
    <name>abcd</name> 
 
</Customer>
Для этого POJO:

@XmlRootElement 
private static class Customer { 
    @Max(5) 
    private String name; 
    public String getName() { 
     return name; 
    } 
    @XmlElement 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

Я хочу иметь корневой XML элемент полностью описание т.е. полное имя пакета. Так выход XML должен быть:

<com.some.pkg.Customer> 
 
    <name>abcd1231</name> 
 
</com.some.pkg.Customer>

Вот мой Java-код:

Customer s = new Customer(); 
    s.setName("abcd"); 

    JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class); 
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    StringWriter sw = new StringWriter(); 
    jaxbMarshaller.marshal(s, sw); 
    System.out.println(sw.toString()); 

Является ли это выполнимо с JAXB? Какое свойство я должен настроить для получения такого вывода?

ответ

1
<com.some.pkg.Customer> 
    <name>abcd1231</name> 
</com.some.pkg.Customer> 

Это недопустимые XML: имена элементов не может содержать точки или пробелы или другие знаки препинания ... хотя - допускается. Таким образом, этот конкретный XML не может быть сгенерирован с помощью JAXB или иначе (поскольку это не XML).

Вместо этого, JAXB нужно использовать аннотации в файле информации о пакетах, которые настраивают порядок обработки пространства имен элемента (префиксы пространства имен, генерирующие полные имена и т. Д.).

Таким образом, вы бы в конечном итоге с чем-то вроде:

<ns:Customer xmlns:ns="com.some.pkg"> 
    <ns:name>abcd1231</ns:name> 
</ns:Customer> 

Пример файла package-info.java для com.some.pkg

@XmlSchema(namespace = "com.some.pkg", 
      xmlns = { @XmlNs(namespaceURI = "com.some.pkg", prefix = "ns") }, 
      attributeFormDefault = XmlNsForm.QUALIFIED, 
      elementFormDefault = XmlNsForm.QUALIFIED) 
package com.some.pkg; 

import javax.xml.bind.annotation.XmlNs; 
import javax.xml.bind.annotation.XmlNsForm; 
import javax.xml.bind.annotation.XmlSchema; 
+0

Спасибо за ваш ответ. Какие изменения кода я могу сделать, чтобы получить ответ XML, который вы опубликовали выше. – aanoop

+0

Создайте файл с информацией о пакете, аннотируйте оператор пакета с помощью элемента '@ XmlSchema' и настройте поле xmlns с помощью' @ XmlNs'. – user268396

+0

мой пример XML-вывода: http://xsd2xml.com/. Я просто хотел получить тот же результат с помощью кода Java. – aanoop

Смежные вопросы