2012-04-16 18 views
5

He creado una fachada de servicio relajante basada en jersey 1.12 en el servidor http JDK 1.6. Cuando inicio mi aplicación en eclipse todo funciona bien. Puedo comunicarme con la fachada sin problemas, pero cuando inicio mi aplicación a través de la consola con mi script de inicio, obtengo un IncompatibleClassChangeError cuando accedo al servicio.Jersey restful service communication (IncompatibleClassChangeError)

Pude reducir el problema. El problema es enviando la respuesta. Porque puedo comunicarme con el servicio normalmente (la solicitud se procesa) pero no recibo una respuesta. ¿Tienes alguna pista sobre esto?

script de inicio

#!/usr/bin/env bash 
libpath= 
for i in $(ls lib/*|grep ".jar"); do 
    libpath=$(echo "$i:$libpath"); 
done 
java -cp "$(echo $libpath)build/jar/myjar.jar" org.....Startup 

Excepción que será lanzado

WARNUNG: Class org....facade.ServiceFacadeImpl is ignored as an instance is registered in the set of singletons 
Call getMutationList: NP_005378 
Exception in thread "pool-1-thread-1" java.lang.IncompatibleClassChangeError: Class javax.ws.rs.core.Response$Status does not implement the requested interface javax.ws.rs.core.Response$StatusType 

Parte de mi fachada

@GET 
@Path("/mutations/{id}/{from}/{size}") 
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
public MutationPosContainer getMutationList(@PathParam("id") String id, 
     @PathParam("from") Integer from, @PathParam("size") Integer size) { 
    ... 
    if (posContainer == null) 
     throw new BadRequestException(); 
    else 
     return posContainer; 
} 

Aplicación Handler

public class SnapDbApplication extends Application { 
    private ServiceFacade facade; 

    public SnapDbApplication(ServiceFacade facade) { 
     this.facade = facade; 
    } 

    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> s = new HashSet<Class<?>>(); 
     s.add(this.facade.getClass()); 
     return s; 
    } 


    @Override 
    public Set<Object> getSingletons() { 
     Set<Object> s = new HashSet<Object>(); 
     s.add(this.facade); 
     return s; 
    } 
} 

Editar: ruta de clase

java -cp 
lib/xstream-1.4.2.jar:lib/xmlbeans-2.3.0.jar:lib/xml-resolver-1.2.jar:lib/xalan-2.7.0.jar: 
lib/wstx-asl-3.2.9.jar:lib/wsdl4j-1.6.2.jar:lib/woden-impl-dom-1.0M9.jar:lib/woden-impl-commons-1.0M9.jar: 
lib/woden-api-1.0M9.jar:lib/tribes-6.0.16.jar:lib/snpxsd.jar: 
lib/regexp-1.2.jar:lib/org.springframework.web.struts-sources-3.1.1.RELEASE.jar: 
lib/org.springframework.web.struts-3.1.1.RELEASE.jar: 
lib/org.springframework.web.servlet-sources-3.1.1.RELEASE.jar: 
lib/org.springframework.web.servlet-3.1.1.RELEASE.jar: 
... 
:lib/jersey-server-1.12.jar:lib/jersey-multipart-1.12.jar:lib/jersey-json-1.12.jar: 
lib/jersey-core-1.12.jar:lib/jersey-client-1.12.jar:lib/jaxws-tools-2.1.3.jar:lib/jaxen-1.1.1.jar:lib/jaxb-xjc-2.1.7.jar: 
lib/jaxb-impl-2.1.7.jar:lib/jaxb-api-2.1.jar: 
lib/jalopy-1.5rc3.jar:lib/httpcore-4.0.jar: 
lib/http-20070405.jar:lib/hamcrest-library-1:build/jar/myapp.jar 
org.startup.Startup 
+0

Parece ser un problema de classpath. ¿Puedes publicar el classpath utilizado? – andih

+0

He añadido el classpath. –

+0

Parece que Eclipse se ejecuta con una ruta de clase o una versión de JVM diferente. – Viruzzo

Respuesta

8

Es probable que tenga una versión incompatible de jsr311 en la ruta de clases (ver 1). Quítalo y debería funcionar bien.

+0

que funcionó –

Cuestiones relacionadas