Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB:如何向使用xjc生成的类添加PropertyChangeListener支持_Java_Xml_Jaxb - Fatal编程技术网

Java JAXB:如何向使用xjc生成的类添加PropertyChangeListener支持

Java JAXB:如何向使用xjc生成的类添加PropertyChangeListener支持,java,xml,jaxb,Java,Xml,Jaxb,似乎曾经有一个插件JAXB的xjc名为inject listener code,它向生成的类添加了PropertyChangeListener功能(此处引用,例如:) 但是,根据,该插件已被弃用,不再受支持。我尝试使用列出的代码,但无法使其正常工作(见下文),而且我不确定它是否与当前的Java/JAXB版本兼容(以及它是否会将GPL许可代码注入生成的类中,这是不正确的) 是否有其他方法向生成的类添加PropertyChangeListener支持 我正在使用Java8更新20 尝试运行xjc的详

似乎曾经有一个插件JAXB的
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)的优势。