Java JAXB:如何向使用xjc生成的类添加PropertyChangeListener支持
似乎曾经有一个插件JAXB的Java JAXB:如何向使用xjc生成的类添加PropertyChangeListener支持,java,xml,jaxb,Java,Xml,Jaxb,似乎曾经有一个插件JAXB的xjc名为inject listener code,它向生成的类添加了PropertyChangeListener功能(此处引用,例如:) 但是,根据,该插件已被弃用,不再受支持。我尝试使用列出的代码,但无法使其正常工作(见下文),而且我不确定它是否与当前的Java/JAXB版本兼容(以及它是否会将GPL许可代码注入生成的类中,这是不正确的) 是否有其他方法向生成的类添加PropertyChangeListener支持 我正在使用Java8更新20 尝试运行xjc的详
xjc
名为inject listener code
,它向生成的类添加了PropertyChangeListener
功能(此处引用,例如:)
但是,根据,该插件已被弃用,不再受支持。我尝试使用列出的代码,但无法使其正常工作(见下文),而且我不确定它是否与当前的Java/JAXB版本兼容(以及它是否会将GPL许可代码注入生成的类中,这是不正确的)
是否有其他方法向生成的类添加PropertyChangeListener
支持
我正在使用Java8更新20
尝试运行xjc
的详细信息:我尝试使用Java 8打包的JAXB以及独立的JAXB 2.2.11和2.1.13(因为JAXB 2.2.x似乎已经删除了两个插件所需的com.sun.tools.xjc.outline.Aspect
):
命令行:
xjc foobar.xsd -classpath "xalan-j/xalan.jar;proplistinjector-0.2.2.jar" -Xinject-prop-listeners -no-coll-listeners
使用JAXB2.1.13
Exception in thread "main" javax.xml.transform.TransformerFactoryConfigurationEr ror: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
添加使用Xalan扩展类路径后:
Exception in thread "main" java.lang.NoSuchMethodError:
com.sun.tools.xjc.model.nav.NType.toType(Lcom/sun/tools/xjc/outline/Outline;Lcom/sun/tools/xjc/outline/Aspect;)Lcom/sun/codemodel/JType;
at org.no0ne.jaxbworks.proplistinjector.AbstractField$1TypeList.add(AbstractField.java:509)
at org.no0ne.jaxbworks.proplistinjector.AbstractField$1TypeList.add(AbstractField.java:521)
at org.no0ne.jaxbworks.proplistinjector.AbstractField.getType(AbstractField.java:525)
at org.no0ne.jaxbworks.proplistinjector.AbstractField.<init>(AbstractField.java:152)
at org.no0ne.jaxbworks.proplistinjector.AbstractListField.<init>(AbstractListField.java:118)
at org.no0ne.jaxbworks.proplistinjector.UntypedListField.<init>(UntypedListField.java:118)
at org.no0ne.jaxbworks.proplistinjector.UntypedListFieldRenderer.generate(UntypedListFieldRenderer.java:73)
at org.no0ne.jaxbworks.proplistinjector.DefaultFieldRenderer.generate(DefaultFieldRenderer.java:92)
at com.sun.tools.xjc.generator.bean.BeanGenerator.generateFieldDecl(BeanGenerator.java:777)
at com.sun.tools.xjc.generator.bean.BeanGenerator.generateClassBody(BeanGenerator.java:558)
at com.sun.tools.xjc.generator.bean.BeanGenerator.<init>(BeanGenerator.java:261)
at com.sun.tools.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:169)
at com.sun.tools.xjc.model.Model.generateCode(Model.java:288)
at com.sun.tools.xjc.Driver.run(Driver.java:384)
at com.sun.tools.xjc.Driver.run(Driver.java:221)
at com.sun.tools.xjc.Driver._main(Driver.java:144)
at com.sun.tools.xjc.Driver.access$000(Driver.java:82)
at com.sun.tools.xjc.Driver$1.run(Driver.java:103)
线程“main”java.lang.NoSuchMethodError中出现异常:
toType(Lcom/sun/tools/xjc/outline/outline;Lcom/sun/tools/xjc/outline/Aspect;)Lcom/sun/codemodel/JType;
位于org.no0ne.jaxbworks.proplistinjector.AbstractField$1TypeList.add(AbstractField.java:509)
位于org.no0ne.jaxbworks.proplistinjector.AbstractField$1TypeList.add(AbstractField.java:521)
位于org.no0ne.jaxbworks.proplistinjector.AbstractField.getType(AbstractField.java:525)
位于org.no0ne.jaxbworks.proplistinjector.AbstractField。(AbstractField.java:152)
位于org.no0ne.jaxbworks.proplistinjector.AbstractListField。(AbstractListField.java:118)
位于org.no0ne.jaxbworks.proplistinjector.UntypedListField。(UntypedListField.java:118)
位于org.no0ne.jaxbworks.proplistinjector.UntypedListFieldRenderer.generate(UntypedListFieldRenderer.java:73)
位于org.no0ne.jaxbworks.proplistinjector.DefaultFieldRenderer.generate(DefaultFieldRenderer.java:92)
在com.sun.tools.xjc.generator.bean.BeangGenerator.generateFieldDecl(BeangGenerator.java:777)上
位于com.sun.tools.xjc.generator.bean.BeangGenerator.generateClassBody(BeangGenerator.java:558)
位于com.sun.tools.xjc.generator.bean.BeangGenerator。(BeangGenerator.java:261)
位于com.sun.tools.xjc.generator.bean.BeangGenerator.generate(BeangGenerator.java:169)
位于com.sun.tools.xjc.model.model.generateCode(model.java:288)
位于com.sun.tools.xjc.Driver.run(Driver.java:384)
位于com.sun.tools.xjc.Driver.run(Driver.java:221)
位于com.sun.tools.xjc.Driver.\u main(Driver.java:144)
访问com.sun.tools.xjc.Driver.access$000(Driver.java:82)
位于com.sun.tools.xjc.Driver$1.run(Driver.java:103)
使用JAXB 2.2.11:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/xjc/outline/Aspect
at org.no0ne.jaxbworks.proplistinjector.AbstractField.<init>(AbstractField.java:152)
at org.no0ne.jaxbworks.proplistinjector.AbstractListField.<init>(AbstractListField.java:118)
at org.no0ne.jaxbworks.proplistinjector.UntypedListField.<init>(UntypedListField.java:118)
at org.no0ne.jaxbworks.proplistinjector.UntypedListFieldRenderer.generate(UntypedListFieldRenderer.java:73)
at org.no0ne.jaxbworks.proplistinjector.DefaultFieldRenderer.generate(DefaultFieldRenderer.java:92)
at com.sun.tools.xjc.generator.bean.BeanGenerator.generateFieldDecl(BeanGenerator.java:777)
at com.sun.tools.xjc.generator.bean.BeanGenerator.generateClassBody(BeanGenerator.java:558)
at com.sun.tools.xjc.generator.bean.BeanGenerator.<init>(BeanGenerator.java:261)
at com.sun.tools.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:169)
at com.sun.tools.xjc.model.Model.generateCode(Model.java:288)
at com.sun.tools.xjc.Driver.run(Driver.java:384)
at com.sun.tools.xjc.Driver.run(Driver.java:221)
at com.sun.tools.xjc.Driver._main(Driver.java:144)
at com.sun.tools.xjc.Driver.access$000(Driver.java:82)
at com.sun.tools.xjc.Driver$1.run(Driver.java:103)
Caused by: java.lang.ClassNotFoundException: com.sun.tools.xjc.outline.Aspect
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 15 more
线程“main”java.lang.NoClassDefFoundError中的异常:com/sun/tools/xjc/outline/Aspect
位于org.no0ne.jaxbworks.proplistinjector.AbstractField。(AbstractField.java:152)
位于org.no0ne.jaxbworks.proplistinjector.AbstractListField。(AbstractListField.java:118)
位于org.no0ne.jaxbworks.proplistinjector.UntypedListField。(UntypedListField.java:118)
位于org.no0ne.jaxbworks.proplistinjector.UntypedListFieldRenderer.generate(UntypedListFieldRenderer.java:73)
位于org.no0ne.jaxbworks.proplistinjector.DefaultFieldRenderer.generate(DefaultFieldRenderer.java:92)
在com.sun.tools.xjc.generator.bean.BeangGenerator.generateFieldDecl(BeangGenerator.java:777)上
位于com.sun.tools.xjc.generator.bean.BeangGenerator.generateClassBody(BeangGenerator.java:558)
位于com.sun.tools.xjc.generator.bean.BeangGenerator。(BeangGenerator.java:261)
位于com.sun.tools.xjc.generator.bean.BeangGenerator.generate(BeangGenerator.java:169)
位于com.sun.tools.xjc.model.model.generateCode(model.java:288)
位于com.sun.tools.xjc.Driver.run(Driver.java:384)
位于com.sun.tools.xjc.Driver.run(Driver.java:221)
位于com.sun.tools.xjc.Driver.\u main(Driver.java:144)
访问com.sun.tools.xjc.Driver.access$000(Driver.java:82)
位于com.sun.tools.xjc.Driver$1.run(Driver.java:103)
原因:java.lang.ClassNotFoundException:com.sun.tools.xjc.outline.Aspect
在java.net.URLClassLoader$1.run(URLClassLoader.java:372)
在java.net.URLClassLoader$1.run(URLClassLoader.java:361)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:360)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 还有15个
我们是否应该恢复其中一个插件?作为JAXB2基础的一部分:听起来不错。以某种方式收听对/Some元素的更新会非常有帮助。好的,请检查/让我知道哪个插件更“有希望”?我真的说不出来,因为我对Java Beans和/或JAXB还比较陌生。我正在“简单地”寻找一种向JAX绑定添加代码的方法,它允许我监听某些节点上的更改(这将允许我在程序中使用JAXB生成的类作为数据结构。否则,它可能只是用于解析和序列化的容器,我需要“翻译”它在我的程序中转换为自定义数据结构,导致大量代码重复,基本上发挥了
xjc
void)的优势。