У меня есть схемы 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.Спасибо.
Решено
@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"), }
).