电子商务网站建设与维护总结,wordpress阿里云oss插件,wordpress ip 地址修改密码,物流运输 有哪些网站可以做推广jaxb注解使用我正在将一些依赖于Apache XMLBeans的模块迁移到JAXB。 这是令人兴奋和充满挑战的几天。 我想记下我遇到的一些重要事情#xff0c;以供将来可能会发现有用的任何人使用。 首先#xff0c;让我们来看一下设置用于JAXB代码生成的maven插件。 在撰写本文时#x… jaxb注解使用 我正在将一些依赖于Apache XMLBeans的模块迁移到JAXB。 这是令人兴奋和充满挑战的几天。 我想记下我遇到的一些重要事情以供将来可能会发现有用的任何人使用。 首先让我们来看一下设置用于JAXB代码生成的maven插件。 在撰写本文时我遇到了两个Maven插件。 http://www.mojohaus.org/jaxb2-maven-plugin/Documentation/v2.2/index.html https://github.com/highsource/maven-jaxb2-plugin 最后使用第一个因为我发现配置非常简单。 您的Maven项目结构如下 项目文件夹- src- main- xsd 这将保存您要从中生成JAXB对象的所有XSD文件。 项目文件夹- src- main- xjb 这将保存您的“ bindings.xml”文件该文件是您的数据绑定文件用于运行JAX生成任务xjc时需要进行的任何自定义。 maven的插件配置如下所示 plugingroupIdorg.codehaus.mojo/groupIdartifactIdjaxb2-maven-plugin/artifactIdversion2.2/versionexecutionsexecutionidxjc/idgoalsgoalxjc/goal/goals/execution/executionsconfigurationtarget2.1/targetsourcessourcesrc/main/xsd/source/sources/configuration/plugin 与XMLBeans一起使用的一件事是所有可选元素的“ isSet”类型的方法这些方法将检查是否设置了该元素。 默认情况下JAXB不会生成此方法因此您必须在每个元素上使用not null条件。 幸运的是绑定配置允许以下操作 jxb:bindings xmlns:xshttp://www.w3.org/2001/XMLSchemaxmlns:jxbhttp://java.sun.com/xml/ns/jaxbxmlns:xjchttp://java.sun.com/xml/ns/jaxb/xjcjxb:extensionBindingPrefixesxjcversion2.1
jxb:globalBindings generateIsSetMethodtrue
/jxb:globalBindings
/jxb:bindings 默认情况下JAXB不会为XSD文件上定义的枚举生成Java枚举。 可悲的是我找不到在全球范围内应用这一代的方法只能按XSD处理它。 但是对于XMLBeans这是自动完成的。 为了生成Java枚举应执行以下操作 样本XSD xs:complexType nameEndpointTypexs:attribute nameprotocolxs:simpleTypexs:restriction basexs:stringxs:enumeration valueHTTP/xs:enumeration valueHTTPS/xs:enumeration valuePAYLOAD//xs:restriction/xs:simpleType/xs:attribute/xs:complexType JAXB绑定 jxb:bindings xmlns:xshttp://www.w3.org/2001/XMLSchemaxmlns:jxbhttp://java.sun.com/xml/ns/jaxbxmlns:xjchttp://java.sun.com/xml/ns/jaxb/xjcjxb:extensionBindingPrefixesxjcversion2.1
jxb:bindings schemaLocation../xsd/testconfig.xsdjxb:bindings node//xs:complexType[nameEndpointType]/xs:attribute[nameprotocol]/xs:simpleTypejxb:typesafeEnumClass nameProtocol //jxb:bindings/jxb:bindings
/jxb:bindings schemaLocation –这是我要引用的XSD的相对路径。 由于我的“ bindings.xml”位于“ xjb”目录中因此我不得不向上移动一步进入XSD目录以获取所需的XSD文件。 节点 –在这里您需要提供定义了枚举的简单类型的xquery路径。 如果将其与提供的XSD进行交叉检查您将了解XQuery路径如何检索给定元素。 注意 无论如何如果您的xpath返回多个具有相同名称的元素您仍然可以通过在jxbbindings元素上引入元素multiple ” true”来处理此问题。 例如jxbbindings node ” // xscomplexType [ name EndpointType] / xsattribute [ name protocol] / xssimpleType” 多个“ true” typesafeEnumClass –在此元素上您可以提供要生成的Java枚举名称。 默认情况下XMLBeans将所有XSD日期和日期时间元素转换为Java Calendar对象。 但是对于JAXB默认情况下使用XMLGregorianCalendar 。 全局绑定再次得以解决并通过以下配置处理了该配置该配置将所有XSD日期元素转换为Java Calendar对象。 jxb:bindings xmlns:xshttp://www.w3.org/2001/XMLSchemaxmlns:jxbhttp://java.sun.com/xml/ns/jaxbxmlns:xjchttp://java.sun.com/xml/ns/jaxb/xjcjxb:extensionBindingPrefixesxjcversion2.1jxb:globalBindingsjxb:javaType namejava.util.Calendar xmlTypexs:dateTimeparseMethodjavax.xml.bind.DatatypeConverter.parseDateTimeprintMethodjavax.xml.bind.DatatypeConverter.printDateTime/jxb:javaType namejava.util.Calendar xmlTypexs:dateparseMethodjavax.xml.bind.DatatypeConverter.parseDateprintMethodjavax.xml.bind.DatatypeConverter.printDate/jxb:javaType namejava.util.Calendar xmlTypexs:timeparseMethodjavax.xml.bind.DatatypeConverter.parseTimeprintMethodjavax.xml.bind.DatatypeConverter.printTime//jxb:globalBindings/jxb:bindings 如果需要使您的JAXB对象可序列化则可以使用以下全局绑定配置来实现 jxb:bindings xmlns:xshttp://www.w3.org/2001/XMLSchemaxmlns:jxbhttp://java.sun.com/xml/ns/jaxbxmlns:xjchttp://java.sun.com/xml/ns/jaxb/xjcjxb:extensionBindingPrefixesxjcversion2.1jxb:globalBindings xjc:serializable //jxb:globalBindings/jxb:bindings 达到目的的元素是“ xjcserializable /”元素。 在JDK 1.8中我遇到了一个问题即如果您的XSD中有一个导入了另一个模式以通过HTTP检索另一个XSD则该问题被阻止了。 抛出错误的摘录是“因为由于accessExternalDTD属性设置的限制而不允许http访问” 。 在这种情况下解决方法是使用以下maven插件来设置绕过此限制所需的VM参数。 有关此问题的更多信息请参见此处 。 plugin!-- We use this plugin to ensure that our usage of themaven-jaxb2-plugin is JDK 8 compatible in absence of a fixfor https://java.net/jira/browse/MAVEN_JAXB2_PLUGIN-80. --groupIdorg.codehaus.mojo/groupIdartifactIdproperties-maven-plugin/artifactIdversion1.0.0/versionexecutionsexecutionidset-additional-system-properties/idgoalsgoalset-system-properties/goal/goals/execution/executionsconfigurationpropertiespropertynamejavax.xml.accessExternalSchema/namevaluefile,http/value/propertypropertynamejavax.xml.accessExternalDTD/namevaluefile,http/value/property/properties/configuration
/plugin 就是这样。 我会继续更新这篇文章。 与往常一样您对此的反馈总是非常感激。 谢谢您的阅读祝大家有美好的一天。 翻译自: https://www.javacodegeeks.com/2016/08/introduction-working-jaxb.htmljaxb注解使用