我不得不馬歇爾我的根XML對象的片段JAXB片段:具有不同的命名空間
Header header = ebicsNoPubKeyDigestsRequest.getHeader();
JAXBElement<org.ebics.h003.EbicsNoPubKeyDigestsRequest.Header> jaxbElement =
new JAXBElement<EbicsNoPubKeyDigestsRequest.Header>(
new QName("header"), EbicsNoPubKeyDigestsRequest.Header.class, header);
byte[] headerXml = JAXBHelper.marshall(jaxbElement, true);
但是當我馬歇爾ebicsNoPubKeyDigestsRequest
的命名空間是不相同的(在報頭片段我有:xmlns:ns4="http://www.ebics.org/H003"
但在ebicsNoPubKeyDigestsRequest
我有xmlns="http://www.ebics.org/H003"
)
如果我馬歇爾直接標題對象,而無需使用的JAXBElement,我有一個No @XmlRootElement
錯誤
怎樣纔可以有相同的N amespaces? 注:我已經使用了一個NamespacePrefixMapper
類:
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new NamespacePrefixMapper() {
@Override
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
if (namespaceUri.equals("http://www.ebics.org/H003")) {
return "";
} else if (namespaceUri.equals("http://www.w3.org/2000/09/xmldsig#")) {
return "ds";
} else if (namespaceUri.equals("http://www.ebics.org/S001")) {
return "ns1";
} else if (namespaceUri.equals("http://www.w3.org/2001/XMLSchema-instance")) {
return "ns2";
}
return "";
}
});
編輯:這裏的不同package-info.java:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.ebics.org/H003", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package org.ebics.h003;
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.ebics.org/S001", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package org.ebics.s001;
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.w3.org/2000/09/xmldsig#", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package org.w3._2000._09.xmldsig_;
我假定包org.ebics.h003和其中的所有類都是由XJC生成的。如果是,那麼如果包內有一個名爲'package-info.java'的文件,你可以將它和(* top part *,顯示'@ XmlRootElement','@ XmlType'等註釋)你的'EbicsNoPubKeyDigestsRequest'和'EbicsNoPubKeyDigestsRequest.Header'類? – 2011-12-19 11:54:39
@ javax.xml.bind.annotation.XmlSchema(namespace =「http://www.ebics.org/H003」,elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) package org.ebics.h003; => H003 @ javax.xml.bind.annotation.XmlSchema(命名空間= 「http://www.ebics.org/S001」,將elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 包有機ebics.s001; => s001 @ javax.xml.bind.annotation.XmlSchema(namespace =「http://www.w3.org/2000/09/xmldsig#」,elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED ) package org.w3._2000._09.xmldsig_; => w3 – Baptiste 2011-12-19 12:22:20
您可以發佈此更新以提高可讀性。請在下次使用編輯功能。此外,您的課堂上的註釋也是有用的。 – 2011-12-19 12:32:41