gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:45:24 25 4
gpt4 key购买 nike

我试图让 JAXB 与我的一个 groovy 类一起工作,但是,它似乎不起作用,但 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 {
}

时髦的:

    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
}

关于java - 如何让 Groovy 和 JAXB 一起玩得很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1161147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com