我正在编写一个解组器,我正在努力与jaxb进行斗争,以获得一个有效的解决方案。
我想解组从生成的MessageDescription。wsdl文件。wsdl文件中的java类是:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MessageDescription", propOrder = {
"source",
"key",
"data",
"extension"
})
@XmlSeeAlso({
org.onvif.ver10.schema.ConfigDescription.Messages.class
})
public class MessageDescription {
@XmlElement(name = "Source")
protected ItemListDescription source;
@XmlElement(name = "Key")
protected ItemListDescription key;
@XmlElement(name = "Data")
protected ItemListDescription data;
@XmlElement(name = "Extension")
protected MessageDescriptionExtension extension;
@XmlAttribute(name = "IsProperty")
protected Boolean isProperty;
@XmlAnyAttribute
private Map<QName, String> otherAttributes = new HashMap<QName, String>();
// Ommited...
由于没有@XmlRootElement,我用包装器扩展了类,并自己添加了注释
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement (name = "MessageDescription", namespace = "http://www.onvif.org/ver10/schema")
public class MessageDescriptionXmlWrapper extends MessageDescription {
}
我使用我的“包装器”MessageDescription类来解组
private static MessageDescription parseMessageDescription(final Node messageDescriptionNode) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(MessageDescriptionXmlWrapper.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
MessageDescription unmarshal = (MessageDescription) unmarshaller.unmarshal(messageDescriptionNode);
return unmarshal;
}
解组过程正在工作,但有一个子项始终设置为null。我不知道在哪里可以修复这个解组错误。
空属性是作为QName的“type”。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
public static class SimpleItemDescription {
@XmlAttribute(name = "Name", required = true)
protected String name;
@XmlAttribute(name = "Type", required = true)
protected QName type;
我怀疑QName不能反序列化,因为它不是XML元素:
-
还有原件。SimpleItemDescription完整文件的xsd说明
<xs:element name="SimpleItemDescription" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Description of a simple item. The type must be of cathegory simpleType (xs:string, xs:integer, xs:float, ...).</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="Name" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Item name. Must be unique within a list.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Type" type="xs:QName" use="required"/>
</xs:complexType>
</xs:element>
任何想法?
尝试添加包信息。java文件
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.onvif.org/ver10/schema", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package your.package.name;
放入MessageDescriptionXmlWrapper所在的同一文件夹中
我正在尝试使用JAXB以以下格式散集XML: 我想从user元素开始解组XML。但是,当我尝试使用“@XmlRootElement(name=“user”)”时,我收到以下错误: 这是我的帐户模型类: 服务:
背景: 我使用JAXB将XML解组为Java对象。最初,我只是使用JAXB来执行解组。然后对代码进行静态分析,并提出了XML外部实体注入的高关键性问题。经过一点研究,我发现了一个建议(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#JAXB_Unmarshaller)使用配置为防止解析
为什么在使用JAXB时需要使用? 我的工作场景是这样的: 我正在做一个从.NET到Java的转换项目。在.NET中,类的编写与POJO类似。我只是在代码中添加了注释(如、等)。并解决了与注释相关的错误。 现在我犯了这样的错误: XML文件如下: POJO类:
我正在用JAXB在列表中解组元素序列,见下文。 XML文件 Java-代码 但是,我有点担心textPoint元素的固有顺序,因为它们在XML文件中的顺序很好,但是没有元素(例如ID),我可以通过对它们进行排序。尽管如此,它似乎可以按照与XML文件相同的顺序对它们进行解组,因此不必担心这一点吗?
我尝试解组一个XML文件到一个对象。 我得到了这个错误: 我的解组过程如下所示: 我的XML实体看起来像: 我的XMLFile看起来像: 那么,我的解组过程出了什么问题?XML实体是用xjc创建的。 我也尝试了简单的xml文件/对象。这对我来说很好。
你好,我正在使用JAXB将XML解锁到JAVA,我的xml文档中有一个元素“值”,可以是int类型,也可以是双精度型,并且我的java类中此元素的相应属性是数字类型的“值”。 JAXB不支持“数字”类型的umarshaling,我想,有人知道如何处理这个问题吗?一个例子将会得到真正的赞赏。提前谢谢。