jaxb 相关问题

用于XML绑定的Java体系结构是将XML用作域对象的Java标准。它提供了一种将Java类映射到XML表示的简单机制。

为什么 @JsonIgnore 的存在会影响 XML 编组?

我有一个公共类,其中包含使用 JAXB 编组/解组 XML 的字段以及使用 Jackson 库序列化/反序列化 JSON 的字段。其中一个字段类型具有

回答 1 投票 0

com.sun.istack.SAXException2:实例...正在替换“java.lang.Object”,但是...绑定到匿名类型

我正在将项目从版本 1.x 升级到 jaxb 2.2.7。 我的应用程序有时可以运行,但在一些回复中我看到了这一点: java.lang.RuntimeException:javax.xml.bind.MarshalException - ...

回答 4 投票 0

迁移Jave 11_如何解决:java.lang.ClassNotFoundException:javax.activation.MimeTypeParseException

我正在将我的java项目从8版本迁移到11版本。 由于 javax.activation 已从 JDK 11 中删除,因此我将其添加到 Maven pom.xml 文件中: javax.activation 我正在将我的 Java 项目从 8 迁移到 11 版本。 由于 javax.activation 已从 JDK 11 中删除,所以我将其添加到 Maven pom.xml 文件中: <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> 依赖项列在“Externat librairies”中,但每次我运行“mvn clean install”来构建我的项目时,我都会收到此错误: ... Caused by: java.lang.ClassNotFoundException: javax.activation.MimeTypeParseException at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50) at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239) ... 51 more 请问你有什么想法吗? 谢谢 遗憾的是 @lexicore 不再在这里回答,但是 maven-jaxb2-plugin (由于与其他相关的 jaxb 项目合并而更名为 jaxb-tools)仍然(并返回)正在积极开发中,现在支持 jdk11以及jdk17甚至jdk21。 对 jaxb-jakarta 的支持也还可以(jaxb3 和 jaxb4) 您可以查看迁移指南以根据目标jaxb版本获取可用的最新版本。

回答 1 投票 0

防止 Spring JAXB 上的字符转义

