Tag: jaxb

JAXB解组XML类强制转换exception

我正在使用这个JAXB Collection Generics解组我的字符串xml并返回List类型。 这是我使用的方法。 public static List unmarshalCollection(Class cl, String s) throws JAXBException { return unmarshalCollection(cl, new StringReader(s)); } public static List unmarshalCollection(Class cl, Reader r) throws JAXBException { return unmarshalCollection(cl, new StreamSource(r)); } private static List unmarshalCollection(Class cl, Source s) throws JAXBException { JAXBContext ctx = JAXBContext.newInstance(JAXBCollection.class, cl); Unmarshaller u = ctx.createUnmarshaller(); JAXBCollection collection […]

如何排除Maven插件的直接依赖关系

我想排除Maven插件的直接依赖,并且此答案中描述的方法不起作用(如本评论所示 )。 作为一个特例: org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.13.2 org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.13.2 javax.xml.bind jaxb-api 我仍然在依赖项列表中看到javax.xml.bind:jaxb-api (使用mvn … -X )。 我究竟做错了什么? (如果有人知道如何用该API的JDK 9等效替换该工件的依赖性[似乎发生在Java 8上,其中“JAXB API os从[jar:… jre / lib]加载/rt.jar]“],我很高兴为此开一个新问题。) 更新 想法用完了,这仍然是一个实验,我通过在我的本地存储库中编辑插件的pom.xml来排除依赖。 现在mvn … -X显示我还可以使用上面的机制成功排除间接依赖(在本例中为org.jvnet.jaxb2.maven2:maven-jaxb22-plugin )。 只使用maven-jaxb2-plugin和maven-jaxb22-plugin两种排除方法都不行。 这表明排除一般起作用,但显然不是插件的直接依赖。 (顺便说一句,这确实导致“Java JAXB API从[jrt:/java.xml.bind]”加载,这是我的目标。)

抑制JAXB生成的类上的编译器警告

这可能是这个问题的重复( 避免编译器对xjc生成的代码的警告 ),但由于我不太熟悉XJC / JAXB自定义绑定的特性,我可能会认为我可能误解了上述问题。 我的问题看起来很简单 – 如何在生成的JAXB类中添加@SuppressWarnings(“all”)注释? 我们的项目有0个警告政策,在JAXB生成步骤之后,我们最终会发出350多个警告,这些警告只是可怕的噪音。 我希望XJC上有一个简单的标志,或者至少是提供这些信息的简单方法,但我找不到任何。 从我在旅行中看到的情况来看,人们会做以下事情之一: @ lexicore的JAXB2 Annotate插件 ,根据示例,它似乎可以完成这项工作,但是添加一个完整的框架和数百KB的代码只是为了向一堆类添加简单的注释? 真??, 自定义JAXB绑定(我可能会弄错,但这看起来很神秘,我不完全确定它是否有可能以这种方式执行), 自定义ANT目标,它将在JAXB后生成搜索和替换, Eclipse 4+似乎可以选择过滤掉所选项目的警告,但出于各种历史/遗留原因,我们仍然坚持使用Eclipse 3.7.2(Indigo), 可以进行注释插入的自定义XJC插件(如其中一位评论者所建议的,请参见此处 ), 将所有生成的类放在JAR中,使JAR成为项目的依赖项,然后完全删除生成的代码。 以前,我们通过在单独的Eclipse项目中推送与XML相关的代码然后禁用项目上的警告/错误来解决这个问题。 现在,作为代码整合/重构的一部分,我们已经重新调整了一些东西,不再拥有这种奢侈品。 对于这样一个看似微不足道的问题,真的没有优雅的解决方案吗? 任何反馈/想法都非常感谢。 FWIW,我们的项目使用Ant作为构建系统。

使用JAXB编组/解组Java超类和子类

