用@XMLRootElement和@XMLType注解类有@XMLRootElement @XMLType ? 我一直在使用@XMLType注解类,如果这个结构将在XML模式中被多次使用,并且在@XMLRootElement被使用一次,那么这是最好的方法吗? 一个不同的但相关的问题,我将在这里包括。 @XMLType注解有一个propOrder属性来指定它的元素出现的顺序 – 是否有@XMLRootElement的等价@XMLRootElement ? 我将这些注释与JAX-WS批注一起使用来创buildWeb服务,如果这有所帮助的话。
我是JAXB的初学者,当用xjc生成Java类时,我遇到了恼人的问题。 我提供了一个像这样的XSD: <xs:element name="item" type="itemType"/> … <xs:complexType name="itemType"> <xs:attribute name="id" type="xs:string" use="required"> … </xs:complexType> 而xjc正在生成一个名为ItemType.java的类,但是我希望这个名字是Item.java 。 也就是说,我想要生成的类,就好像XSD是这样的: <xs:element name="item"> <xs:complexType> <xs:attribute name="id" type="xs:string" use="required"> … </xs:complexType> </xs:element> 在任何其他元素上都不会有任何itemType的重用,只是构造XSD的人喜欢这种方式。 我想可能有办法做到这一点与自定义绑定,但我还没有find如何。 任何帮助? 谢谢米格尔
我们使用JAXB来生成Java类,并遇到了一些生成的复数方法名称不正确的情况。 例如,我们期望getPhysicians我们得到getPhysicien 。 我们将如何定制JAXB如何将特定方法复数化? 架构: <xs:complexType name="physician"> <xs:sequence> … </xs:sequence> </xs:complexType> <xs:complexType name="physicianList"> <xs:sequence> <xs:element name="Physician" type="physician" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> 生成的Java代码: … public class PhysicianList { … @XmlElement(name = "Physician") protected List<Physician> physicien; … public List<Physician> getPhysicien() { if (physicien == null) { physicien = new ArrayList<Physician>(); } return this.physicien; } 更新 Blaise回答了这个问题。 但是,我更喜欢不在XML模式中混合关注如JAXB自定义。 […]
我目前正在处理大多数types和元素都有<xsd:annotation> / <xsd:documentation>的XML模式。 当我从这个XML Schema生成Java Beans时,那些Bean的Javadoc只包含一些关于types/元素的允许内容的通用生成信息。 我希望在相关位置看到<xsd:documentation>标记的内容(例如,为了表示该complexType而生成的类的Javadoc中将显示该types的标记的内容)。 有没有办法做到这一点? 编辑 :这个XML Schema将用于带有JAX-WS的WSDL,所以这个标签也可能是合适的。 编辑2 :我读过关于<jxb:javadoc> 。 根据我的理解,我可以在单独的JAXB绑定文件中指定,也可以直接在XML模式中指定。 这几乎可以解决我的问题。 但是我宁愿使用现有的<xsd:documentation>标记,因为Javadoc不是文档的主要目标(主要是关于数据结构的信息,而不是关于由它生成的Java Bean的信息),并允许非JAXB工具也可以访问这些信息。 在<jxb:javadoc>和xsd:documentation> “感觉”是错误的,因为我没有很好的理由重复数据(和工作)。 编辑3 :感谢Pascal的回答,我意识到我已经有了一半的解决scheme: complexType的<xsd:documentation>被写入到它的Javadoc的开头! 问题仍然是只使用complexType s和simpleType s(这也可能导致类),而元素仍然是Javadoc-less。
我试图编组实现通用接口的对象列表。 有3个类和1个接口涉及: 社区类(有一个方法: List <Person> getPeople(); ) Person接口(有一个方法: String getName(); ) 女生课(实施人) 男孩class(实施人) 看下面的代码。 我想要一个如下所示的XML: <community> <people> <girl> <name>Jane</name> </girl> <boy> <name>John</name> </boy> <girl> <name>Jane</name> </girl> <boy> <name>John</name> </boy> </people> </community> 或者可能: <community> <people> <person> <girl> <name>Jane</name> </girl> </person> <person> <boy> <name>John</name> </boy> </person> </people> </community> 到目前为止,我得到的是这样的: <community> <people> <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="girl"> <name>Jane</name> </person> <person […]
我已经写了一些使用JAXB进行序列化的类,我想知道是否有一种方法可以根据注释为每个对象生成一个XSD文件。 有这个工具吗? 像generate-xsd com/my/package/model/Unit.java 。 有没有什么可以做到这一点?
我正在使用JAXB来读取和写入XML。 我想要的是使用基本的JAXB类进行编组,并使用inheritance的JAXB类进行取消编组。 这是为了允许发送者Java应用程序发送XML到另一个接收者Java应用程序。 发送者和接收者将共享一个公共的JAXB库。 我希望接收者将XML解组到扩展了genericsJAXB类的接收者特定的JAXB类中。 例: 这是发件人使用的常见JAXB类。 @XmlRootElement(name="person") public class Person { public String name; public int age; } 这是解组XML时使用的接收器特定的JAXB类。 接收器类具有特定于接收器应用程序的逻辑。 @XmlRootElement(name="person") public class ReceiverPerson extends Person { public doReceiverSpecificStuff() … } 编组按预期工作。 问题在于解组,它仍然对Person进行解组,尽pipeJAXBContext使用了子类ReceiverPerson的包名。 JAXBContext jaxbContext = JAXBContext.newInstance(package name of ReceiverPerson); 我想要的是解除ReceiverPerson 。 我已经能够做到这一点的唯一方法是从Person删除@XmlRootElement 。 不幸的是,这样做会阻止Person被封送。 就好像JAXB从基类开始,一直向下找,直到find第一个具有合适名称的@XmlRootElement 。 我试着添加一个createPerson()方法,它返回ReceiverPerson到ObjectFactory但是没有帮助。
我想将一个OutputStream转换成一个String对象。 编组JAXB对象后,我有一个OutputStream对象返回。
试图在这里通过一个类抛出exception: FooClass fooClass = (FooClass ) unmarshaller.unmarshal(inputStream); 抛出这个exception: java.lang.ClassCastException: javax.xml.bind.JAXBElement 我不明白这一点 – 因为这个类是由xjc.bat工具生成的 – 而且它生成的类我根本没有改变 – 所以在这里不应该有任何投射问题 – 反组织者应该真的给我一个类可以转换为FooClass。 任何想法,我做错了什么?
如果您尝试编组引用不具有无参数构造函数的复杂types的类,例如: import java.sql.Date; @XmlRootElement(name = "Foo") @XmlAccessorType(XmlAccessType.FIELD) public class Foo { int i; Date d; //java.sql.Date does not have a no-arg constructor } 与Java的一部分JAXB实现,如下所示: Foo foo = new Foo(); JAXBContext jc = JAXBContext.newInstance(Foo.class); ByteArrayOutputStream baos = new ByteArrayOutputStream(); Marshaller marshaller = jc.createMarshaller(); marshaller.marshal(foo, baos); JAXB将抛出一个 com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions java.sql.Date does not have a […]