目前我編組JAXB對象到輸出流用下面的代碼如何獲得命名空間JAXB對象的
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
ByteArrayOutputStream out = new ByteArrayOutputStream();
marshaller.marshal(new JAXBElement(new QName("hard_coded_namespace", clazz.getSimpleName()), clazz, obj), out);
我想換成「hard_coded_namespace」與包含在JAXB「中的命名空間obj「(或它的一個屬性,它們目前應該共享相同的NS)。
任何想法如何在封送之前獲取NS信息?在輸出流中,名稱空間出現。所以他們在「obj」的某個地方。
[更新]正如在下面的答案中指出的,我不需要設置JAXB_FRAGMENT屬性。我將其更改爲:
JAXB.marshal(new JAXBElement<T>(new QName("hard_coded_namespace", rootName), clazz, jaxbObject), out);
命名空間信息是在'package-info.java' – Chris
取決於你想要你的解決方案是多麼普遍的目的,沒有保證package-info。類將由xjc生成(請參閱-npa選項)。 – kschneid