2015-04-29 27 views
5

Ho un'app desktop Java che utilizza JAX-WS per chiamare alcuni servizi Web utilizzando l'implementazione Metro JAX-WS predefinita in Java SE: è un'app SWT avviata tramite Java Web Start (.jnlp). I servizi web non hanno avuto alcun problema fino a poco tempo fa, quando molti casi hanno iniziato ad avere gli errori quando le chiamate di servizio web vengono inizializzati:La configurazione della metropolitana non è accessibile in Java SE 8

WARNING: MASM0010: Unable to unmarshall metro config file from location [ jar:file:/C:/Program%20Files%20(x86)/Java/jre1.8.0_31/lib/resources.jar!/com/sun/xml/internal/ws/assembler/jaxws-tubes-default.xml ] 
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "accessDeclaredMembers") 

che alla fine porta a:

SEVERE: MASM0003: Default [ jaxws-tubes-default.xml ] configuration file was not loaded. 

Tutti i clienti sperimentare questo problema si verifica su Windows utilizzando JRE 1.8.31-45, entrambi x86 e x86_64. Ho setacciato questo sito e google, ma non sono riuscito a trovare alcuna informazione su questo problema.

Grazie per qualsiasi chiarimento su questo problema!

+0

Si dovrebbe cercare di individuare la versione che ha introdotto il problema, ovvero quale è la versione Java più recente senza il problema e qual è la versione più vecchia con il problema ... – Holger

+0

Il problema è apparso per la prima volta con 8u45, quindi ho pensato che fosse il problema ... ma ieri è successo con 8u31, quindi non so cosa pensare. – idlegravity

+0

Guarda http://stackoverflow.com/questions/23011547/webservice-client-generation-error-with-jdk8 – heelha

risposta

1

dopo l'aggiornamento da jre 1.7_80 a 1.8.0_51 abbiamo ricevuto l'errore "MASM0003" quando abbiamo provato ad avviare i nostri servizi web. impostazione ContextClassLoader prima di pubblicare risolto il problema:

Thread.currentThread(). SetContextClassLoader (getClass(). GetClassLoader()); endpoint = Endpoint.publish (wsdlUrl, engine);

0

Penso che incontriate lo stesso issue come me.

private static JAXBContext createJAXBContext() throws Exception { 
     return isJDKInternal()?(JAXBContext)AccessController.doPrivileged(new PrivilegedExceptionAction<JAXBContext>() { 
      public JAXBContext run() throws Exception { 
       return JAXBContext.newInstance(MetroConfig.class.getPackage().getName()); 
      } 
     }, createSecurityContext()):JAXBContext.newInstance(MetroConfig.class.getPackage().getName()); 
} 

private static AccessControlContext createSecurityContext() { 
    PermissionCollection perms = new Permissions(); 
    perms.add(new RuntimePermission("accessClassInPackage.com.sun.xml.internal.ws.runtime.config")); 
    perms.add(new ReflectPermission("suppressAccessChecks")); 
    return new AccessControlContext(new ProtectionDomain[]{new ProtectionDomain((CodeSource)null, perms)}); 
} 

che è il codice nel JDK MetroConfigLoader, caricherà la risorsa con privilegi specifici, e questa è la causa principale, in modo da poter usare jaxws-rt che è un terzo lib parte per la sua attuazione,

oppure si può carica la tua risorsa nel tuo caricatore di classi con AccessController.doPrivileged, in modo che tu possa accedere alla tua risorsa.

Problemi correlati