JAXB:编组后替换namesase

时间:2019-06-07 04:21:24

标签: java xml xsd jaxb

我有xsd模式。使用jaxb2-maven-plugin获得了Java对象,并且在初始化之后我对XML进行了封送处理。 所有工作,我得到xml文件。但是在此文件中,名称为“ ns#”。同时,我的xsd文件包含格式为“ com:pkg:and etc”的名称空间。请告诉我名称空间的转换方式和转换点。

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 :(得分:0)

解决了

@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"),
    }

)。