jab with XMLStringWriter - пространство имен не устанавливается для корневого элемента при использовании метода setPrefix

Я пытаюсь установить префикс пространства имен для всех элементов тега в XML. Я использую JAXB для маршеллинга и использую XMLStringWriter для установки префикса с помощью метода setPrefix. Я также использую package-json для использования XMLSchema и установки elementFormDefault, чтобы префикс пространства имен применялся ко всем элементам. Я не хочу использовать пространство имен по умолчанию в @XMLschema, потому что я не хочу создавать несколько пакетов.

Ниже приведен мой класс сущности:

@XmlRootElement(name = "Customer", namespace = "com.ssc.learn.myself")
public class Customer {
    String name;
    int age;
    int id;
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
    public int getId() {
        return id;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setId(int id) {
        this.id = id;
    }
}

Следующее - мой основной класс:

public static void main( String[] args ) throws XMLStreamException, FactoryConfigurationError
        {
             Customer customer = new Customer();
          customer.setAge(5);
          customer.setId(1);
          customer.setName("XXXX");

          try {

            JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

            StringWriter result = new StringWriter();
            XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(result);
            writer.setPrefix("ap", "com.ssc.learn.myself");
            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            jaxbMarshaller.marshal(customer, writer);

            System.out.println(result);

  } catch (JAXBException e) {
            e.printStackTrace();
              }
        }
    }

Следующее - мой Package-info.java:

@javax.xml.bind.annotation.XmlSchema (
     elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
    )

package com.ss.learn.jaxb;

Выход:

<?xml version="1.0" ?><ap:Customer xmlns=""><age>5</age><id>1</id><name>XXXX</name></amp:Customer>

Ожидаемый результат

<?xml version="1.0" ?><ap:Customer xmlns="com.ssc.learn.myself"><ap:age>5</ap:age><ap:id>1</ap:id><name>XXXX</name></ap:Customer>

Будет полезно, если кто-нибудь поможет мне понять, почему xmlns="" вместо xmlns="com.ssc.learn.myself" . Если значение neons установлено правильно, префикс будет автоматически установлен для других элементов

0 ответов

Другие вопросы по тегам