我有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相比会发生变化。 谢谢。
答案 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"),
}
)。