2014-01-29 4 views
2

웹 서비스에 연결하는 Webstart 응용 프로그램이 있습니다.Webstart 응용 프로그램 : SecurityException : setContextClassLoader

Permissions: all-permissions 

을 그리고 JNLP이 있습니다 매니페스트가 웹 서비스에 대한 연결이 만들어 그러나

<security> 
    <all-permissions/> 
</security> 

가 나는 java.lang.SecurityException: setContextClassLoader (아래 전체 스택 트레이스를) 얻을. 응용 프로그램을 직접 실행하면 (webstart없이) 제대로 작동합니다. 문제를 해결하기 위해 설정에서 확인하거나 변경해야 할 것이 있습니까?

참고 : Java 8을 사용하고 있습니다. 응용 프로그램이 빌드 121에서 제대로 작동했지만 빌드 123, 124 또는 125 (최신 버전)와 함께 실패합니다. 그래서 내 설치가 잘되고 버그가 b121과 b123 사이에 도입되었거나 b123에서 버그가 수정되어 설치시 문제가 발생합니다.

org.glassfish.hk2.api.MultiException: A MultiException has 2 exceptions. They are: 
1. java.lang.SecurityException: setContextClassLoader 
2. java.lang.IllegalStateException: Unable to perform operation: create on org.jvnet.hk2.internal.DynamicConfigurationServiceImpl 

    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:362) ~[na:na] 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:454) ~[na:na] 
    at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:119) ~[na:na] 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2296) ~[na:na] 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:590) ~[na:na] 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:577) ~[na:na] 
    at org.glassfish.hk2.utilities.ServiceLocatorUtilities.enablePerThreadScope(ServiceLocatorUtilities.java:89) ~[na:na] 
    at org.glassfish.jersey.internal.inject.Injections._createLocator(Injections.java:144) ~[na:na] 
    at org.glassfish.jersey.internal.inject.Injections.createLocator(Injections.java:137) ~[na:na] 
    at org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:352) ~[na:na] 
    at org.glassfish.jersey.client.ClientConfig$State.access$000(ClientConfig.java:85) ~[na:na] 
    at org.glassfish.jersey.client.ClientConfig$State$3.get(ClientConfig.java:117) ~[na:na] 
    at org.glassfish.jersey.client.ClientConfig$State$3.get(ClientConfig.java:114) ~[na:na] 
    at org.glassfish.jersey.internal.util.collection.Values$LazyValue.get(Values.java:311) ~[na:na] 
    at org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:669) ~[na:na] 
    at org.glassfish.jersey.client.ClientRequest.getConfiguration(ClientRequest.java:214) ~[na:na] 
    at org.glassfish.jersey.client.JerseyInvocation.validateHttpMethodAndEntity(JerseyInvocation.java:124) ~[na:na] 
    at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:97) ~[na:na] 
    at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:90) ~[na:na] 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:396) ~[na:na] 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:296) ~[na:na] 
    at com.assylias.fund.master.impl.DefaultUserMaster.authenticate(DefaultUserMaster.java:55) ~[na:na] 
    at com.assylias.bigblue.gui.javafx.users.Login$AuthenticationTask.call(Login.java:342) ~[na:na] 
    at com.assylias.bigblue.gui.javafx.users.Login$AuthenticationTask.call(Login.java:325) ~[na:na] 
    at javafx.concurrent.Task$TaskCallable.call(Unknown Source) ~[na:na] 
    at java.util.concurrent.FutureTask.run(Unknown Source) ~[na:1.8.0-ea] 
    at java.util.concurrent.CompletableFuture$AsyncRun.exec(Unknown Source) ~[na:1.8.0-ea] 
    at java.util.concurrent.ForkJoinTask.doExec(Unknown Source) ~[na:1.8.0-ea] 
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source) ~[na:1.8.0-ea] 
    at java.util.concurrent.ForkJoinPool.scan(Unknown Source) ~[na:1.8.0-ea] 
    at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source) ~[na:1.8.0-ea] 
    at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source) ~[na:1.8.0-ea] 
Caused by: java.lang.SecurityException: setContextClassLoader 
    at java.util.concurrent.ForkJoinWorkerThread$InnocuousForkJoinWorkerThread.setContextClassLoader(Unknown Source) ~[na:1.8.0-ea] 
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper$2.run(ReflectionHelper.java:1049) ~[na:na] 
    at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0-ea] 
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.setContextClassLoader(ReflectionHelper.java:1045) ~[na:na] 
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1101) ~[na:na] 
    at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:261) ~[na:na] 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:336) ~[na:na] 

답변

3

스택 트레이스를 더 자세히 읽었어야합니다. 예외는 기본, 권한 없음, 작업자 스레드 인 java.util.concurrent.ForkJoinWorkerThread$InnocuousForkJoinWorkerThread.setContextClassLoader에 의해 throw됩니다. 변경된 내용은 this post이며 다음은 diff입니다. 자체 setContextClassLoader를 호출 할 경우 예외를 throw 새로운 InnocuousForkJoinWorkerThread에 의존 기본 ForkJoinPool의 스레드를 사용

CompletableFuture.runAsync(accessWebservice()); 

:

내가와 웹 서비스에 접근했다.

해결 방법 :

CompletableFuture.runAsync(accessWebservice(), executor); //provide an executor