2012-01-15 13 views
6

Estoy tratando de iniciar el Octopus Arm Benchmark (un punto de referencia de aprendizaje de refuerzo). He descargado el octopus-code-distribution.zip y empecé el pulpo-environment.jar conError de Java con JAXB y Java 1.6

java -jar octopus-environment.jar internal settings.xml 

y tengo la siguiente excepción:

Exception in thread "main" java.lang.NoSuchMethodError: javax.xml.bind.annotation.XmlAccessorType.value()Ljavax/xml/bind/annotation/AccessType; 
at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getAccessType(ClassInfoImpl.java:339) 
at com.sun.xml.bind.v2.model.impl.ClassInfoImpl.getProperties(ClassInfoImpl.java:228) 
at com.sun.xml.bind.v2.model.impl.RuntimeClassInfoImpl.getProperties(RuntimeClassInfoImpl.java:87) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:127) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:49) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:41) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:189) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:204) 
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:327) 
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:198) 
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:76) 
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:55) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202) 
at javax.xml.bind.ContextFinder.find(ContextFinder.java:363) 
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574) 
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522) 
at Main.main(Main.java:41) 

Ya en Google el mensaje de error y parece ser un problema con mi Java versión. Estoy usando Java 1.6, que de alguna manera causa conflictos con la biblioteca JAXB. Creo que funcionaría con Java 1.5. Pero no encontré ninguna solución todavía.

Espero que me puedan ayudar aquí. Algunos antecedentes: estoy usando Ubuntu 11.04 y mi versión de Java es 1.6.0_26.

+3

Java 1.6 incluye la biblioteca JAXB. No use una jarra JAXB externa. –

+0

Consulte si descargó una versión para Java 1.7 y no para Java 1.6 – SHiRKiT

+0

GregS: No es mi código y no quería cambiarlo. SHiRKiT: El código es muy antiguo (~ 2006), así que supongo que es más probable para Java 1.5. – alfa

Respuesta

6

En JAXB 2.0, AccessType se renombra a XmlAccessType (AccessorType también se renombra a XmlAccessorType). Por lo tanto, los usuarios de instantáneas tempranas de JAXB están expuestos a este problema. Así que hay dos opciones:

  1. actualizar el código fuente de esta manera puede utilizar JAXB enviado con Java 6.

  2. omitir la implementación JAXB con la utilizada en su entorno. El archivo de manifiesto del expediente octopus-environment.jar muestra los archivos necesarios se almacenan en la carpeta/lib, para que pueda ejecutar

java -Djava.endorsed.dirs=./lib -jar octopus-environment.jar internal settings.xml

Esto aprovecha la Java Endorsed Standards Override Mechanism por lo que puede anular el JAXB por defecto incluido en Java 6.

+1

No quiero cambiar el código fuente. La opción 2 funciona muy bien. Muy buena explicación. ¡Gracias por tu tiempo! :) – alfa

Cuestiones relacionadas