2012-04-16 32 views
5

Tôi đã tạo một mặt tiền dịch vụ an toàn dựa trên jersey 1.12 trên máy chủ http JDK 1.6. Khi tôi bắt đầu ứng dụng của tôi trong tất cả mọi thứ eclipse hoạt động tốt. Tôi có thể giao tiếp với mặt tiền mà không gặp bất kỳ rắc rối nào nhưng khi tôi khởi động ứng dụng của mình thông qua bàn điều khiển với tập lệnh khởi động của tôi, tôi nhận được một IncompatibleClassChangeError khi tôi truy cập dịch vụ.Giao tiếp dịch vụ an toàn của Jersey (IncompatibleClassChangeError)

Tôi đã có thể thu hẹp sự cố. Vấn đề là gửi phản hồi. Bởi vì tôi có thể giao tiếp với dịch vụ thông thường (yêu cầu được xử lý) nhưng tôi không nhận được phản hồi. Bạn có bất kỳ đầu mối về điều này?

khởi động kịch bản

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

ngoại lệ sẽ được ném

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 

Một phần của mặt tiền của tôi

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

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

Dường như là sự cố classpath. Bạn có thể đăng classpath được sử dụng không? – andih

+0

Tôi đã thêm đường dẫn lớp. –

+0

Eclipse dường như chạy với một classpath khác hoặc phiên bản JVM. – Viruzzo

Trả lời

8

Bạn có thể có một phiên bản không tương thích của jsr311 trong classpath của bạn (xem 1). Loại bỏ nó và nó sẽ chạy tốt.

+0

đã thực hiện thủ thuật –

Các vấn đề liên quan