当前位置: 首页 > 知识库问答 >
问题:

缺少名称空间定义的JAXB问题

哈沛
2023-03-14

例如,一个XML属性值是“repository: ,但名称空间前缀“repository”从未在数据集中定义。(不要紧,提供商的最佳实践建议定义它!)

所以当我去解封一个示例集时,具有指定前缀的QName属性(在我上面的示例中为“Repository”)是空的!所以看起来JAXB正在“抛出”那些具有未定义名称空间前缀的属性QName值。我很惊讶,它甚至没有保留当地的名字。

理想情况下,我希望保持该值原样,但看起来我无法在绑定时将QName映射到字符串(Schema到Java)。

有没有一种方法可以在运行时“插入”名称空间映射/定义?还是在绑定时“全局”定义它?

共有1个答案

龙逸清
2023-03-14

最简单的方法是使用字符串而不是QName。您可以使用javatype定义来实现这一点。

如果要在运行库中添加前缀/名称空间映射,有相当多的方法可以做到:

  • 与上面类似,您可以提供自己的QName转换器,它将考虑您的前缀。
  • 您可以将SAX或StAX筛选器置于两者之间,并在startdocument中声明其他前缀。
  • 实际需要的是将前缀映射添加到UnmarshallingContext.EnvironmentNamespaceContext中。我已经检查了源代码,但找不到一种直接而简单的方法。
 类似资料:
  • 我试图从通过JAXB生成的类序列化XML。 班级: 文件“package-info.java”: 编组器(简化,无需错误处理): 此代码生成: 我期待这样的事情: 我有一个类似的代码并且工作正常,但是我不明白为什么这个代码不显示命名空间。有线索吗?谢谢!

  • 问题内容: 除了包级别注释外,还有其他方法可以使用注释来控制自定义名称空间前缀。 可以在元素级别完成吗?也可能有一个带有多个前缀的名称空间吗? 问题答案: 您实际上想做什么?为什么名称空间前缀对您很重要? 对于命名空间前缀,没有标准的元素级注释。 我知道的控制名称空间前缀的选项是: 你已经提到过。 提供习俗。 XML的低级处理(例如,在StAX,SAX或DOM级别)。 我也可以想象: / 通常使用

  • 问题内容: [随着理解的进展进行大量编辑] 是否有可能让Spring Jaxb2Marshaller使用一组自定义的名称空间前缀(或至少尊重模式文件/注释中给出的名称空间)而不必使用NamespacePrefixMapper的扩展? 想法是让一个类与另一个类具有“具有”关系,而另一个类又包含一个具有不同名称空间的属性。为了更好地说明这一点,请考虑以下使用JDK1.6.0_12的项目大纲(我可以使用

  • 在marshall一个JAXB类之后,我有下面的XML: 这个 它可能包含未知数量的具有自己名称空间的其他元素。 问题: 当我马歇尔的一些。类对象,jaxb将另一个的名称空间。类作为ns0导入根元素,因为我得到 这是一个问题,因为 我需要@XmlElementRefs和@XmlElementRef注释,因为我需要从json转换为XML,并且Jackson需要知道“任何”列表可能具有的类型。 我如何

  • 面临使用JAXB解组的问题。我需要使用多个名称空间。Java类是为第三方提供的XSD生成的。因此,我不想在Java类中的XMLRootElement指定名称空间,也不想手动更改多个类。 编组逻辑如下: xmlelement类TokenRequest.java BasicInRequestType.java 我在package-info.java中指定了前缀 TokenRequest元素实际上引用了

  • 我想知道是否有一种方法来强制JAXB创建与XSD模式相同的名称空间前缀。即,即使我从一个包含xmlns:cts=“http://cts.com”的模式创建JAXB类,在封送类之后,我得到一个具有xmlns:ns1前缀的XML。我知道我可以通过使用NamespacePrefixMapper类来重写这些,但是为什么我需要在我的XSD明确定义了默认前缀的情况下手动执行此操作呢?在我当前的XML中有大量的