2013-10-14 66 views
0

我想在GAE中使用Jersey中的Web服務公開。NoClassDefFoundError在GAE中運行Jersey時

我收到以下錯誤:

[INFO] java.lang.NoClassDefFoundError: sun.misc.Unsafe is a restricted class. Please see the Google App Engine developer's guide for more details. 
[INFO] at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51) 
[INFO] at org.glassfish.jersey.internal.util.collection.ConcurrentHashMapV8.getUnsafe(ConcurrentHashMapV8.java:3502) 
[INFO] at org.glassfish.jersey.internal.util.collection.ConcurrentHashMapV8.<clinit>(ConcurrentHashMapV8.java:3467) 
[INFO] at org.glassfish.jersey.internal.util.collection.DataStructures.createConcurrentMap(DataStructures.java:237) 
[INFO] at org.glassfish.jersey.message.internal.MessageBodyFactory.<init>(MessageBodyFactory.java:197) 

這是一個已知的問題?如果是這樣,是否有解決方法?

我使用Maven和使用以下依賴澤西島添加到項目

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet</artifactId> 
    <version>2.3.1</version> 
</dependency> 

以下是部分從我的web.xml我配置哪裏球衣號碼:

<servlet> 
     <servlet-name>Jersey Web Application</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>com.mycompany.myapplication</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

回答

1

java.misc.Unsafe不在App Engine上的Java運行時中可用。

-1

您應該將java.misc.Unsafe添加到Web應用程序的lib文件夾中,以便它在運行時可用。

或者我建議您使用NetBeans或任何其他IDE並從那裏創建一個REST服務,它會自動配置所需的庫並將它們添加到您的庫文件夾中。

最後,在編譯和部署時檢查您是否使用了正確的JVM。

2

我剛剛遇到了同樣的問題:所有東西都在澤西島2.3.1本地工作,並由於sun.misc.Unsafe類而在appengine上斷了。 我不想回到老版球衣版本,所以我查了球衣來源也許找到了這個補丁。我發現,他們 實際上根據標誌JdkVersion.IS_UNSAFE_SUPPORTED選擇ConcurrentMap實現,導致ConcurrentHashMap(當不受支持) 或ConcurrentHashMapV8(受支持時)。 所以我修補的類JdkVersion通過移除

static { 

    boolean isUnsafeFound; 

    try { 
    isUnsafeFound = Class.forName("sun.misc.Unsafe") != null; 
    } catch (Throwable t) { 
    isUnsafeFound = false; 
    } 

    IS_UNSAFE_SUPPORTED = isUnsafeFound; 
} 

和標誌設置

private static final boolean IS_UNSAFE_SUPPORTED = false; 

有了這個我的應用程序正常工作與AppEngine上球衣2.3.1)

相關問題