Tag: jaxb

XmlAdapter与较新版本的JAXB无法正常工作

我正在使用以下来源执行Maven项目 package com.coderplus.jaxb; import java.util.HashMap; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlJavaTypeAdapter(PropertiesMapAdapter.class) public class PropertiesMap extends HashMap { } .. package com.coderplus.jaxb; import java.util.Map.Entry; import javax.xml.bind.annotation.adapters.XmlAdapter; public class PropertiesMapAdapter extends XmlAdapter<Properties, PropertiesMap> { @Override public PropertiesMap unmarshal(Properties properties) throws Exception { PropertiesMap retVal = new PropertiesMap(); if (null != properties) { for (Property param : properties.getProperty()) { retVal.put(param.getName(), param.getValue()); […]

如何使用外部绑定文件覆盖JAXB中的默认名称?

我有一个看起来像这样的元素。 以下是为此元素创建的默认代码。 @XmlElements({ @XmlElement(name = “navmap”, type = Navmap.class), @XmlElement(name = “keymap”, type = Keymap.class), @XmlElement(name = “container”, type = Container.class), @XmlElement(name = “ad”, type = Ad.class), @XmlElement(name = “button”, type = Button.class), @XmlElement(name = “checkbox”, type = Checkbox.class), }) protected List navmapOrKeymapOrContainer; 我的问题是我需要在我的 .xjb 绑定文件中 放置什么来将 默认生成的名称从 navmapOrKeymapOrContainer 为其他类似的 children ?

JAXB和complexType共享名称与其中一个元素生成不正确的代码

我有这个xsd有点坏,但我必须使用它来避免改变我正在编写的servlet的接口。 请求 – 响应接口的xsd包含以下行: … … 请注意名称冲突。 当我使用maven-jaxb-plugin从这个模式生成类时,我最终得到: Public class Foo { … public List getFoo() { … } … public static class Foo { … } } 当然,这无法编译,因为不允许在嵌套类和封闭类上使用相同的名称。 如果不更改xsd,我该怎么做才能解决这个问题? 我知道你可以通过在xsd中为jaxb添加标签来覆盖名称。 这样做安全吗? 它会对服务的界面产生影响吗?

如何使用JAXB使类字段成为标记名称?

我正在使用Java和JAXB进行XML处理。 我有以下课程: public class Characteristic { private String characteristic; private String value; @XmlAttribute public String getCharacteristic() { return characteristic; } public void setCharacteristic(String characteristic) { this.characteristic = characteristic; } @XmlValue public String getValue() { return value; } public void setValue(String value) { this.value = value; } } public static void main(String[] args) { Characteristic c […]

JAXB:如何自定义双字段的Xml序列化

我有一个遗留类,有很多公共双字段。 使用Double.MAX_VALUE初始化所有双字段以指示它们为空。 (遗留序列化被编码为忽略该字段,如果字段等于Double.MAX_VALUE则不进行序列化)。 我们现在尝试使用JAXB Marshaller将此类序列化为Xml。 它工作正常,除了我们想要阻止为等于Double.MAX_VALUE字段生成Xml。 我们没有使用单独的JAXB模式,只是用各种javax.xml.bind.annotation注释来标记我们的类。 如果使用模式,则可以添加元素以指定自定义DataType转换器。 有没有办法使用Annotations或以编程方式执行此操作? 在尝试下面推荐的方法之后,我仍然无法获得XmlAdapter : @XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(value=EmptyDoubleValueHandler.class, type=Double.class), @XmlJavaTypeAdapter(value=EmptyDoubleValueHandler.class, type=double.class)}) package tta.penstock.data.iserver; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters; 我的顶级课程是:tta.penstock.data.iserver.OrderBlotter,其中包含扩展com.eztech.OrderResponse的tta.penstock.data.iserver.OrderResponseWrappers列表。 所有双字段都包含在com.eztech.OrderResponse 。 我的unit testing代码执行以下操作: JAXBContext context = JAXBContext.newInstance(new Class[] { OrderBlotter.class, OrderResponseWrapper.class, OrderResponse.class}); Marshaller marshaller = context.createMarshaller(); StringWriter stringWriter = new StringWriter(); marshaller.marshal(blotter, stringWriter); System.out.println(“result xml=\n” + stringWriter.toString()); 但是双值仍然无法由XmlAdapter处理。 我知道我遗漏了一些基本的东西,但我不确定它是什么。

使用JAXB处理丢失的节点

我目前正在使用JAXB来解析xml文件。 我通过xsd文件生成了所需的类。 但是,我收到的xml文件不包含生成的类中声明的所有节点。 以下是我的xml文件结构的示例: 12/12/2012 Description 12345 我面临以下两种情况: 节点存在于生成的类中,但不存在于XML文件中 该节点没有任何价值 在这两种情况下,该值都设置为null。 我希望能够区分XML文件中何时缺少节点以及何时存在但具有空值。 尽管我的搜索,我还没有找到办法。 任何帮助都非常受欢迎 非常感谢您的时间和帮助 问候

xjc,maven-jaxb2-plugin:cryptic java.lang.NoSuchMethodException:javax.xml.bind.annotation.XmlElementRef.required()

我正在尝试使用maven-jaxb2-plugin编译XSD, url为http://www.aptatcip.com/APTA-TCIP-S-01%204.0_files/Schema%20Set.zip 使用此pom.xml和下面的命令行(从父文件夹运行),编译失败并显示相当神秘的错误消息(也在下面给出): pom.xml 4.0.0 onebusaway-nyc org.onebusaway 2.14.0-SNAPSHOT org.onebusaway onebusaway-nyc-tcip-api jar onebusaway-nyc-tcip-api org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.11.0 generate src/main/resources TCIP_4_0_0_Final.xsd 命令行 (在父项目文件夹中) MAVEN_OPTS=”-server -Djava.awt.headless=true -Xmx2G -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC” mvn -X -U clean install -pl onebusaway-nyc-tcip-api 错误信息 [ERROR] Failed to execute goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.11.0:generate (default) on project onebusaway-nyc-tcip-api: Execution default of goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.11.0:generate failed. UndeclaredThrowableException: javax.xml.bind.annotation.XmlElementRef.required() -> [Help 1] maven输出的最后一部分(因为-X长) […]

自定义JAXB unmarshall进程的error handling

假设我有一个描述根元素类Root的模式,其中包含一个List ,其中Entry类具有必需的字段名称。 以下是代码中的外观: @XmlRootElement class Root{ @XmlElement(name=”entry”) public List entries = Lists.newArrayList(); } @XmlRootElement class Entry{ @XmlElement(name=”name”,required=true) public String name; } 如果我提供以下XML用于解组: ekeren 我有一个问题,因为第二个条目不包含名称。 所以unmarshall产生null 。 有没有办法自定义JAXB以解组只包含“好”条目的Root对象?

SAXParseException XML-20221文本中的char无效

对于独立的Java应用程序,我们看到非常罕见的错误,其中包含有效XML内容的字符串导致JAXB抛出exception,例如: javax.xml.bind.UnmarshalException – with linked exception: [org.xml.sax.SAXParseException: : XML-20221: (Fatal Error) Invalid char in text.] 这是一个非常古老的Java应用程序,它是为旧版本的Java编写的,我们有一个现有的依赖项: com.oracle xdb-xmlparser 10.2.0.3.0 错误代码始终是XML-20221,但原因可能有所不同,例如: XML-20221: (Fatal Error) Invalid char in text. XML-20100: (Fatal Error) Expected ‘?>’.] XML-20121: (Fatal Error) End tag does not match start tag ‘TotalDepositReqd’. 堆栈跟踪的其余部分也会有所不同,但通常看起来像: at oracle.xml.parser.v2.XMLError.flushErrorHandler(XMLError.java:415) at oracle.xml.parser.v2.XMLError.flushErrors1(XMLError.java:284) at oracle.xml.parser.v2.NonValidatingParser.parseEndTag(NonValidatingParser.java:1359) at oracle.xml.parser.v2.NonValidatingParser.parseElement(NonValidatingParser.java:1304) at oracle.xml.parser.v2.NonValidatingParser.parseRootElement(NonValidatingParser.java:326) at […]

是否可以在没有带有@XmlJavaTypeAdapter的no-args构造函数的类上使用@XmlSeeAlso?

我目前正在为客户端 – 服务器通信设计通用的消息交换格式。 在消息中,有一个字段将被每个特定的Web服务覆盖。 简化示例如下: class Message { public BasicInfo basicInfo; } BasicInfo是基类。 所有派生类都不会有public no-args构造函数。 所以我为他们写了XmlAdapter 。 @XmlJavaTypeAdapter(…) class SpecificInfoA extends BasicInfo { // Detail omitted } 然后我更新了类Message ,希望jaxb能够在运行时确定类并使用相应的适配器来转换对象… @XmlRootElement @XmlSeeAlso({SpecificInfoA.class}) class Message { @XmlAnyElement public BasicInfo basicInfo; } 但是当我创建JAXBContext : JAXBContext context = JAXBContext.newInstance(Message.class); 抛出exception: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions playground.SpecificInfoA does not have […]