jaxb 相关问题

用于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”参数。当我添加 贾克斯贝...

回答 2 投票 0

JAXB-XJC:为 jaxb2-maven-plugin 生成的所有类添加必需的参数构造函数

有没有办法为 org.codehaus.mojo:jaxb2-maven-plugin 添加必需的参数构造函数? 我找到了 org.jvnet.jaxb2_commons:jaxb2-value-constructor 但它只能生成所有参数构造函数...

回答 1 投票 0

在 CompletableFuture.runAsync(() -> {}

在将 JAXB-API 与 CompletableFuture.runAsync 一起使用时,会出现找不到模块的错误,而如果我在没有 CompletableFuture 的情况下使用相同的函数,它工作正常 那么,你在这里有任何依赖吗...

回答 1 投票 0

无法使用 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,因为该插件在最新版本中被重命名(查看迁移指南)

回答 1 投票 0

如何使用 jaxb2-maven-plugin 向 jaxb 生成的 java beans 添加后缀

我从第三方导入了 xsd 和 wsdl 作为他们的服务合同。我正在使用 maven-jaxb2-plugin 生成 bean 。由于我的项目中的命名冲突,我想添加 suff...

回答 1 投票 0

hisrc-basicjaxb (org.patrodyne.jvnet) 与 jaxb-tools (org.jvnet.jaxb)

不久前,由于 Alexey Valikov 不幸去世,maven-jaxb2-plugin 项目成为孤儿。值得庆幸的是,瑞克·奥沙利文(Rick O'Sullivan)不久后就挺身而出,并做了出色的工作......

回答 1 投票 0

多线程仅在 AWS ECS Docker 容器上找不到 JAXB-API

我正在使用 JAXB 在我创建的用于 Spring Boot 应用程序的库中转换和编组 XML。该应用程序在 AWS 上的 Docker 容器中运行,具有 ECS 和当前...

回答 1 投票 0

尝试使用 java 17 构建用 java 8 编写的 spring boot 2.7.12 项目时,即使在向 pom 添加依赖项之后,也找不到 Jaxb 类错误

当我编译我的spring项目时,出现以下错误。 创建类路径资源中定义的名为“entityManagerFactory”的 bean 时出错 [org/springframework/boot/autoconfigure/orm/jpa/

回答 1 投票 0

从 XSD 生成没有命名空间的类

我目前正在将大型构建从 Maven 转换为 Gradle。我们有一个代码生成步骤,它使用 JAXB 从一组 XSD 生成类。在 Maven 构建中,类是通过...生成的。

回答 1 投票 0


JaxB 编组键、值对,其中值可以是另一个键、值对

我有这个对象,作为复杂对象的节点: 公共类参数实现可序列化 { @XmlElement(名称 = "键") 受保护的字符串键; @XmlElement(名称 = "值")

回答 1 投票 0

使用 JAXB 解组 XML

我有一些生成的类,看起来像这样: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "数据", propOrder = { “身体” }) @XmlRootElement(名称 = ...

回答 1 投票 0

Jackson:从 XSD 生成 Jackson 类

与 JAXB 为给定 XSD 生成 JAXB 类类似,Jackson 是否提供任何实用程序来从 XSD 或 JSON 生成 Jackson 类。 JAXB 类生成器已为 XSD 生成了一组类...

回答 1 投票 0

JAXB API 的 Java 8 到 Java 11 迁移问题

我们正在将项目从 Java 8 迁移到 Java 11。其中一个 API 依赖于利用 JAXB 的库。据我们所知,JAXB 已从 JAVA 11 中删除,我们开始包含 ...

回答 2 投票 0

JAXB 避免从 XSD 生成重复类

我有一个 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项目的维护者。

回答 1 投票 0

hisrc-higherjaxb-maven-plugin 生成 xsd 文件的源代码,但不会使用 XmlElementDecl 注释 ObjectFactory 中的所有元素

这是(onvif.xsd)我尝试使用 hisrc-higherjaxb 生成源代码的模式文件。 这是我的 pom.xml 配置的一部分, org.patrodyne.jvnet&...

回答 1 投票 0

编译 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代码就可以了。构建是

回答 1 投票 0

maven-cxf-codegen-plugin 使用 Jaxb 绑定为所有生成的类添加继承

我正在使用 Apache CXF 的 cxf-codegen-plugin 将 wsdl 转换为 java 对象。我指定了一个绑定文件来添加额外的 jaxb 处理。我希望所有这些文件都从接口继承(或

回答 2 投票 0

如何将 xmlns:tns="http://schemas.xmlsoap.org/soap/encoding/" 添加到肥皂请求

我编写了一个调用soap服务的客户端,但它发送的请求不是我所期望的。 这是我的代码: 公共MessageResponse traGiayToHoSo(MessageRequest请求){ 留言乱七八糟...

回答 1 投票 0

当我们尝试执行 jaxb-object-to-xml-transformer 时,我们在 Mule ESB 中遇到 java.util.ConcurrentModificationException

在 Mule 3.9.0 中,当我们尝试使用 jaxb 将对象转换为 XML 时,我们收到以下错误 消息:null(java.util.ConcurrentModificationException) 元素...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.