Tag: xml serialization

序列化为XML时忽略父类

当您在子类的List上有@XmlElement时,是否有JAXB注释忽略父类? 只是为了澄清 – 我想知道是否有一种比将所有父类getter / setter标记为瞬态更好的方法,然后必须返回子类并添加getter / setter并将其注释为XmlElements 一个例子: public class GenericHelper { String name=””; String dates=””; String roleName=””; String loe=””; @XmlTransient public String getName() {return name;} public void setName(String name) {this.name = name;} @XmlTransient public String getDates() {return dates;} public void setDates(String dates) {this.dates = dates;} @XmlTransient public String getRoleName() {return roleName;} public void […]

MOXY中的JAXBinheritance

我有两节课: package a; class A { private fieldOfClassA; // getters, and setters } package b; class B extends A{ private fieldOfClassB; // getters, and setters } 我想将类B编组为xml元素,并从类A添加属性fieldOfClassB和fieldOfClassA,但它在编组期间打印以下警告消息: Ignoring attribute [fieldOfClassA] on class [bB] as no Property was generated for it. 请注意,这两个类来自两个不同的包,我无法更改此对象模型。 先感谢您! 编辑: 我正在使用外部绑定文件。

使用xstream自定义java集合的序列化

我有一个需要序列化为XML的对象,其中包含以下字段: List tags = new List(); XStream将它串行化(在一些别名之后),如下所示: tagOne tagTwo tagThree tagFour 这是可以的,但我希望能够将元素重命名为,例如 。 我无法从XStream网站上的别名文档中看到一种明显的方法。 我错过了一些明显的东西吗

将org.w3c.dom.Node转换为String

对不起,我是一个Java / XML新手 – 似乎无法想出这个。 似乎可以将Document对象转换为字符串。 但是,我想将Node对象转换为字符串。 我正在使用org.ccil.cowan.tagsoup Parser。 我正在通过类似的方式检索节点… parser = new org.ccil.cowan.tagsoup.Parser() parser.setFeature(namespaceaware, false) Transformer transformer = TransformerFactory.newInstance().newTransformer(); DOMResult domResult = new DOMResult(); transformer.transform(new SAXSource(parser, new InputSource(in)), domResult); Node n = domResult.getNode(); // I’m interested in the first child, so… Node myNode = n.getChildNodes().item(0); // convert myNode to string.. // what to do […]

将原始二进制数据与XML一起存储的最标准Java方法是什么?

我需要将大量二进制数据存储到文件中,但我还想以XML格式读取/写入该文件的标头。 是的,我可以将二进制数据存储到某个XML值中,然后使用base64编码对其进行序列化。 但这不会节省空间。 我可以以一种或多或少的标准化方式“混合”XML数据和原始二进制数据吗? 我在想两个选择: 有没有办法使用JAXB执行此操作? 或者有没有办法获取一些现有的XML数据并将二进制数据附加到它,以便识别边界? 是不是我正在寻找/用于SOAP的概念? 或者是否在电子邮件标准中使用? (二元附件的分离) 我正在努力实现的方案: [meta-info-about-boundary][XML-data][boundary][raw-binary-data] 谢谢!

JAXB和抽象类

我正在尝试使用JAXB解组一些XML,但我得到了“无法创建…的实例”exception。 我理解为什么 – 它试图创建一个抽象类的实例。 我想要的是让它成为特定实现类的实例。 我的目标是对setter方法进行特定于类的检查。 也许“qux”是BarImpl的有效baz值,但BarImpl2想要做其他事情。 通过不注释Foo,我在那里得到了一部分,但如果我不注意酒吧,那么事情会变得难看。 import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import org.junit.Test; public class JAXBTest { @Test public void test() throws javax.xml.bind.JAXBException { String xml = “” + ” ” + ” qux” + ” ” + “”; javax.xml.bind.JAXBContext context = javax.xml.bind.JAXBContext.newInstance( FooImpl.class, BarImpl.class ); javax.xml.bind.Unmarshaller unmarshaller = context.createUnmarshaller(); unmarshaller.unmarshal(new java.io.StringReader(xml)); } @XmlRootElement(name=”foo”) […]

通过JAXB为枚举提供自定义值序列化

对于我正在进行的项目,我们使用了很多枚举。 模型对象本身由许多小类组成; 然后,我们通过JAXB将此模型作为XML序列化到我们的DB。 现在,我们希望能够使用枚举中特定方法的返回来序列化我们的枚举值; 给出的: public enum Qualifier { FOO(“1E”, “Foo type document”), BAR(“2”, “Bar object”); private String code, description; public Qualifier(String code, String description) { this.code = code; this.description = description; } public String getCode() { return this.code; } public String getDescription() { return this.description; } } 目前,当序列化为XML时,我们得到类似的东西: FOO 这是JAXB处理它的方式。 但是,我们需要将值作为getCode()的返回值,并且我们的许多枚举都遵循该约定(使用相应的静态方法通过代码进行查找),因此上面的XML片段如下所示: 1E 代替。 我们可以使用@XmlEnum和@XmlEnumValue来注释它,但这太繁琐了 […]

在XML文件中构造事物

我想在xml文件中保存以下内容 Question0 : What is ur name? Answer0: Tina Question0.0 : What are your hobbies? Answer0.0.0 : reading Question0.0.0.0 :What do you like in reading.? Answer0.. : ….. Answer0.0.1 : Dancing Question0.0.0.1 :which dance do you like? Answer1:Roger ………..same question answer as above. 答案下面可以有嵌套问题,但在问题下面只能有答案。 什么是写入xml suing java的正确方法。 我想不出办法……? 对我来说,一步一步的解决方案将很棒,因为我是java的新手。

使用Simple XML(org.simpleframework.xml)序列化第三方类

我决定使用Simple XML序列化,并且遇到了基本问题。 我试图将java.util.UUID类实例序列化为这个小类中的f​​inal字段: @Root public class Identity { @Attribute private final UUID id; public Identity(@Attribute UUID id) { this.id = id; } } 教程显示如何通过注册这样的转换器来序列化第三方对象: Registry registry = new Registry(); registry.bind(UUID.class, UUIDConverter.class); Strategy strategy = new RegistryStrategy(registry); Serializer serializer = new Persister(strategy); serializer.write( object, stream ); 适用于UUID的转换器非常简单: public class UUIDConverter implements Converter { @Override public UUID […]

transformer.setOutputProperty(OutputKeys.ENCODING,“UTF-8”)不起作用

我有以下方法将XMLDom写入流: public void writeToOutputStream(Document fDoc, OutputStream out) throws Exception { fDoc.setXmlStandalone(true); DOMSource docSource = new DOMSource(fDoc); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, “xml”); transformer.setOutputProperty(OutputKeys.ENCODING, “UTF-8”); transformer.setOutputProperty(OutputKeys.INDENT, “no”); transformer.transform(docSource, new StreamResult(out)); } 我正在测试其他一些XMLfunction,这只是我用来写入文件的方法。 我的测试程序生成了33个测试用例,其中写出了文件。 其中28个具有以下标题: … 但出于某种原因,现在有一个测试用例产生: … 还有四种产品: … 您可以清楚地看到,我将ENCODING输出键设置为UTF-8。 这些测试曾用于早期版本的Java。 我没有在一段时间内(超过一年)运行测试,但今天在“Java(TM)SE运行时环境(版本1.6.0_22-b04)”上运行我得到了这个有趣的行为。 我已经validation导致问题的文档是从最初具有这些编码的文件中读取的。 似乎新版本的库试图保留已读取的源文件的编码。 但这不是我想要的……我真的希望输出是UTF-8。 有没有人知道可能导致变压器忽略UTF-8编码设置的任何其他因素? 还有什么必须在文档上设置,以忘记最初读取的文件的编码? 更新: 我在另一台机器上检查了同一个项目,在那里构建并运行了测试。 在那台机器上,所有测试都通过了! 所有文件的标题中都有“UTF-8”。 该机器具有“Java(TM)SE运行时环境(版本1.6.0_29-b11)”两台机器都运行Windows 7.在新机器上运行正常,jdk1.5.0_11用于进行构建,但是在旧机器上运行机器jdk1.6.0_26用于构建。 用于两个版本的库完全相同。 在构建时是否可以与1.5的JDK 1.6不兼容? […]