用于XML绑定的Java体系结构是将XML用作域对象的Java标准。它提供了一种将Java类映射到XML表示的简单机制。
我的 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 生成枚举类型。 最显着的区别是从“嵌套简单类型”到“引用简单类型”......(?)
我想将命名空间 urn:com.workday/bsvc 添加到我生成的 xml 中的第二个元素。 这就是我想要生成的: 但我不知道如何在课堂上指定它。 我将其添加到我的 cl...
我有两个必须协同工作的应用程序。一个是我使用 Java 17 自己构建的应用程序,另一个是我无法控制的应用程序,一个使用 Jav...
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 ...
如何删除 JAXB 写入文件中重复元素上的空 xmlns="" ?
我有数据对象被编组到 xml 并写入文件。 所有对象都是用 xjc 生成的,因此无法更改对象、package-info.java 等。 MainElem 包含一个列表
我在使用 JAXB / XJC 父子父导航创建用于父子关系的 JAXB 类时遇到问题 我认为实现 void afterUnmarshal(Unmarshaller, Object Parent)。应该...
使用 Spring Boot 将自定义 Http 标头添加到 SOAP 请求
我正在尝试调用 Azure API 管理器上的 SOAP API。为了调用 API,我需要将 API 订阅代码添加到请求的标头中。我不知道如何添加 HTTP
javax.xml.bind.UnmarshalException:意外元素(uri:“”,本地:“Group”)
我在从 XML 解组时遇到异常: 意外元素(uri:“”,本地:“组”)。预期元素是 <{}group> 组类没有注释并且...
我收到来自 Web 服务的 XML 响应,但无法将其转换为 POJO。 将容纳数据的类就是这个类。 公共类ApaData { 私有字符串流程代码;
我需要调用返回附件的 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读取附件的内容,而无需额外的配置。 我认为您可以对其进行调整,以使其在您自己的应用程序上下文中工作。
Java、WSDL 生成的类无法转换为 javax.xml.bind.JAXBElement
我在调用 Web 服务后返回 javax.xml.bind.JAXBElementException。 JAXBElement jAXBElement = new ObjectFactory().createShowPendingFiles(showPendingFilesRe...
Jakarta 和 javax JAXB 包可以在同一个项目中共存吗?
我的项目中有两个库: 库 A 依赖于旧的 XML 绑定库 javax.xml.bind... 库 B 依赖于新的 XML 绑定库 jakarta.xml.bind... <
Wsdl2Java 生成带有 protected List 的类<JAXBElement<?>> content
我们正在尝试与 https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/taiif/wsdl/ixgd/DpiNtnlDeclaration_v1.0.wsdl 中发布的服务集成 我们已经配置了我们的 g...
当没有命名空间时,通过声明类型进行的 jaxb 解组不起作用
我正在为 VAST 文档构建一个解析器,这些文档是 XML 文档,有一个官方 XSD,有几个版本:https://github.com/InteractiveAdvertisingBureau/vast/tree/master 我...
我使用 Maven 启动项目时出现以下错误(干净验证): [错误] it.bper.testing.integration.LocalStorageFoldersIT.testLocalStorageFoldersTimeout -- 已用时间:9.049 秒 <<...
如何在没有中间容器类的情况下使用jaxb映射各种类型的对象列表?
我有这个架构: 我有这个架构: <xs:element name="document" type="Document/> <xs:complexType name="Document"> <xs:sequence> <xs:element name="description" type="xs:string" minOccurs="0"/> <xs:element name="destination" type="xs:string" minOccurs="0"/> <xs:element name="tags" type="TagList" minOccurs="0"/> </xs:sequence> </xs:complexType> <xs:complexType name="TagList"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:any processContents="lax" namespace="http://www.example.com/schema/tags"/> </xs:choice> </xs:complexType> 此架构支持以下 XML: <document> <description>the description</description> <destination>the destination</destination> <tags> <tagA> <propA1>...</propA1> <propA2>...</propA2> ... </tagA> <tagB> <propB1>...</propB1> <propB2>...</propB2> ... </tagB> ... </tags> </document> 由 tags 表示的列表包含 0+ 个在单独模式中定义的各种标签类型的元素。 当我使用 xjc 从该模式生成 Java 类时,我得到以下输出: public class Document { private String description; private String destination; private TagsList tags; // getter/setter } public class TagsList { private List<Object> any; // getter/setter } 这意味着我必须输入 document.getTags().getAny() 才能访问标签项。有没有办法生成一个直接包含 DocumentClass 字段作为 tags 的 List<Object>,如下所示: public class Document { private String description; private String destination; private List<Object> tags; // getter/setter } 注意:在 choice 中从 sequence 更改为 TagsList 没有区别。 根据您从 XSD 生成 Java 类的方式,您应该尝试添加可用的现有 XEW 插件之一(这是撰写本文时最先进的插件:https://github.com/dmak/jaxb-xew-插件) 我建议您阅读文档以便做您想做的事情。 这是基于 jaxb-tools maven-plugin 的示例配置: <plugin> <groupId>org.jvnet.jaxb</groupId> <artifactId>jaxb-maven-plugin</artifactId> <version>correct version according targeted JAXB api</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>generate</goal> </goals> <configuration> <extension>true</extension> <args> <arg>-Xxew</arg> </args> <plugins> <plugin> <groupId>com.github.jaxb-xew-plugin</groupId> <artifactId>jaxb-xew-plugin</artifactId> <version>correct version according JAXB api</version> </plugin> </plugins> </configuration> </execution> </executions> </plugin>
在 Java 中使用 JAXB 从 XML 反序列化 HashMap
这是我的 XML 内容: 我自己制作的,所以我可以改变它,只是发现这个结构适合我的数据。 道具 ...
Jaxb2Marshaller 与 Spring boot 3+ 和 Jaxb 4 兼容吗?
我正在将我的项目从 Spring Boot 2.7 升级到 Spring Boot 3.1。在这个项目中仍然使用 SOAP,因此我们依赖 Jaxb 和 spring WS。 我正在使用 com.helger.maven 生成 Java 类:
我有一个 XmlRootElement(name = "Entity"),其中包含一个已知的 XmlElement(name = "Header") 和另一个名称未知的 XmlElement,但已知它有一个内部 XmlElemen...
我正在尝试使用 JaxB 将我创建的对象编组为 XML。我想要的是创建一个列表,然后将其打印到文件中,然后创建一个新列表并将其打印到同一个文件中,但每次我这样做......