【问题标题】:How can I ignore a superclass?我怎样才能忽略超类?
【发布时间】:2009-09-06 17:30:07
【问题描述】:

我正在尝试为java.util.logging api 编写网络服务。所以我写了一个继承自LogRecord的类MyLogRecord。我用 JAX-B 注释对这个类进行了注释,包括 @XmlAccessorType(XmlAccessType.NONE),因此它会忽略未注释的字段和属性。当我启动 tomcat 时,我收到 java.util.logging.Level 和其他 java.util.logging 类没有默认构造函数的错误,但我的注释方法都没有引用 Level 类或任何其他 java.util.logging 类。这些被父类引用。

我的子类有它需要定义的一切。如何让 JAX-B 完全忽略父类?

更新:找到another post on this,提示修改父类。这显然是不可能的,因为我正在扩展 java.util 类。有没有办法在不修改超类的情况下做到这一点?

Update2:我发现a thread on java.net 存在类似问题。该线程产生了一个enhancement request,它被标记为another issue 的重复,这导致了@XmlTransient 注释。这些错误报告中的 cmets 让我相信这在当前规范中是不可能的。

【问题讨论】:

  • 为什么不使用组合而不是继承并包装 LogRecord 而不是扩展它?
  • 不得不来回转换似乎比这更笨拙。我认为这不应该是不可能的。我最担心的是为什么 XmlAccessType.NONE 不影响超类。

标签: java jaxb jax-ws


【解决方案1】:

你需要标记父类@XmlTransient。由于父类在 JRE 中,您无法修改,因此您需要一种替代机制。

EclipseLink JAXB (MOXy) 实现提供了一种将元数据表示为您可以使用的 XML 的方法:

http://wiki.eclipse.org/EclipseLink/Examples/MOXy/EclipseLink-OXM.XML

您可以使用注释指定一些元数据,而将其余的指定为 XML。以下是您的文档的外观:

<java-types> 

    <java-type name="java.util.logging.LogRecord" xml-transient="true"/>

</java-types>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多