用于XML绑定的Java体系结构是将XML用作域对象的Java标准。它提供了一种将Java类映射到XML表示的简单机制。
如何删除 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。我想要的是创建一个列表,然后将其打印到文件中,然后创建一个新列表并将其打印到同一个文件中,但每次我这样做......
Java java.lang.ClassCastException:使用 IntelliJ 生成代码时无法强制转换 javax.xml.bind.JAXBElement 异常
我已使用 IntelliJ 工具 > JAXB > 使用 JAXB 从 XML 架构生成 Java 代码从 XSD 创建了 Java 对象... 我基本上是尝试从 XSD 生成 Java 对象,然后读取 XML ...
使用 jaxws 插件从 WSDL 生成 Java 类,该类将通过 Bindigs 实现公共接口
我有以下类型的 wsdl 文件: .... .... 我有以下类型的 wsdl 文件: <xs:complexType name="someName"> .... </xs:complexType> <xs:complexType name="someOtherName"> .... </xs:complexType> 我想要实现的是让这些类型实现通用接口 public interface Test { //methods that already exist in the types } 为了实现这一点,我创建了绑定文件: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <jaxws:bindings xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance" jaxb:extensionBindingPrefixes="xjc inheritance" xmlns:xs="http://www.w3.org/2001/XMLSchema" wsdlLocation="my_wsdl.wsdl"> <enableWrapperStyle>true</enableWrapperStyle> <enableAsyncMapping>false</enableAsyncMapping> <jaxws:bindings node="//xs:complexType[@name='someName']"> <inheritance:implements>com.mycompany.package.Test</inheritance:implements> </jaxws:bindings> </jaxws:bindings> 还配置了插件: <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>${jaxws-maven-plugin.version}</version> <dependencies> <dependency> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics</artifactId> <version>0.6.4</version> </dependency> </dependencies> <executions> <execution> <id>wsdl</id> <goals> <goal>wsimport</goal> </goals> <configuration> <xjcArgs> <xjcArg>-Xinheritance</xjcArg> <xjcArg>-Xequals</xjcArg> <xjcArg>-XtoString</xjcArg> </xjcArgs> <genJWS>true</genJWS> <bindingDirectory>${basedir}/src/main/resources/soap</bindingDirectory> <bindingFiles> <bindingFile>binding.xjb</bindingFile> </bindingFiles> <xnocompile>true</xnocompile> <xdebug>true</xdebug> <verbose>true</verbose> <wsdlUrls> <wsdlUrl>${project.basedir}/src/main/resources/soap/my_wsdl.wsdl</wsdlUrl> </wsdlUrls> <sourceDestDir>target/generated-sources/soap</sourceDestDir> </configuration> </execution> </executions> <extensions>true</extensions> </plugin> 旗帜 <xjcArg>-Xequals</xjcArg> <xjcArg>-XtoString</xjcArg> 已考虑在内,我生成的类具有以下签名: public class SomeName implements ToString, Equals{...} 但是,即使考虑到 -Xinheritance 选项(在我添加对 jaxb2-basics 的依赖之前,它抱怨未知选项),也不会对代码生成产生任何影响。 绑定中的 XPath 是正确的,并且考虑了绑定 例如,如果代替 <inheritance:implements>com.mycompany.package.Test</inheritance:implements> 我提供: <jaxb:class name="changedName"/> 类将以更改的名称生成,但它们仍然不会实现我想要的接口。 您知道哪里出了问题吗? 我怀疑问题出在绑定文件上,但我无法确定确切的位置。 您可以尝试关注官方存储库中有关继承插件的wiki页面。 据我所知,主要区别是绑定中使用的 jaxws/jaxb 前缀。 您还可以尝试使用 -X -e 选项在 Maven 构建中添加额外的调试,以在类生成期间查看调试输出。 您可以按照此迁移指南了解如何获取最新版本的 jaxb-tools,该工具现已全部合并到同一位置。 如果仍然不起作用,请回来,我会更深入地研究,如果有必要,我会在 jaxb-tools 的 github 存储库中创建一个问题
使用 jaxb 从 XSD 生成 getter/setter JavaDoc
我正在使用 jaxb-maven-plugin 从 XSD 文件生成带有 XML 绑定的 Java 代码。虽然它通常工作得很好,但生成的 setter 和 getter 的 JavaDoc 缺少文档......
迁移到 java17.So 将包移至 Jakarta.*。 版本: jakarta.xml.bind-api = 4.0.0 , com.sun.xml.bind/jaxb-impl = 2.0.1 现在面临的问题是: jakarta.xml.bind.PropertyException:名称:com....