我在 SOAP 请求中使用 String 类作为请求对象类型。 我需要禁用 JAXB 转义并编写如下代码: @豆 公共 Jaxb2Marshaller jaxb2Marshaller() { Jaxb2Marshaller

回答 1 投票 0

为什么 jaxb 创建一个用于转换数据类型的适配器

我有一个项目要升级到 jakarta 10。pom 看起来像这样 我有一个项目要升级到 jakarta 10。pom 看起来像这样 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>xxxx</artifactId> <groupId>xx.xxx.xxx</groupId> <version>1.1-SNAPSHOT</version> </parent> <artifactId>xx.xx.xxxx</artifactId> <packaging>jar</packaging> <dependencies> ....... <dependency> <groupId>jakarta.validation</groupId> <artifactId>jakarta.validation-api</artifactId> <version>${validation-api.version}</version> </dependency> <dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>${jaxb-api.version}</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>4.0.3</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.jvnet.jaxb</groupId> <artifactId>jaxb-plugins</artifactId> <version>${jaxb2-plugins.version}</version> </dependency> <dependency> <groupId>org.jvnet.jaxb</groupId> <artifactId>jaxb-plugins-runtime</artifactId> <version>${jaxb2-plugins.version}</version> </dependency> <dependency> <groupId>org.jvnet.jaxb</groupId> <artifactId>jaxb-plugin-annotate</artifactId> <version>${jaxb2-plugins.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.wiremock</groupId> <artifactId>wiremock-standalone</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxb2-maven-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>partaggregat-v2-jaxb</id> <phase>process-resources</phase> <goals> <goal>xjc</goal> </goals> <configuration> <sources> <source>${basedir}/src/main/resources/xsd</source> </sources> <xjbSources> <xjbSource>${basedir}/src/main/resources/xjb/bindings.xjb</xjbSource> </xjbSources> <arguments> <argument>-Xfluent-api</argument> <argument>-Xannotate</argument> <argument>-Xequals</argument> <argument>-XhashCode</argument> </arguments> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-xjc</artifactId> <version>4.0.4</version> </dependency> <dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>${jaxb-api.version}</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>4.0.4</version> </dependency> <dependency> <groupId>jakarta.activation</groupId> <artifactId>jakarta.activation-api</artifactId> <version>2.1.2</version> </dependency> <dependency> <groupId>org.jvnet.jaxb</groupId> <artifactId>jaxb-plugins</artifactId> <version>4.0.3</version> </dependency> <dependency> <groupId>org.jvnet.jaxb</groupId> <artifactId>jaxb-plugin-annotate</artifactId> <version>4.0.3</version> </dependency> </dependencies> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxb2-maven-plugin</artifactId> </plugin> </plugins> 和绑定 <?xml version="1.0" encoding="UTF-8"?> <jaxb:bindings xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:annox="urn:jaxb.jvnet.org:annox" jaxb:extensionBindingPrefixes="xjc annox" xsi:schemaLocation="https://jakarta.ee/xml/ns/jaxb https://jakarta.ee/xml/ns/jaxb/bindingschema_3_0.xsd" version="3.0"> <jaxb:globalBindings typesafeEnumMaxMembers="600"> <jaxb:serializable uid="1" /> <jaxb:javaType name="java.time.Year" xmlType="xs:gYear" parseMethod="com.somewhere.someotherstuff.client.utils.JsonYearAdapter" /> <jaxb:javaType name="java.time.LocalDate" xmlType="xs:date" parseMethod="com.somewhere.someotherstuff.client.utils.JsonLocalDateAdapter" /> <jaxb:javaType name="java.time.LocalDateTime" xmlType="xs:dateTime" parseMethod="com.somewhere.someotherstuff.client.utils.JsonLocalDateTimeAdapter" /> </jaxb:globalBindings> <jaxb:bindings schemaLocation="../xsd/com.someplace.someotherthing.somename.v2.2.xsd" node="/xs:schema"> <jaxb:bindings> <jaxb:schemaBindings> <jaxb:package name="com.someplace.someotherthing.somename.v2" /> </jaxb:schemaBindings> </jaxb:bindings> </jaxb:bindings> </jaxb:bindings> 我注意到在 org.w3._2001.xmlschema 包下的目标文件夹中创建了与三个 javatype 相对应的三个类(Adapter1、Adapter2 和 Adapter3)。为了解决这个问题,我添加了这个问题中提到的解决方案,该解决方案有效。 这里的问题是,对于 jaxb version2,未创建三个 Adapter1,2,3 类,我不明白为什么当我在 binding.xjb 文件中传递了我自己的适配器类时创建了它们。 课程是这样的 package com.someplace.someotherthing.somename.v2; import java.time.LocalDateTime; import jakarta.xml.bind.annotation.adapters.XmlAdapter; public class Adapter1 extends XmlAdapter<String, LocalDateTime> { public LocalDateTime unmarshal(String value) { return (com.somewhere.someotherstuff.client.utils.JsonLocalDateTimeAdapter(value)); } public String marshal(LocalDateTime value) { if (value == null) { return null; } return value.toString(); } } 为什么 jaxb 会生成这些Adapter类? 干杯 是 问题是你似乎使用jaxb:javaType而不是xjc:javaType 而不是使用以下语法 <jaxb:javaType name="java.time.Year" xmlType="xs:gYear" parseMethod="com.somewhere.someotherstuff.client.utils.JsonYearAdapter" /> <jaxb:javaType name="java.time.LocalDate" xmlType="xs:date" parseMethod="com.somewhere.someotherstuff.client.utils.JsonLocalDateAdapter" /> <jaxb:javaType name="java.time.LocalDateTime" xmlType="xs:dateTime" parseMethod="com.somewhere.someotherstuff.client.utils.JsonLocalDateTimeAdapter" /> 你应该尝试类似的事情 <xjc:javaType name="java.time.Year" xmlType="xs:gYear" adapter="com.somewhere.someotherstuff.client.utils.JsonYearAdapter" /> <xjc:javaType name="java.time.LocalDate" xmlType="xs:date" adapter="com.somewhere.someotherstuff.client.utils.JsonLocalDateAdapter" /> <xjc:javaType name="java.time.LocalDateTime" xmlType="xs:dateTime" adapter="com.somewhere.someotherstuff.client.utils.JsonLocalDateTimeAdapter" /> 具有 xjc 命名空间如下:xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"

回答 1 投票 0

将java版本从java 8更改为java 17后,无法执行目标org.jvnet.jaxb2.maven2

这些是我将java版本从java 8更改为java 17后遇到的与jaxb相关的错误。 构建失败 [信息] 完成于:2024-02-22T18:46:54+05:30 [信息] [错误] 失败

回答 1 投票 0

在独立应用程序中支持 Jersey Client 中的 XML

我有一个独立的应用程序,它连接到 RESTful API,如下所示: 客户端 client = ClientBuilder.newClient(); WebTarget target = client.target(hostWithPort).path(apiConfig.getUrl()); 创造...

回答 2 投票 0

jaxb.index 和嵌套类(和 OSGi)

当我尝试引用 jaxb.index 文件中的嵌套类时,序列化期间会引发异常。如何避免这种情况? 这是在 Eclipse RCP 应用程序中。导致

回答 2 投票 0

如何扩展 glassfish jaxb NamespacePrefixMapper 并设置为 Marshaller 属性

我将 Spring boot 3 与 Java 17 结合使用,并设置 com.sun.xml.bind.namespacePrefixMapper 属性,如下所示, 最终 JAXBContext jaxbContext = JAXBContext.newInstance(t.getClass()); ...

回答 1 投票 0

JAXB 不会从 XSD 简单类型生成枚举类

我的 JAXB XSD 到 Java 类生成器不知何故没有从包含枚举的简单类型创建类,如下所示: 我的 JAXB XSD 到 Java 类生成器不知何故没有从包含枚举的简单类型创建类,就像这样: <xsd:element name="MyPriorityEnum"> <xsd:simpleType final="restriction"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="NORMAL" /> <xsd:enumeration value="LOW" /> <xsd:enumeration value="HIGH" /> </xsd:restriction> </xsd:simpleType> </xsd:element> 我的build.gradle包含以下生成类的任务: def myXsd = "myxsd-v5.xsd" def myOutput = "$buildDir/generated/jaxb/model/src/main/java" tasks.register('generateSources') { doLast { def jaxbTargetDir = file("$myOutput") if (!jaxbTargetDir.exists()) { jaxbTargetDir.mkdirs() } ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.jaxb.asPath) ant.xjc( destdir: "${jaxbTargetDir}", schema: "${rootDir}/src/main/resources/xsd/${myXsd}", removeOldOutput: 'yes', extension: 'true' ) { arg(line: '-nv -disableXmlSecurity') } } } tasks.compileJava.dependsOn tasks.openApiGenerate, tasks.generateSources 我正在为所有 JAXB 依赖项使用最新版本,2.3.1。这可能是xjc的问题吗? 独立于 jaxb 版本/使用的插件/工具,我可以使用此 xsd 重现问题: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="MyPriorityEnum"> <xsd:simpleType final="restriction"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="NORMAL" /> <xsd:enumeration value="LOW" /> <xsd:enumeration value="HIGH" /> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:schema> ...但不能这样: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="https://my.org.com/foo/blahr" targetNamespace="https://my.org.com/foo/blahr" elementFormDefault="qualified"> <xsd:element name="MyPriorityEnum" type="tns:MyEnumType" /> <xsd:simpleType name="MyEnumType" final="restriction"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="NORMAL" /> <xsd:enumeration value="LOW" /> <xsd:enumeration value="HIGH" /> </xsd:restriction> </xsd:simpleType> </xsd:schema> ...这意味着它可以工作:xjc 生成枚举类型。 最显着的区别是从“嵌套简单类型”到“引用简单类型”......(?)

回答 1 投票 0

JAXB:将命名空间添加到第二级

我想将命名空间 urn:com.workday/bsvc 添加到我生成的 xml 中的第二个元素。 这就是我想要生成的: 但我不知道如何在课堂上指定它。 我将其添加到我的 cl...

回答 1 投票 0

使用外来字符编组 XML 需要实体声明

我有两个必须协同工作的应用程序。一个是我使用 Java 17 自己构建的应用程序,另一个是我无法控制的应用程序,一个使用 Jav...

回答 1 投票 0

jakarta.xml.bind.JAXBException:此上下文已知类 com.poc.consumingwebservice.wsdl.GetCountryRequest 及其任何超类

按照链接 https://spring.io/guides/gs/consuming-web-service/ 使用 SOAP we b 服务。它适用于 spring boot 2.7.12 和 java 11。 我已经将spring boot升级到3.1.0和java ...

回答 1 投票 0

如何删除 JAXB 写入文件中重复元素上的空 xmlns="" ?

我有数据对象被编组到 xml 并写入文件。 所有对象都是用 xjc 生成的,因此无法更改对象、package-info.java 等。 MainElem 包含一个列表

回答 1 投票 0

如何制作具有父子关系的JAXB类

我在使用 JAXB / XJC 父子父导航创建用于父子关系的 JAXB 类时遇到问题 我认为实现 void afterUnmarshal(Unmarshaller, Object Parent)。应该...

回答 1 投票 0

使用 Spring Boot 将自定义 Http 标头添加到 SOAP 请求

我正在尝试调用 Azure API 管理器上的 SOAP API。为了调用 API,我需要将 API 订阅代码添加到请求的标头中。我不知道如何添加 HTTP

回答 1 投票 0

javax.xml.bind.UnmarshalException:意外元素(uri:“”,本地:“Group”)

我在从 XML 解组时遇到异常: 意外元素(uri:“”,本地:“组”)。预期元素是 <{}group> 组类没有注释并且...

回答 16 投票 0

无法从 XML 创建 POJO,引用链中存在问题

我收到来自 Web 服务的 XML 响应,但无法将其转换为 POJO。 将容纳数据的类就是这个类。 公共类ApaData { 私有字符串流程代码;

回答 1 投票 0

JAXB 无法从soap (WSDL) 服务获取附件

我需要调用返回附件的 SOAP 服务。 定义“附加”数据的 XSD 是 我需要调用返回附件的 SOAP 服务。 定义“附加”数据的 XSD 是 <xs:complexType name="transferableFileData"> <xs:complexContent> <xs:extension base="tns:transferableFile"> <xs:sequence> <xs:element name="fileData" type="xs:base64Binary" minOccurs="0"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> 我在 pom.xml 文件中使用此插件从 WSDL 和 XSD 文件生成类 <plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.15.1</version> </plugin> 自动生成的类是这样的 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "transferableFileData", propOrder = { "fileData" }) public class TransferableFileData extends TransferableFile { protected byte[] fileData; public byte[] getFileData() { return fileData; } public void setFileData(byte[] value) { this.fileData = value; } } 服务器的响应是: Cache-Control: max-age=0 Cache-Control: no-cache Cache-Control: no-store Server-Timing: ak_p; desc="1705942361025_1611673733_335963847_52691_3577_46_71_-";dur=1 Server-Timing: origin; dur=520 Server-Timing: edge; dur=7 Server-Timing: cdn-cache; desc=MISS Connection: keep-alive Set-Cookie: LtpaToken2=Jss03JN+gXMYTd; Path=/; HttpOnly Expires: Mon Expires: 22 Jan 2024 16:52:41 GMT Pragma: no-cache Content-Length: 2912 Content-Language: en-US Date: Mon Date: 22 Jan 2024 16:52:41 GMT Content-Type: Multipart/Related; boundary="----=_Part_11_2001319686.1705942360849"; type="application/xop+xml"; start-info="text/xml" SOAPAction: "" Accept: text/xml ------=_Part_11_2001319686.1705942360849 Content-Type: application/xop+xml; charset=utf-8; type="text/xml" Content-Transfer-Encoding: binary Content-ID: <[email protected]> <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns2:downloadPendingFileResponse xmlns:ns2="http://iris.somewhere.cp,/web_services/external/downloadFile" xmlns:ns3="http://iris.somewhere.com/web_services/external/uploadFile"><downloadPendingFileResult><fileExchangeNo>1174649</fileExchangeNo><fileName>TEST00001_2024-01-22-18.46.08.00000_APA.zip</fileName><fileData><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:[email protected]"/></fileData></downloadPendingFileResult></ns2:downloadPendingFileResponse></soapenv:Body></soapenv:Envelope> ------=_Part_11_2001319686.1705942360849 Content-Type: application/octet-stream Content-Transfer-Encoding: binary Content-ID: <[email protected]> � ������f��G��v�+p�,���� ��K�ɁZt �K�>b�La���^m��_э���1$�t�dqV�A;�ف� F�K�� ��ކO�X![ 我的Java代码是这样的: if (response instanceof JAXBElement) { DownloadPendingFileResponse downloadPendingFileResponse = ((JAXBElement<DownloadPendingFileResponse>) response).getValue(); if(downloadPendingFileResponse == null) { 及以后 final TransferableFileData transferableData = response.getDownloadPendingFileResult(); ... byte[] bytes = transferableData.getFileData(); log.info("length {}", bytes.length); 但是长度始终为零。看来我无法正确获取文件。 我注意到 WSDL 将 fileData 元素定义为 base64Binary,而 POJO 将它们定义为 byte[]。数据流似乎没有被整理。知道如何解决这个问题吗? 我在 WSDL 服务上获得了完全相同的 XSD <complexType name="myType"> <sequence> ... <element name="myFile" type="xsd:base64Binary"/> ... </sequence> </complexType> 这由 org.apache.cxf:cxf-codegen-plugin : 生成 @XmlElement(required = true) protected byte[] myFile; 但是为了进行解组,我必须将 XSLT 设置为 jaxws:feature spring 客户端,以便告诉 CXF 理解响应中的 href(文件 transform.xsl 的内容如下): <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" > <xsl:key name="multiref-by-id" match="multiRef" use="@id"/> <xsl:template match="/"> <xsl:copy> <xsl:apply-templates select="@*|*"/> </xsl:copy> </xsl:template> <xsl:template match="*[starts-with(@href, '#')]"> <xsl:copy> <xsl:apply-templates select="@* | key('multiref-by-id', substring-after(@href, '#'))/@* | key('multiref-by-id', substring-after(@href, '#'))/node()"/> </xsl:copy> </xsl:template> <xsl:template match="@href[starts-with(., '#')] | multiRef[@id] | @soapenc:root"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> 这是在 XML Spring Config 中定义的 bean : <bean id="xsltFeature" class="org.apache.cxf.feature.transform.XSLTFeature"> <property name="inXSLTPath" value="transform.xsl" /> <property name="outXSLTPath" value="transform.xsl" /> </bean> <jaxws:client id="myService" serviceClass="my.web.Service" address="myurl"> <jaxws:features> <ref bean="xsltFeature" /> </jaxws:features> </jaxws:client> 通过这样做,我可以通过Java中的myFile的getter读取附件的内容,而无需额外的配置。 我认为您可以对其进行调整,以使其在您自己的应用程序上下文中工作。

回答 1 投票 0

Java、WSDL 生成的类无法转换为 javax.xml.bind.JAXBElement

我在调用 Web 服务后返回 javax.xml.bind.JAXBElementException。 JAXBElement jAXBElement = new ObjectFactory().createShowPendingFiles(showPendingFilesRe...

回答 1 投票 0

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