用于XML绑定的Java体系结构是将XML用作域对象的Java标准。它提供了一种将Java类映射到XML表示的简单机制。
jaxb2_commons:jaxb2-basics 不适用于 com.intershop.gradle.jaxb 6.0.0
我尝试使用新版本的 com.intershop.gradle.jaxb:6.0.0 和 gradle:8.1.1 从 wsdl 生成 java 类。但我需要 jaxb2-basics 扩展才能使用“-XtoString”参数。当我添加 贾克斯贝...
JAXB-XJC:为 jaxb2-maven-plugin 生成的所有类添加必需的参数构造函数
有没有办法为 org.codehaus.mojo:jaxb2-maven-plugin 添加必需的参数构造函数? 我找到了 org.jvnet.jaxb2_commons:jaxb2-value-constructor 但它只能生成所有参数构造函数...
在 CompletableFuture.runAsync(() -> {}
在将 JAXB-API 与 CompletableFuture.runAsync 一起使用时,会出现找不到模块的错误,而如果我在没有 CompletableFuture 的情况下使用相同的函数,它工作正常 那么,你在这里有任何依赖吗...
无法使用 JAXB 编组器为来自不同包的嵌套对象生成 XML
**XSD1** **XSD1** <xs:complexType name="Root1"> <xs:sequence> <xs:element name="Revision" type="xs:string" /> <xs:element name="Header" type="Header" /> <xs:element name="Body" type="SwAny" minOccurs="0" /> </xs:sequence> </xs:complexType> <xs:complexType name="SwAny" mixed="true"> <xs:sequence> <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> The JAVA Object for the above XSD is like below @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "root1", propOrder = { "revision", "header", "body" }) public class Root1 implements Serializable { private final static long serialVersionUID = 1L; @XmlElement(name = "Revision", required = true) protected String revision; @XmlElement(name = "Header", required = true) protected SAA_Header header; @XmlElement(name = "Body") protected SAA_SwAny body; -- getter and setter -- } @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "SwAny", propOrder = { "content" }) public class SAA_SwAny implements Serializable { private final static long serialVersionUID = 1L; @XmlMixed @XmlAnyElement protected List<Object> content; } I have another XSD which I have marshalled and generated POJO objects like below @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "Header", propOrder = { "fr", "to" }) public class Header implements Serializable { private final static long serialVersionUID = 1L; @XmlElement(name = "Fr", required = true) protected PartyChoice__1 fr; @XmlElement(name = "To", required = true) protected PartyChoice__1 to; -- getter & setter -- } In my class where I marshall, I create like below and marshall Header header = new Header(); header.setFr(fr); header.setTo(to); Root1 **pdu** = new Root1(); **pdu**.setRevision("rev"); SAA_SwAny any = new SAA_SwAny(); any.getContent().add(header); Marshaller mars = cfgsvc.createMarshaller(jaxbCtx, true, "UTF8", false, localPart); String schemaLoc = cfgsvc.findSchemaLoc(localPart); JAXBElement<?> elm = new JAXBElement(xmlQName, docCls, **pdu**); sw = new StringWriter(); mars.marshal(elm, sw);` 按照上面的代码执行时,遇到下面的异常 原因:com.sun.istack.SAXException2:无法将类型“com.test.Header”封送为元素,因为它缺少 @XmlRootElement 注释 在 com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:225) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:274) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.property.ArrayReferenceNodeProperty.serializeListBody(ArrayReferenceNodeProperty.java:78) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:101) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:293) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:619) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:114) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:293) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:619) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:114) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:98) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:127) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(ElementBeanInfoImpl.java:244) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:251) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:33) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:461) ~[jaxb-impl-2.0.1.jar:2.0.1] 在 com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:292) ~[jaxb-impl-2.0.1.jar:2.0.1] The workaround i did was in the header class added the below code **@XmlRootElement(name = "header", namespace = "head.namespace")** @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "Header", propOrder = { "fr", "to" }) public class Header implements Serializable { private final static long serialVersionUID = 1L; @XmlElement(name = "Fr", required = true) protected PartyChoice__1 fr; @XmlElement(name = "To", required = true) protected PartyChoice__1 to; -- getter & setter -- } now the xml marshaller works as expected and i get the below xml <?xml version="1.0" encoding="UTF8" standalone="yes"?> <PDU xsi:schemaLocation="...." xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Revision>rev</Revision> <Body> <head:Hdr> <head:Fr> <head:Id> <head:InstnId> <head:FI>AAAASGSGXXX</head:FI> </head:InstnId> </head:Id> </head:Fr> <head:To> <head:Id> <head:InstnId> <head:FI>AAAASGSGXXX</head:FI> </head:InstnId>`your text` </head:Id> </head:To> </head:Hdr> </Body> </PDU> 我期待一个无需手动添加 @xmlrootelement 的解决方案。 JAXB 有办法解决这个问题吗? 假设您正在使用像以前的 maven-jaxb2-plugin 这样的工具,并使用 jaxb api 3+ (雅加达版本),您可以使用以下绑定文件告诉 xjc 在生成的每个类上添加 @XmlRootElement (有趣的是部分是<xjc:simple/>) <?xml version="1.0" encoding="UTF-8"?> <jxb:bindings xmlns:jxb="https://jakarta.ee/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jxb:extensionBindingPrefixes="xjc" jxb:version="3.0"> <jxb:globalBindings> <xjc:simple/> </jxb:globalBindings> </jxb:bindings> 希望对你有帮助。 我说的是以前的maven-jaxb2-plugin,因为该插件在最新版本中被重命名(查看迁移指南)
如何使用 jaxb2-maven-plugin 向 jaxb 生成的 java beans 添加后缀
我从第三方导入了 xsd 和 wsdl 作为他们的服务合同。我正在使用 maven-jaxb2-plugin 生成 bean 。由于我的项目中的命名冲突,我想添加 suff...
hisrc-basicjaxb (org.patrodyne.jvnet) 与 jaxb-tools (org.jvnet.jaxb)
不久前,由于 Alexey Valikov 不幸去世,maven-jaxb2-plugin 项目成为孤儿。值得庆幸的是,瑞克·奥沙利文(Rick O'Sullivan)不久后就挺身而出,并做了出色的工作......
多线程仅在 AWS ECS Docker 容器上找不到 JAXB-API
我正在使用 JAXB 在我创建的用于 Spring Boot 应用程序的库中转换和编组 XML。该应用程序在 AWS 上的 Docker 容器中运行,具有 ECS 和当前...
尝试使用 java 17 构建用 java 8 编写的 spring boot 2.7.12 项目时,即使在向 pom 添加依赖项之后,也找不到 Jaxb 类错误
当我编译我的spring项目时,出现以下错误。 创建类路径资源中定义的名为“entityManagerFactory”的 bean 时出错 [org/springframework/boot/autoconfigure/orm/jpa/
我目前正在将大型构建从 Maven 转换为 Gradle。我们有一个代码生成步骤,它使用 JAXB 从一组 XSD 生成类。在 Maven 构建中,类是通过...生成的。
我有这个对象,作为复杂对象的节点: 公共类参数实现可序列化 { @XmlElement(名称 = "键") 受保护的字符串键; @XmlElement(名称 = "值")
我有一些生成的类,看起来像这样: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "数据", propOrder = { “身体” }) @XmlRootElement(名称 = ...
与 JAXB 为给定 XSD 生成 JAXB 类类似,Jackson 是否提供任何实用程序来从 XSD 或 JSON 生成 Jackson 类。 JAXB 类生成器已为 XSD 生成了一组类...
JAXB API 的 Java 8 到 Java 11 迁移问题
我们正在将项目从 Java 8 迁移到 Java 11。其中一个 API 依赖于利用 JAXB 的库。据我们所知,JAXB 已从 JAVA 11 中删除,我们开始包含 ...
我有一个 xsd,其中有一个名为 toc 的元素在 xsd 中两次。它会导致 java 类生成错误。现在,我想编写 xml 绑定来解决这个问题。 我有一个 xsd,其中有一个名为 toc 的元素在 xsd 中两次。它会导致 java 类生成错误。现在,我想编写 xml 绑定来解决这个问题。 <jaxb:bindings schemaLocation="../DMS_Dokument.Versenden_response.xsd"> <jaxb:bindings node="xsd:element[@name='toc']"> <jaxb:factoryMethod name="TOC"/> </jaxb:bindings> </jaxb:bindings> 我得到的错误是 原因:无法解析schema。应该提供错误消息 为了避免 JAXB 从 XSD 生成重复的类,您可以使用本地或外部绑定为生成的类定义不同的名称。 <jaxb:bindings node="XPATH"> <jaxb:class name="YourDistinctName"/> </jaxb:bindings> Java 类名重复的一个原因是在全局绑定中使用 toplevel 作用域。 注意: localScoping 属性的值可以是 nested 或 toplevel。此属性描述嵌套 XML 模式组件与嵌套模式派生的 JAXB 类或顶级模式派生的 JAXB 类的 JAXB 绑定。为了避免嵌套组件之间的命名冲突,该属性的默认值是嵌套的。当模式组件嵌套太深或应用程序不希望使用嵌套类或使用 JPA 时(JPA 第 2.1 节,实体必须是顶级类),开发人员可以将 localScoping 自定义为 toplevel。 例如,下载此演示 (zip) 并考虑其 XML 架构 trilogy.xsd,该架构对 Trilogy 书籍进行建模。它在根 trilogy 元素上定义一个 TOC,并为每个 book 定义另一个 TOC。该架构将每个 TOC 定义为匿名类型,并且每个 TOC 都有不同的用途。第一个目录描述了三本书的标题,但第二个目录是每本书的章节列表。两者具有相同的元素名称 <toc>...</toc>,如该 XML 实例 trilogy.xml 所示,但需要不同的 Java 类定义。 当模式被定制为使用 <jaxb:globalBindings localScoping=”toplevel”/> 时,JAXB 会尝试根据一个元素名称生成两种类型,这会导致名称冲突。 为了解决 Java 类名重复问题,演示使用 HiSrc BasicJAXB 项目中的工具来扫描 XSD 并输出这些建议的绑定:trilogy.xjb。例如,这是书 TOC 的装订: <jaxb:bindings node="//xs:element[@name='trilogy']/xs:complexType/xs:sequence/xs:element[@name='book']/xs:complexType/xs:sequence/xs:element[@name='toc']/xs:complexType"> <jaxb:class name="TrilogyBookTocType"/> </jaxb:bindings> 绑定使用 XPATH 选择目标节点,并将 Java 类名称声明为 TrilogyBookTocType。 演示提供了一个 bash 脚本来运行该工具,但它可以像这样手动运行... java -cp \ $HOME/.m2/repository/org/patrodyne/jvnet/hisrc-basicjaxb-tools/2.1.1/hisrc-basicjaxb-tools-2.1.1.jar \ org.jvnet.basicjaxb.util.CreateToplevelXJBindings \ --nested src/main/resources/trilogy.xsd 该工具将其输出发送到 stdout,您可以在其中将其复制/粘贴到绑定文件或架构中。 执行 该演示是一个独立的 Maven 项目。您可以使用以下命令运行测试: mvn -Ptest clean test mvn -Pexec compile exec:java 方法 hisrc-higherjaxb-maven-plugin 配置为使用提供的 trilogy.xsd 模式和绑定文件 trilogy.xjb 生成 JAXB 类。该模式提供了命名空间 "http://org.example/trilogy",JAXB 使用它来使用自己的命名约定创建 Java package 名称。 作为一个选项,可以使用这些 XJC hisrc-basicjaxb-plugins 生成 Java 内置 Object 方法的更高级实现。特别是,示例项目使用 toString 插件来显示未编组的 Trilogy 对象的人类可读表示。 hisrc-basicjaxb-插件 <args> <arg>-no-header</arg> <arg>-XhashCode</arg> <arg>-Xequals</arg> <arg>-XtoString</arg> </args> 注意: 使用 XJC hisrc-basicjaxb-plugins 时,运行时类路径需要 hisrc-basicjaxb-runtime 依赖。 测试 JUnit 测试类 TrilogyTest.java 扫描示例文件并调用方法 checkSample(File sample) 将每个文件提供给测试人员。对于此项目,创建了一个 JAXBContext,并且 samples 路径中的每个文件都被 unmarshaled 为 Trilogy 对象。成功后,每个对象都会被编组以用于日志记录和您的审查。 示范 具有 main(...) 方法的 Java 标准引擎应用程序位于 org.example.trilogy.Main。该应用程序使用以下命令执行: mvn -Pexec compile exec:java -Dexec.args="src/test/samples/trilogy.xml" 免责声明:我是这些HiSrc项目的维护者。
hisrc-higherjaxb-maven-plugin 生成 xsd 文件的源代码,但不会使用 XmlElementDecl 注释 ObjectFactory 中的所有元素
这是(onvif.xsd)我尝试使用 hisrc-higherjaxb 生成源代码的模式文件。 这是我的 pom.xml 配置的一部分, org.patrodyne.jvnet&...
编译 WSDL 文件时出现错误/警告 - 但生成的 Java 源代码正常 -Java17 spring boot 3.0
我的要求 spring boot 3.0 Java 17。我的代码使用 jaxb2 插件适用于 java 1.8 spring boot 2.7.11。我已将插件更新为 jaxb30-maven-plugin。自动生成的java代码就可以了。构建是
maven-cxf-codegen-plugin 使用 Jaxb 绑定为所有生成的类添加继承
我正在使用 Apache CXF 的 cxf-codegen-plugin 将 wsdl 转换为 java 对象。我指定了一个绑定文件来添加额外的 jaxb 处理。我希望所有这些文件都从接口继承(或
如何将 xmlns:tns="http://schemas.xmlsoap.org/soap/encoding/" 添加到肥皂请求
我编写了一个调用soap服务的客户端,但它发送的请求不是我所期望的。 这是我的代码: 公共MessageResponse traGiayToHoSo(MessageRequest请求){ 留言乱七八糟...
当我们尝试执行 jaxb-object-to-xml-transformer 时,我们在 Mule ESB 中遇到 java.util.ConcurrentModificationException
在 Mule 3.9.0 中,当我们尝试使用 jaxb 将对象转换为 XML 时,我们收到以下错误 消息:null(java.util.ConcurrentModificationException) 元素...