我一直在试验JAXB教程,并设法让代码工作,从Java对象生成XML文件,然后能够使用XML生成Java对象。 目前,它会读取同一个类的多个实例,以创建类似于下面的XML文件 TR54 red 5 BN04 THY yellow 3 BN05 THY yellow 5 我希望能够使用JAXB技术来处理子类。 例如:假设我有一个Car,Van和Bicycle对象是Vehicle的子类。 我是否可以操作我的JAXB类来编写一个XML文件来生成与此类似的东西? 我已经提供了我正在使用的代码。 TR54 red 5 MN05 RFD red 5 ZX54 UJK red 1 主类 package basictransport2; public class Main { public static void main(String[] args) { JAXB parser = new JAXB(); parser.marshall(); //parser.unmarshallList(); } } 车辆类 package basictransport2; import javax.xml.bind.annotation.XmlElement; […]

避免在anyElement上重复使用名称空间定义

当此对象具有@XmlAnyElement属性时,我首先在解组然后编组对象时遇到奇怪的JAXB命名空间行为。 这里设置: package-info.java @XmlSchema( namespace = “http://www.example.org”, elementFormDefault = XmlNsForm.QUALIFIED, xmlns = { @javax.xml.bind.annotation.XmlNs(prefix = “example”, namespaceURI = “http://www.example.org”) } ) 类型定义: @XmlRootElement @XmlType(namespace=”http://www.example.org”) public class Message { private String id; @XmlAnyElement(lax = true) private List any; public String getId() { return id; } public void setId(String id) { this.id = id; } public List […]

泽西rest服务显示exceptionjavax.ws.rs.WebApplicationException:javax.xml.bind.MarshalException

我正在研究jersey服务,我在这里提到它在我返回一个java对象时工作正常。 后来我试图让java对象通用它给出exceptionjavax.ws.rs.WebApplicationException:javax.xml.bind.MarshalException @XmlRootElement public class AppObject implements Serializable { private List list; private String license; public AppObject() { list = new ArrayList(); } public AppObject(List list) { this.list = list; } @XmlAnyElement(lax = true) public List getList() { return list; } public void setList(List list) { this.list = list; } public String getLicense() { return […]

如何替换–add-modules java.xml.ws

我确实将基于Maven的项目迁移到了SpringBoot 2.0和Java 9.在这个过程中,我不得不添加一些依赖项来摆脱有关模块的Java 9警告(仍然可以使用–add-modules添加)。 但是我无法摆脱–add-modules java.xml.ws 正如JEP 320中所建议的那样,添加依赖项: javax.xml.bind jaxb-api 2.3.0 com.sun.xml.bind jaxb-impl 2.3.0 com.sun.xml.bind jaxb-core 2.3.0 这些依赖关系允许运行mvn test来运行。 IntelliJ IDE的构建也有效。 但是,在启动Spring Boot应用程序时,我得到以下运行时exception: … Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122) at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155) at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:174) … 64 more 我错过了哪些Maven依赖项? JarFinder告诉我实现类是jaxb-impl的一部分,但只有2.2.12版本。 那么这个实现在哪里消失了?

XJC多个XSD – >使用“剧集”生成类

我有两个最简单的xsd文件。 a.xsd: b.xsd: 我们在a.xsd中定义的b.xsd中myType myType。 生成过程包括使用“剧集”function的两个步骤。 > xjc -episode a.episode a.xsd parsing a schema… compiling a schema… a\MyType.java a\ObjectFactory.java a\package-info.java > xjc b.xsd -b a.episode parsing a schema… [ERROR] src-resolve: Cannot resolve the name ‘a:myType’ to a(n) ‘type definition’ component. line 7 of file:/b.xsd Failed to parse a schema. 第一代使用有效的a.episode文件成功,但第二代失败。 这有什么不对?

Jackson JSON生成HTTP状态500,XML工作

我目前正在使用Jackson将Java对象序列化为JSON和XML作为REST Web服务的响应。 我有以下带注释的Java对象: @XmlRootElement(name = “Product”) @XmlAccessorType(XmlAccessType.FIELD) public class ProductDetailsView { @XmlElement private int id; @XmlElement private long EAN; @XmlElement private String manufacturer; @XmlElement private String modelname; @XmlElementWrapper(name = “onlineCompetitors”) @XmlElement(name = “competitor”) private List onlineCompetitors; 现在,前几个字段是原始类型,它们在JSON和XML中都完美地工作(事实上,有更多的原始字段)。 但是,从我添加OnlineCompetitorView列表的那一刻起,JSON序列化就不再起作用,并导致应用程序生成HTTP状态500(“内部服务器错误”)。 但是,当我使用application / xml作为接受的内容类型时,它可以完美地工作。 正确的XML响应: 1 5901234123457 Samsung 1 Shop1 4 488.95 7 2 Shop2 5 498.95 12 […]

解组JAVA Web服务中的嵌套或复杂数据元素

我们正在开发JAVA Web服务,并提出了对Web服务的输入。 输入有数据元素,最后一个元素是Arraylist,它有四个项目。 我们能够获得不在arraylist中的第一组元素的值,然后将它们保存或存储在数据库中。 我们面临的挑战是在arraylist中获取嵌套元素的值。 我们使用以下代码,但它抱怨或给出错误消息,它无法看到(DataInfo.xml)XML文件。 我们认为这是由Web服务输入生成的,但我们无法看到它。 JAXBContext jaxbContext = JAXBContext.newInstance(DataInfo.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); DataInfo EXitems = (DataInfo) jaxbUnmarshaller.unmarshal(new File(“DataInfo.xml”) ); 我们如何确保代码(应用程序)看到XML或从arraylist或嵌套元素获取值的最佳方法是什么? 我们正在使用相同的代码 主要课程 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = “DataInfo”, propOrder = {“firstName”,”surname”, “dateofBirth”,”studentAddress”}) @XmlRootElement(name = “dataInfo”) public class DataInfo implements Serializable { } ArrayList类 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = “studentAddress”, propOrder = {“address1″,”address2”, “town”,”country”}) @XmlRootElement(name = “studentAddress”) […]