GVKun编程网logo

没有由 JAXB 生成的 @XmlRootElement(指定的xml源没有引用架构.excel将基于xml)

3

在本文中,我们将详细介绍没有由JAXB生成的@XmlRootElement的各个方面,并为您提供关于指定的xml源没有引用架构.excel将基于xml的相关解答,同时,我们也将为您带来关于@Jacks

在本文中,我们将详细介绍没有由 JAXB 生成的 @XmlRootElement的各个方面,并为您提供关于指定的xml源没有引用架构.excel将基于xml的相关解答,同时,我们也将为您带来关于@JacksonXmlRootElement使用多个本地名称来匹配2个相同的xml文件,只具有不同的根名称、@XMLRootElement与@XmlType、com.intellij.psi.xml.XmlElementContentGroup的实例源码、Error: Not implemented: HTMLCanvasElement.prototype.getContext (的有用知识。

本文目录一览:

没有由 JAXB 生成的 @XmlRootElement(指定的xml源没有引用架构.excel将基于xml)

没有由 JAXB 生成的 @XmlRootElement(指定的xml源没有引用架构.excel将基于xml)

我正在尝试从 FpML(金融产品标记语言)4.5 版生成 Java 类。生成了大量代码,但我无法使用它。试图序列化一个简单的文档,我得到了这个:

javax.xml.bind.MarshalException  - with linked exception: [com.sun.istack.SAXException2: unable  to marshal type  "org.fpml._2008.fpml_4_5.PositionReport"  as an element because it is missing an  @XmlRootElement annotation]

事实上, 没有 类有 @XmlRootElement 注释,那么我做错了什么?我将 xjc (JAXB 2.1) 指向 fpml-
main-4-5.xsd,然后它包括所有类型。

答案1

小编典典

为了将其他人已经陈述或暗示的内容联系在一起,JAXB XJC
决定是否将@XmlRootElement注释放在生成的类上的规则非常重要(请参阅本文)。

@XmlRootElement存在是因为 JAXB 运行时需要某些信息才能编组/解组给定对象,特别是 XML
元素名称和命名空间。您不能将任何旧对象传递给 Marshaller。@XmlRootElement提供此信息。

注释只是一种方便,但是 - JAXB 不需要它。替代方法是使用JAXBElement包装对象,它提供与
相同的信息@XmlRootElement,但以对象的形式,而不是注释。

但是,JAXBElement对象很难构造,因为您需要知道 XML 元素名称和名称空间,而业务逻辑通常不需要。

值得庆幸的是,当 XJC 生成一个类模型时,它也会生成一个名为ObjectFactory. 这部分是为了向后兼容 JAXB v1,但它也是 XJC
放置生成的工厂方法的地方,这些方法JAXBElement在您自己的对象周围创建包装器。它为您处理 XML
名称和命名空间,因此您无需担心。您只需要浏览这些ObjectFactory方法(对于大型模式,可能有数百个)以找到您需要的方法。

@JacksonXmlRootElement使用多个本地名称来匹配2个相同的xml文件,只具有不同的根名称

@JacksonXmlRootElement使用多个本地名称来匹配2个相同的xml文件,只具有不同的根名称

如何解决@JacksonXmlRootElement使用多个本地名称来匹配2个相同的xml文件,只具有不同的根名称?

我想将xml解析为java对象,两个相同的xml,唯一的根标记名称不同:

<root1>
    <a></a>
    <b></b>
    <c></c>
</root1>
<root2>
    <a></a>
    <b></b>
    <c></c>
</root2>

可以仅使用一个注有类似内容的pojo来实现

@JacksonXmlRootElement(localName =“ root1 | root2”)吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

@XMLRootElement与@XmlType

@XMLRootElement与@XmlType

使用@XMLRootElement和@XMLType注释类之间有什么区别。我已经用@XMLType注释类,当结构将在XML模式中使用多次时,以及使用@XMLRootElement时,它将只使用一次 – 这是最好的方法吗?

一个不同但相关的问题,我会在这里包括。 @XMLType注释有一个propOrder属性来指定它的元素以什么顺序出现 – 是否有一个等价的@XMLRootElement?

我使用这些注释与JAX-WS注释一起创建Web服务,如果这有什么区别。

XmlRootElement和XmlType之间的区别是范围界定的问题。记住这个注释只是指示用于生成XML的模式的创建。 XmlRootElement表示全局元素(具有匿名或模式类型):
<xs:element name=foo type="bar"> </xs:element> <-- schema type

而XmlType用于表示局部元素(具有匿名或复杂类型):

<xs:complexType name=bar> </xs:complexType> <-- complex type

这里的局部/全局的主要区别在于对象将出现的模式的层次结构中,以及是否声明模式类型或复杂类型。这两个注释的文档都很好,包括示例:

XmlRootElement

XmlType

编辑:寻址propOrder问题:如果您还声明本地类型,您可以在全局元素上使用它:

@XmlRootElement (name="PersonElement")
@XmlType (propOrder={"firstname","lastname"})
public class People{
    @XmlElement
    public String firstname;
    public String lastname;
}

这将产生类似:

<xs:element name="PersonElement" type="People"/>
<xs:complexType name="People">
    <xs:sequence>
        <xs:element name="firstname" type="xs:string"/>
        <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
</xs:complexType>

com.intellij.psi.xml.XmlElementContentGroup的实例源码

com.intellij.psi.xml.XmlElementContentGroup的实例源码

项目:intellij-ce-playground    文件:XmlElementContentSpecImpl.java   
@Override
public boolean isMixed() {
  XmlElementContentGroup topGroup = getTopGroup();
  return topGroup != null && ((XmlElementImpl)topGroup).findElementByTokenType(XML_PCDATA) != null;
}
项目:intellij-ce-playground    文件:XmlElementContentSpecImpl.java   
@Override
public XmlElementContentGroup getTopGroup() {
  return (XmlElementContentGroup)findElementByTokenType(XML_ELEMENT_CONTENT_GROUP);
}
项目:tools-idea    文件:XmlElementContentSpecImpl.java   
public boolean isMixed() {
  XmlElementContentGroup topGroup = getTopGroup();
  return topGroup != null && ((XmlElementImpl)topGroup).findElementByTokenType(XML_PCDATA) != null;
}
项目:tools-idea    文件:XmlElementContentSpecImpl.java   
@Override
public XmlElementContentGroup getTopGroup() {
  return (XmlElementContentGroup)findElementByTokenType(XML_ELEMENT_CONTENT_GROUP);
}
项目:consulo-xml    文件:XmlElementContentSpecImpl.java   
public boolean isMixed() {
  XmlElementContentGroup topGroup = getTopGroup();
  return topGroup != null && ((XmlElementImpl)topGroup).findElementByTokenType(XML_PCDATA) != null;
}
项目:consulo-xml    文件:XmlElementContentSpecImpl.java   
@Override
public XmlElementContentGroup getTopGroup() {
  return (XmlElementContentGroup)findElementByTokenType(XML_ELEMENT_CONTENT_GROUP);
}

Error: Not implemented: HTMLCanvasElement.prototype.getContext (

Error: Not implemented: HTMLCanvasElement.prototype.getContext (

问题:

Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)

解决方案:

yarn add jest-canvas-mock

然后在相应的单元测试中 加上 import ''jest-canvas-mock'';

关于没有由 JAXB 生成的 @XmlRootElement指定的xml源没有引用架构.excel将基于xml的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于@JacksonXmlRootElement使用多个本地名称来匹配2个相同的xml文件,只具有不同的根名称、@XMLRootElement与@XmlType、com.intellij.psi.xml.XmlElementContentGroup的实例源码、Error: Not implemented: HTMLCanvasElement.prototype.getContext (等相关知识的信息别忘了在本站进行查找喔。

本文标签: