草庐IT

java - java 9 上的 jaxb2-maven-plugin 失败

jaxb2-maven-plugin的schemagen目标在Java9上失败。错误是:[Exception]:java.lang.ClassNotFoundException[Message]:com.sun.istack.SAXParseException2jaxb2插件版本为2.3.1maven版本为3.5.0。maven编译插件版本为3.7.0。所有插件/依赖项都是最新的。我没有任何module-info.java文件。我构建的项目是遗留的Java8项目,其中JDK已从1.8u144升级到版本9。希望目前唯一失败的插件是jaxb2-maven-plugin。其他一切都很好,无论

java - 使用扩展类时不调用 JAXB afterUnmarshall

我写了一个bean(BaseBeanEx)扩展了一个JAXB注释的bean(BaseBean)。BaseBean位于数据结构某处的列表中,无法更改。软件会在需要时显式转换为BaseBeanEx。我还编写了一个ObjectFactory来创建BaseBeanEx而不是BaseBean。这一切都很好,但现在我向BaseBeanEx添加了一个afterUnmarshal方法,它永远不会被调用。这是一个错误还是符合规范?如果以后是这种情况,是否有一些优雅的解决方法?我正在使用默认的JAXB引擎。 最佳答案 注意:我是EclipseLinkJ

java - 使用 JAXB 将同名的多个 XML 元素解码到一个列表中

我正在尝试将XML消息解码为Java对象。我大部分时间都在使用它,但有一个问题让我陷入困境。我有一个看起来像这样的架构:EdToronto2013-05-0612:12MARKHAM2013-05-0705:12MARKHAM2013-05-0815:12MARKHAM现在,问题是JAXBObjectFactory只保存最后一个事件。如果有一个元素包装事件(),那么我就会知道如何使用XML元素包装器来处理它。但是由于没有wrapper,我不确定该怎么做。有人有什么想法吗?我猜ObjectFactory正在获取所有事件,但不断用最新事件覆盖旧事件。需要有一些方法来告诉它保存每个单独的事件

java - Jaxb 解码 fixml 对象,但所有字段均为空

我有一个FIXML格式的小型XML文档。我正在使用jaxb解码它们。问题过程完成且没有错误,但创建的对象完全为空。每个字段都是空的。列表字段(如数量)中包含正确数量的对象。但是那些对象的字段也是空的。设置我已经从here下载了FIXML模式我用xjc和maven插件创建了类。它们都在包org.fixprotocol.fixml_5_0_sp2中。我在文件中有示例xmlFIXML.XML然后我使用自定义事件处理程序调用解码器,该处理程序只在解析错误时抛出异常。解析完成,所以我知道没有生成错误。我还按照建议处理namespacehere//sortoutthefileStringxmlFi

java - JAXB UnMarshal Collection 元素顺序

假设我有以下XML...这是我的代码:finalJAXBContextcontext=JAXBContext.newInstance(Names.class);finalUnmarshallerum=context.createUnmarshaller();finalInputStreamin=newFileInputStream(file);finalReaderreader=newInputStreamReader(in,Charset.forName("UTF-8"));finalNamesnamesList=(Names)um.unmarshal(reader);...现在我找

java - JAXB - 在编码为 XML 时,类包含可以展平吗?

比如说,我有两个类:@XmlRootElementclassA{@XmlElementStringpropertyOfA;@XmlElementBb;}classB{@XmlElementStringpropertyOfB;}JAXB返回以相应方式格式化的XML:valueAvalueB我的问题是如何在XML中展平层次结构?所以我有:valueAvalueB这可以用注释来完成吗?目前我正在考虑为A创建一种包装器类,它将按照我希望在XML中看到它们的方式构建字段。有没有更好的办法? 最佳答案 注意:我是EclipseLinkJAXB(

xml - JAXB (un) xsd 类型编码 : xsd:base64Binary and xsd:hexBinary

JAXB同时映射xsd:base64Binary和xsd:hexBinary类型为byte[].鉴于我有一个架构/DOM元素代表这些类型中的每一个,例如:ABCD对于xsd:hexBinary和YTM0NZomIzI2OTsmIzM0NTueYQ==对于xsd:base64Binary,目前尚不清楚JAXB2.1如何处理它。JAXB.unmarshal(newDOMSource(node),byte[].class)不喜欢有效载荷。以下也没有:JAXBContextctx=JAXBContext.newInstance(byte[].class);ctx.createUnmarshal

java - 在我需要做一些复杂的事情之前,JAXB 一直很好用。有哪些选择?

JAXB运行良好,直到我需要执行一些我无法修改其源代码的序列化bean之类的操作。如果bean没有默认构造函数,或者如果它引用了我想标记为transient的对象,那么我将不得不编写一个单独的bean,我可以对其进行注释,然后手动从另一个bean复制信息。例如,我想序列化异常对象,但发现唯一的方法是使用需要使用com.sun.*类的hack。那么,还有哪些选择呢?下一个最流行的xml序列化api是什么?能够做这样的事情会很好:在序列化时选择是否在结果中包含某些字段。(在运行序列化程序时将事物标记为transient)。通过使用引用或其他方式处理对象图中的循环,而不仅仅是死掉。也许注释一

java - 如何更改 JAXB Marshaller 行分隔符?

什么属性用于更改Marshaller(javax.xml.bind.Marshaller)行分隔符(回车、换行、换行)?我相信编码器正在使用系统的行分隔符。System.getProperty("line.separator")但是需要不同的转义序列(即\r\n需要更改为\n或相反)。marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);marshaller.setProperty("line.separator","\r\n"); 最佳答案 没有可以自定义的属性

java - 在不使用 NamespacePrefixMapper 的情况下定义 Spring JAXB 命名空间

[随着理解的进展进行了大量编辑]是否可以让SpringJaxb2Marshaller使用一组自定义的命名空间前缀(或至少尊重架构文件/注释中给出的前缀)而不必使用NamespacePrefixMapper的扩展?这个想法是让一个类与另一个类具有“具有”关系,而另一个类又包含一个具有不同命名空间的属性。为了更好地说明这一点,请考虑以下使用JDK1.6.0_12的项目大纲(我可以在工作中得到的最新版本)。我在包org.example.domain中有以下内容:Main.java:packageorg.example.domain;importjavax.xml.bind.JAXBConte