当前位置: 首页 > 面试题库 >

如何让Groovy和JAXB一起玩得很好

单于楚
2023-03-14
问题内容

我正在尝试让JAXB与我的常规类一起使用,但是,它似乎不起作用,但是Java版本却可以。这是代码…

以下是方案:

如果2和3不加注释,则可以正常工作。

如果1和4不加注释,我得到:

 com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:
       2 counts of IllegalAnnotationExceptions
 groovy.lang.MetaClass is an interface, and JAXB can't handle interfaces.

如果1和5不加注释,我得到:

  javax.xml.bind.JAXBException: class org.oclc.presentations.simplejaxb.PlayerGroovy
        nor any of its super class is known to this context.

有任何想法吗?

Java:

    import javax.xml.bind.annotation.XmlRootElement;

    @XmlRootElement
    public class Player {
    }

Groovy:

    import javax.xml.bind.annotation.XmlRootElement

    @XmlRootElement
    public class PlayerGroovy {
    }

测试:

    import org.junit.Test
    import javax.xml.bind.JAXBContext
    import javax.xml.bind.Marshaller
    import org.junit.Assert

    class PlayerTest {
        @Test
        public void testJaXB(){
            //1 PlayerGroovy player = new PlayerGroovy()
            //2 Player player = new Player()
            StringWriter writer = new StringWriter();
            //3 JAXBContext context = JAXBContext.newInstance(Player.class);
            //4 JAXBContext context = JAXBContext.newInstance(PlayerGroovy.class);
            //5 JAXBContext context = JAXBContext.newInstance(PlayerGroovy.getClass());
            Marshaller m = context.createMarshaller();
            m.marshal(player, writer);
            println(writer)
            Assert.assertTrue(true)
        }
    }

问题答案:

取消注释1和4是使用Groovy设置JAXB的正确方法。它不起作用的原因是每个Groovy类都具有metaClass属性。JAXB试图将其公开为显然失败的JAXB属性。由于您自己没有声明metaClass属性,因此无法对其进行注释以使JAXB忽略它。而是将XmlAccessType设置为NONE。这将禁用JAXB的属性自动发现以将其公开为XML元素。之后,您需要显式声明要公开的任何字段。

例:

@XmlAccessorType( XmlAccessType.NONE )
@XmlRootElement
public class PlayerGroovy {
    @XmlAttribute
    String value
}


 类似资料:
  • 作为再现这个概念的一个非常基本的示例,我有这样一个类: 当我在这里嘲笑它的时候: 我再次得到IllegalStateException错误。 有人有想法吗?

  • 我正在写一个图片素材库,供入门编程的学生玩。(我从DrRget的图片素材库中窃取了这个想法和模式。) https://github.com/dupontmanualhs/dm-image 大部分是用Swing写的(那是< code>master分支),但是我在尝试把它转换成ScalaFX(见< code>scalafx分支),有一些问题。理想情况下,学生应该能够做如下事情: 并显示一个带有火车引擎

  • 我试图在Intellij13中使用一个Gradle项目,但我经常遇到这样的问题: null null 下面是我在运行“Gradle clean build”时得到的一个构建错误: 如果我把所有东西都变成Java,那么我就不会得到任何编译或执行错误。

  • 问题内容: 运行代码时出现该错误。好的,很好-我只是忘记了获取XMLBeans …,但是它已经退休了,我在他们的档案中找不到最新版本。因此,我发现JAXB可以替代,我下载了JAXB并尝试将jar文件添加到Intellij的库中,但是在寻找XMLBeans依赖项时仍然遇到相同的错误。 如何获得Apache POI以使用JAXB代替XMLBeans?为什么JAXB有7种不同的jar文件,而我却找不到它

  • 事实上,我对使用vim lein repl非常满意,但是因为很多人一直说Emacs是Lisps的最佳选择,所以我决定试一试。现在的问题是建立一个Clojure环境,它能做人们一直在谈论的所有花哨的事情——现在我设法安装了Clojure模式和nREPL,并且运行得相当好,但是如果这个实验将会进行到某个地方(在编辑器中拥有repl将是毫无意义的,如果这意味着必须再次独自管理我所有的依赖项(尤其是与类路

  • 如何让jersey和@webservlet协同工作? 泽西资源配置: 在resourceConfig中注册的jersey资源: web servlet 案例1:访问此http://localhost:8088/ResponseFilterweb/login 控制台日志: 访问这个http://localhost:8088/ResponseFilterweb/hello 案例2:更改应用程序配置资源