我不得不马歇尔我的根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