Tag: unmarshalling

使用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; […]

OpenSAML 3 unmarshaller为null

您好我正在将应用程序移植到opensaml3并遇到以下问题: InitializationService.initialize(); … Unmarshaller unmarshaller = Configuration.getUnmarshallerFactory().getUnmarshaller(qName); 我已经通过initialize函数替换了opensaml2和之前的DefaultBootstrap。 仍然工厂将我作为编组员返回null。 知道这里出了什么问题吗? 这是初始化进度的输出: [main] INFO org.opensaml.core.config.InitializationService – Initializing OpenSAML using the Java Services API [main] INFO org.opensaml.xmlsec.algorithm.AlgorithmRegistry – Algorithm failed runtime support check, will not be usable: http://www.w3.org/2001/04/xmlenc#ripemd160 [main] INFO org.opensaml.xmlsec.algorithm.AlgorithmRegistry – Algorithm failed runtime support check, will not be usable: http://www.w3.org/2001/04/xmldsig-more#hmac-ripemd160 [main] INFO org.opensaml.xmlsec.algorithm.AlgorithmRegistry – Algorithm […]

解析的SOAP响应与接收的响应不同

我试图解析SOAP响应。 我可以使用以下行显示完整的响应。 System.out.println(“Response: ” + out.toString()); 但是,当我解析响应并对解析后的响应进行编组时,它会显示错误的响应。 package-info.java @XmlSchema( namespace = “http://v3.hotel.wsapi.ean.com/”, elementFormDefault = XmlNsForm.QUALIFIED) package com.ean; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlSchema; 我的代码 @XmlRootElement(name=”getListResponse”) @XmlAccessorType(XmlAccessType.FIELD) public class GetListResponse { @XmlElement(name=”HotelListResponse”) private HotelListResponse hotelListResponse; public GetListResponse() { this.hotelListResponse = new HotelListResponse(); } …getter and setter } @XmlRootElement(name =”HotelListResponse”) @XmlAccessorType(XmlAccessType.FIELD) public class HotelListResponse { @XmlElement(name = “customerSessionId”) String […]

JAXB覆盖@XmlElement类型的列表

有一个简单的类Bean1 ,其子类列表为BeanChild1 。 @XmlRootElement(name=”bean”) @XmlAccessorType(XmlAccessType.PROPERTY) public static class Bean1 { public Bean1() { super(); } private List childList = new ArrayList(); @XmlElement(name=”child”) public List getChildList() { return childList; } public void setChildList(List pChildList) { childList = pChildList; } } public static class BeanChild1 { … } 我试图覆盖该类,以更改列表的类型。 新的子类(即BeanChild2 )扩展了前一个(即BeanChild1 )。 public static class Bean2 extends […]

java unmarshall LocalDateTime错误

这是我的适配器类: public class LocalDateTimeAdapter extends XmlAdapter { @Override public LocalDateTime unmarshal(String v) throws Exception { return new LocalDateTime(v); } @Override public String marshal(LocalDateTime v) throws Exception { return v.toString(); } } 这是一个对象类,我想存储日期: @XmlAccessorType(XmlAccessType.FIELD) public class Object { @XmlJavaTypeAdapter(LocalDateTimeAdapter.class) private LocalDateTime time; public LocalDateTime getTime() { return time; } 出于某种原因,我无法编译它。 它表明问题是return new LocalDateTime(v); 。 这是我得到的错误: Error:(9, […]

如何直接调用JAXB XMLAdapter

当我试图直接解组根对象而不是另一个对象中的字段时,我违反了jaxb的XMLAdapters的限制,因此绕过了@XmlJavaTypeAdapter 我宁愿不包装我的对象,因为这将改变将在我们的数据库中序列化的xml。 听起来有可能直接调用XMLAdapter,在其他地方通过这些答案: [1] http://www.coderanch.com/t/505457/XML/jaxb-xmladapter-rootElement [2] http://markmail.org/message/etvbyzn3e3idpa7q#query:+page:1+mid:cetzvq37nifr6tk6+ state:results [3] JaxBinheritance编组抽象类 但我不知道你会怎么做:( 我猜它会是这样的 AdaptedFoo adaptedFoo = (new MyAdapter()).unmarshall(fooXml) 但这不是XMLAdapter unmarshal方法的接口。 在我的情况下,xml需要转换为AdaptedFoo对象才能被解组。 eg. public BackgroundJob unmarshal(AdaptedFoo adaptedFoo) 我是否需要一个额外的解组步骤来将myXml转换为AdaptedFoo对象,然后调用我的XMLAdapter将其转换为预期的子类? 还是有更优雅的方式? 什么是推荐的过程?

Jaxb Unmarshall带有未知的@XmlRootElement

在不知道根元素的情况下,我无法实现解组 XML。 例如。 要么 等等… 我想在类上映射解组结果: // @XmlRootElement ?? public class Container implements Serializable { private Bar bar; } 我总是需要修复@XmlRootElement 。 我搜索了如何在运行时设置@XmlRootElement但没有成功。 任何想法? 我在Spring Batch上下文中,我可以使用我选择的unmarshaller。 注意:我不能使用@XmlElementDecl或ObjectFactory ,如下所示,因为我不知道可能的根名称的名称 。

自定义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对象?

Axis Marshaller

我有一组使用wsdl2java(Axis 1.4)创建的类,我正在寻找一种方法来解组和编组来自/到String和Object的数据。 我编写了一个JAXB unmarshaller,它适用于我们的一些较新的内部对象,因为我们使用xjc来创建类但没有时间转换旧的轴类,需要为代码找到一个marshal / unmarshal解决方案。 。 请有人指点我的方向。 谢谢!

Unmarshall期间无效的XML字符

我使用编码“UTF-8”将对象编组到XML文件。 它成功生成文件。 但是当我试图将其解组时,会出现错误: 在属性“{1}”的值中找到无效的XML字符(Unicode:0x {2}),元素为“0” 字符为0x1A或\ u001a,在UTF-8中有效,但在XML中是非法的。 JAXB中的Marshaller允许将此字符写入XML文件,但Unmarshaller无法解析它。 我试图使用另一种编码(UTF-16,ASCII等)但仍然出错。 常见的解决方案是在XML解析之前删除/替换此无效字符。 但是,如果我们需要这个角色,如何在解组之后获得原始角色? 在寻找此解决方案时,我想在解组之前用替换字符(例如dot =“。”)替换无效字符。 我创建了这个类: public class InvalidXMLCharacterFilterReader extends FilterReader { public static final char substitute = ‘.’; public InvalidXMLCharacterFilterReader(Reader in) { super(in); } @Override public int read(char[] cbuf, int off, int len) throws IOException { int read = super.read(cbuf, off, len); if (read == -1) […]