在jaxb编组中动态设置对象的名称空间
我有一种情况,我需要为我的jaxb类动态地设置我的名称空间。我的jaxb类中的命名空间有一个需要动态更改的版本。在jaxb编组中动态设置对象的名称空间
@XmlRootElement(name = "myobject",namespace="http://myhost.com/version-2")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType
public class myObject{
}
我编组完美的作品时,我用这种静态的命名空间的机制,但在我的真实情况,我需要这个版本的动态改变..
我试过这个方法来解决这个问题编组
时XMLStreamWriter xmlStreamWriter =
XMLOutputFactory.newInstance().createXMLStreamWriter(stringWriter);
String uri = "http://myhost.com/ver-"+version;
//xmlStreamWriter.setDefaultNamespace(uri);
xmlStreamWriter.writeStartDocument("1.0");
xmlStreamWriter.writeNamespace("ns1", uri);
我尝试使用setDefaultNamespace的并不成功,和writeNamespace扔我一个错误 无效状态:起始标记不是在和writeNamespace
打开关于如何解决这个问题的任何意见都非常感谢。
您可以实现XMLStreamWriter
委托给原作者所有呼叫,但覆盖writeNamespace(...)
方法:
public void writeNamespace(String prefix, String uri) {
if ("http://myhost.com/version-2".equals(uri) {
uri = "http://myhost.com/version-" + version;
}
delegate.writeNamespace(prefix, uri);
}
当我尝试覆盖此.. xmlStreamWriter.writeNamespace(“ns2”,http://myhost.com /版本-2); 我得到这个错误.. 无效状态:起始标记不是在 和writeNamespace(NS2,http://myhost.com/version-2)打开 – Sanath 2012-03-25 22:11:02
请尽量覆盖的startElement(字符串URI,... )和setPrefix(...)metods以相同的方式。基本上,获取namespaceURI参数的每个方法都需要进行名称空间转换。 – chris 2012-03-26 18:31:24
因为我只想在xml的根元素中添加名称空间版本,所以我做了这个诀窍。我有这样的xml注释模型类@XmlRootElement(name =“myobject”,namespace =“myhost.com/version-“)@XmlAccessorType(XmlAccessType.FIELD)@XmlType public class myObject {} – Sanath 2012-04-09 04:51:39
看一看http://stackoverflow.com/questions/277502/jaxb-how- to-ignore-namespace-during-unmarshalling-xml-document有几个例子说明如何在运行中处理有效载荷。 – Osw 2012-03-25 06:16:25