Chr*_*ris 6 java namespaces 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);
Run Code Online (Sandbox Code Playgroud)
我想将"hard_coded_namespace"替换为JAXB"obj"中包含的命名空间(或者它的一个属性,它们当前应该共享相同的NS).
任何想法如何在编组之前获得NS信息?在输出流中,将显示命名空间.所以他们在"obj"的某个地方.
[更新]正如下面的答案所指出的,我不需要设置JAXB_FRAGMENT属性.我改成了:
JAXB.marshal(new JAXBElement<T>(new QName("hard_coded_namespace", rootName), clazz, jaxbObject), out);
Run Code Online (Sandbox Code Playgroud)
目前,这是我找到的解决方案:
String nsURI = "";
for(Annotation annotation: jaxbObject.getClass().getPackage().getAnnotations()){
if(annotation.annotationType() == XmlSchema.class){
nsURI = ((XmlSchema)annotation).namespace();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
欢迎更优雅的解决方案:-)