Tag: jaxb

如何比较XMLGregorianCalendar只有Date部分(日,月,年)?

我正在开发一个集成了spring-struts web应用程序的web服务,在XSD中有一个XMLGregorianCalendar类型属性,假设属性名称为trxDate 。 在SOAPUI测试应用程序中,如果我插入了trxDate的值: 2013-02-21 ,那么我发送了soap xml请求数据,并在service方法中打印了值:System.out.println(trxDate)方法,打印输出结果与输入相同:2013-02-21。 现在,我正在尝试创建一个函数来将trxDate与当前日期进行比较。 我知道我们可以使用trxDate.compare(currentDate)方法对它进行比较。 问题是我不知道如何使用当前日期创建XMLGregorianCalendar对象集,仅使用日期部分(日,月和年)进行比较。 我尝试使用此代码: GregorianCalendar gc = new GregorianCalendar(); gc.set(GregorianCalendar.HOUR_OF_DAY, 0); gc.set(GregorianCalendar.MINUTE, 0); gc.set(GregorianCalendar.SECOND, 0); gc.set(GregorianCalendar.MILLISECOND, 0); XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc); System.out.println(xgc); 结果是: 2013-02-20T00:00:00.000 + 07:00 但我期待: 2013年2月20日 如果使用日期( xgc )与trxDate进行比较: int result = trxDate.compare(xgc); 结果是2,表示:INDETERMINATE(来自DatatypeConstants类)。 正确的结果应该是-1,0或1。 那我的代码有什么问题?

推荐的JAX-WS框架,用于处理Moxy

目前我正在使用CXF,但由于CXF中的以下代码: // fall back if we’re using another jaxb implementation try { riContext = JAXBUtils.createRIContext(contextClasses .toArray(new Class[contextClasses.size()]), tns); } CXF加载Moxy和RI JAXB上下文(可能依赖于非标准API)。 在我的情况下,启动时间和内存的开销太高了。 我正在寻找一个良好的开源JAX-WS实现(CXF替换),它将按预期与Moxy一起使用。

jax-b xml具有多对多关系的反向引用

