JAXB: заменить пространство имен после сортировки - PullRequest
0 голосов
/ 07 июня 2019

У меня есть схемы xsd.Используя jaxb2-maven-plugin, я получил объекты Java, а после инициализации я сделал маршалинг в xml.Все работает, я получаю XML-файл.Но в этом файле указано пространство имен "ns #".В то же время мой xsd-файл содержит пространства имен в форме «com: pkg: и т. Д.». Пожалуйста, скажите мне, как и в какой момент происходит преобразование пространства имен.

xsd ecxample: 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:com="http://roskazna.ru/gisgmp/xsd/Common/2.1.1"
        xmlns:pkg="http://roskazna.ru/gisgmp/xsd/Package/2.1.1"
        xmlns="urn://roskazna.ru/gisgmp/xsd/services/import- 
charges/2.1.1"
        targetNamespace="urn://roskazna.ru/gisgmp/xsd/services/import-charges/2.1.1"
        elementFormDefault="qualified">

xml результат:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns7:ImportChargesRequest 
xmlns="http://roskazna.ru/gisgmp/xsd/Charge/2.1.1" 
xmlns:ns2="http://roskazna.ru/gisgmp/xsd/Common/2.1.1" 
xmlns:ns3="http://roskazna.ru/gisgmp/xsd/Organization/2.1.1" 
xmlns:ns4="http://roskazna.ru/gisgmp/xsd/Package/2.1.1" 
xmlns:ns5="http://roskazna.ru/gisgmp/xsd/Payment/2.1.1" 
xmlns:ns6="http://roskazna.ru/gisgmp/xsd/Refund/2.1.1" 
xmlns:ns7="urn://roskazna.ru/gisgmp/xsd/services/import- 
charges/2.1.1" Id="1" timestamp="2019-06-05T13:46:20.747+07:00" 
senderIdentifier="1" senderRole="TEST">

маршалинг:

    try {
        osw = new OutputStreamWriter(os, Charset.forName("UTF-8"));
        Marshaller m = jc.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        m.marshal(elem, os);
    } catch (JAXBException ex) {
        throw new IOException(ex);
    } finally {
        if (osw != null) {
            osw.close();
        }

XML сформирован.Но я не понимаю, почему пространство имен в xml меняется по сравнению с xsd.Спасибо.

1 Ответ

0 голосов
/ 07 июня 2019

Решено

@javax.xml.bind.annotation.XmlSchema(
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
    xmlns={
            @XmlNs(prefix="pkg", namespaceURI="http://roskazna.ru/gisgmp/xsd/Package/2.1.1"),
    }

).

...