2012-04-16 10 views
5

Stworzyłem spokojną fasadę usługową opartą na jerseyu 1.12 na serwerze http JDK 1.6. Kiedy zaczynam swoją aplikację w Zaćmienie wszystko działa dobrze. Mogę komunikować się z fasadą bez żadnych problemów, ale kiedy uruchamiam aplikację za pomocą konsoli przy użyciu skryptu startowego, mam dostęp do usługi IncompatibleClassChangeError.Niezawodny serwis komunikacyjny dla firmy Jersey (IncompatibleClassChangeError)

Udało mi się zawęzić problem. Problem polega na wysłaniu odpowiedzi. Ponieważ mogę normalnie komunikować się z usługą (żądanie jest przetwarzane), ale nie otrzymuję odpowiedzi. Czy masz jakieś wskazówki na ten temat?

skrypt startowy

#!/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 

różnicą, że zostanie wyrzucony

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 

Część mojego elewacji

@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; 
} 

Application 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; 
    } 
} 

Edit: classpath

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

Wygląda na problem z klasą ścieżek. Czy możesz opublikować użytą ścieżkę klas? – andih

+0

Dodałem ścieżkę klas. –

+0

Zwykle Eclipse działa z inną wersją klasy lub wersją JVM. – Viruzzo

Odpowiedz

8

Prawdopodobnie masz niezgodną wersję jsr311 w ścieżce klas (patrz 1). Usuń go i powinien działać poprawnie.

+0

, który załatwił sprawę –

Powiązane problemy