我的数据模型中有很多关系。 我一直在尝试使用JAX = B来获取数据模型的XML表示,但是我已经读过一对多的关系: @XmlInverseReference 需要用于映射的反面。 我相信这是为了使用不同的提取类型(即LAZY和EAGER)。 我不确定这个注释是如何工作的。 它是否使用后向指针来确保在某些字段上指定数据时不会获取数据? 我也不知道是否需要用上述注释来注释我的多对多关系。 这是与自身有多对多关系的用户类,即。 用户可以是许多其他用户的朋友。 我应该用@XmlInverseReference注释getter吗? @Entity @Table(name = “users”) public class User implements Serializable { … // bi-directional many-to-many association to User @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH }) @JoinTable(name = “friends”, joinColumns = { @JoinColumn(name = “uid”) }, inverseJoinColumns = { @JoinColumn(name = “frienduId”) }) private […]

为什么JAXB说“xxx是一个接口,而JAXB无法处理接口”。 即使生成的类不是接口

我使用JAXB来绑定我的xsd,然后尝试创建JAXBContext: JAXBContext jaxbContext = JAXBContext.newInstance(“my package name”); 但是JAXB提供了180个IllegalAnnotationsException。 大多数例外都有以下消息: XXX是一个接口,JAXB无法处理接口 XXX没有no-arg默认构造函数 @XmlAttribute / @ XmlValue需要引用映射到XML文本的Java类型。 当我查看生成的类时,它们都不是接口,我无法理解为什么JAXB将它们解释为接口。 这是JAXB报告的错误之一的堆栈跟踪: com.sc.md.datatypes.schemas.csemessage.EnvelopeType is an interface, and JAXB can’t handle interfaces. this problem is related to the following location: at com.sc.md.datatypes.schemas.csemessage.EnvelopeType at protected com.sc.md.datatypes.schemas.csemessage.EnvelopeType com.sc.md.datatypes.schemas.csemessage.cseMessage.envelope at com.sc.md.datatypes.schemas.csemessage.cseMessage com.sc.md.datatypes.schemas.csemessage.EnvelopeType does not have a no-arg default constructor. this problem is related to […]

JAXB中的Unmarshaller和模式

我有应用程序,可以以各种格式保存文件(所有这些都是xml)。 所以我应该在确定格式文件已保存的情况下解决问题。 所以,我看到了两个解决方案 不同的格式有不同的模式,所以我可以通过它们来确定。 我按照从这里开始的方式设置模式 marshaller.setProperty(Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION, “bla-bla.xsd”); 所以我想我可以使用unmarshaller.getProperty(Marshaller.JAXB_NO_NAMESPACE_SCHEMA_LOCATION)来获取它 但它扔了 javax.xml.bind.PropertyException:jaxb.noNamespaceSchemaLocation 和getSchema()返回null那么, 我怎样才能获得模式位置? 使用setAdapter(Class type, A adapter)方法为不同的bean指定不同的适配器 什么方式更可取? 如果是第一个,那我怎样才能获得架构位置标签? upd 代码示例假设我们有bean @XmlRootElement public class Foo{ String bar; public String getBar() {return bar; } public void setBar(String bar) {this.bar = bar;} } 和生成模式的代码,然后保存Foo的实例和加载。 public class Test { final static String schemaLoc = “fooschema.xsd”; public static void write(File […]

在泽西岛编组通用类型

我需要返回几个结果和结果总数的客户列表。 我必须在具有不同实体的几个地方这样做,所以我希望有一个具有这两个属性的generics类: @XmlRootElement public class QueryResult implements Serializable { private int count; private List result; public QueryResult() { } public void setCount(int count) { this.count = count; } public void setResult(List result) { this.result = result; } public int getCount() { return count; } public List getResult() { return result; } } 和服务: @GET @Produces({MediaType.APPLICATION_JSON, […]

用JAXB保持干爽

我正在开发许多必须按以下格式序列化为XML的Java类: 一开始, Foo.java看起来像这样: @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) class Foo { @XmlAttribute String value; // snip constructors // snip methods // getValue // equals, hashCode, toString // static valueOf(String), static valueOf(int) } 猜测Bar.java和Baz.java可能是什么Bar.java并不需要太多想象力。 这些是非常简单的包装类(在本例中为int , String和boolean 。 到目前为止,一切都是笨拙的。 写完第九轮之后 class WhoCares { @XmlAttribute Whatever value; /* 2 constructors */ /* 6 methods found in every one of these […]

具有指定模式的JAXB Marshaller

我想在我编组的每个xml文件中定义模式。 然后在解组过程中获取此模式(路径字符串)。 仅限marshaller.setSchema() 允许调用者在编组时validation编组的XML。 是的,我可以为此目的编写额外的bean,但我想得到xml之类的 …

在java webapp / client中管理Web服务/ xml绑定的生成工件的最佳方法?

我正在研究一些使用JAXB绑定消息的Web服务(在JAX-WS或spring-ws中)。 使用这些绑定时,总会有一些代码从WSDL自动生成以绑定消息对象。 我正在努力找出能够完成这项工作的最佳方法,以便它易于使用,难以破解并与IDE很好地集成(主要使用eclipse)。 我认为有几种方法可以解决这个问题。 我现在看到的三个主要选项是: 生成代码,保留源工件并将其检入存储库。 优点:与IDE轻松集成(源代码突出显示等),在构建系统中工作。 缺点:每次重新生成时生成的代码都会更改,可能会创建嘈杂的提交。 它也是多余的,因为WSDL文件通常已经签入。 生成代码作为构建过程的一部分。 不要保留源工件或仅将它们保存在输出目录中。 优点:修复前一个缺点。 缺点:难以与IDE集成,但是这个构建步骤是否可以自动运行? 我目前在我的一个项目上使用它,但是第一次检查项目时它看起来很破碎,这是一个小麻烦。 将生成的绑定保存在maven或手动更新的jar中包含的单独库(jar)中,具体取决于您的构建过程。 我从java.net上的一个post中得到了这个想法。 这似乎更稳定,并使用显式版本,但似乎有点重量级。 您将实施哪些选项以及如何实施? 我们目前正在使用maven和eclipse,所以在这方面的任何想法都会很棒。 我认为这个问题可以概括为大多数其他构建系统和IDE组合,甚至可能是其他语言。

JAXB如何推进XMLStreamReader?

我正在使用JAXB使用XMLStreamReader从非常大的XML文件解组对象。 如果我解组的XML元素是分开的(通过换行符或甚至单个空格),这可以正常工作。 如果我解组的XML元素之间没有空格,那么我就会丢失所有其他项目 – XML阅读器似乎会在取消编组之后吞下该元素。 简化的可运行示例的源代码可以在https://gist.github.com/dalelane/88df784c3cb74b214d5c上进行演示。 有趣的是: XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(inputStream); JAXBContext context = JAXBContext.newInstance(MyJAXBClass.class); Unmarshaller unmarshaller = context.createUnmarshaller(); boolean running = true; while (running){ switch (reader.next()){ case XMLStreamConstants.START_ELEMENT: if (reader.getLocalName().equals(“myunmarshallobjname”)){ JAXBElement unmarshalledObj = unmarshaller.unmarshal(reader, MyJAXBClass.class); MyJAXBClass item = unmarshalledObj.getValue(); } break; case XMLStreamConstants.END_DOCUMENT: reader.close(); running = false; break; } } 每次流阅读器命中元素的开头时,我都会将它传递给unmarshaller以解组该片段。 如果我有XML,它可以工作: 但如果我有以下情况,则丢失物品: 我究竟做错了什么? […]