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

JAXB-使用XSD中定义的名称空间前缀

蒙才
2023-03-14

我想知道是否有一种方法来强制JAXB创建与XSD模式相同的名称空间前缀。即,即使我从一个包含xmlns:cts=“http://cts.com”的模式创建JAXB类,在封送类之后,我得到一个具有xmlns:ns1前缀的XML。我知道我可以通过使用NamespacePrefixMapper类来重写这些,但是为什么我需要在我的XSD明确定义了默认前缀的情况下手动执行此操作呢?在我当前的XML中有大量的前缀,因此在初始xjc生成之后,手工更改包级声明或类注释也是一个巨大的返工。我正在处理一个包含10+个XSD导入和5000+个元素以及几十个根元素的基XSD。

endpoint系统不在我们的控制范围之内,所以我必须关心XML中使用了什么前缀,因为它们没有适当的XML处理实现。

这有什么捷径吗?感谢所有的投入。

共有1个答案

唐焕
2023-03-14

最简单的捷径是让XML的生产者和消费者使用标准的XML处理工具。你说这在你的情况下行不通。

结果是,为了使数据使用者不需要学习使用现有的现成的XML工具,您将不得不不仅生成正确的XML,而且生成符合大多数XML软件所设计的抽象级别上的附加任意特定约束的正确的XML。如果他们是很好的客户,那可能是值得的。

具体地说,我可以(1)找到一种方法来自动化您想要对JAXB生成的类进行的配置更改,或者(2)编写一个简单的SAX过滤器来规范化名称空间前缀,并在数据离开时通过该过滤器运行数据。第二种方法的优点是将数据使用者的关注点转移到您自己处理的外围,并让您更好地专注于您更关心的事情。

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

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

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

  • 例如,一个XML属性值是,但名称空间前缀“repository”从未在数据集中定义。(不要紧,提供商的最佳实践建议定义它!) 所以当我去解封一个示例集时,具有指定前缀的QName属性(在我上面的示例中为“Repository”)是空的!所以看起来JAXB正在“抛出”那些具有未定义名称空间前缀的属性QName值。我很惊讶,它甚至没有保留当地的名字。 理想情况下,我希望保持该值原样,但看起来我无法在绑

  • 我正在开发一个客户端来使用 Web 服务,但由于某种原因,除非所有命名空间都正确且没有任何前缀,否则我的请求没有得到正确处理。 我所有的类都是由服务提供商使用提供的XSD和WSDL创建的。 NfeDadosMsg.class 包装信息.java TConsStatServ.class package br.inf.portalfiscal.nfe; 包装信息.java 输出xml: 由于某种原因,

  • 2)如果我按照下面的方式编辑package-info,那么它是很好的,但是问题是我创建的是一个JAXB整数元素如下所示,前缀删除没有应用于这些元素