You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by il...@apache.org on 2016/12/15 14:26:29 UTC
svn commit: r1774471 -
/openjpa/branches/2.4.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractCFMetaDataFactory.java
Author: ilgrosso
Date: Thu Dec 15 14:26:29 2016
New Revision: 1774471
URL: http://svn.apache.org/viewvc?rev=1774471&view=rev
Log:
[OPENJPA-2684] Adding support for JAR files via ZipStreamMetaDataIterator
Modified:
openjpa/branches/2.4.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractCFMetaDataFactory.java
Modified: openjpa/branches/2.4.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractCFMetaDataFactory.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.4.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractCFMetaDataFactory.java?rev=1774471&r1=1774470&r2=1774471&view=diff
==============================================================================
--- openjpa/branches/2.4.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractCFMetaDataFactory.java (original)
+++ openjpa/branches/2.4.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractCFMetaDataFactory.java Thu Dec 15 14:26:29 2016
@@ -713,25 +713,52 @@ public abstract class AbstractCFMetaData
log.trace(_loc.get("scanning-vfs-url", url));
}
- final URLConnection conn = url.openConnection();
- final Object vfsContent = conn.getContent();
final URL finalUrl = url;
- File file = AccessController.doPrivileged(new PrivilegedAction<File>() {
- @SuppressWarnings({ "rawtypes", "unchecked" })
- public File run() {
- try {
- Class virtualFileClass = Class.forName("org.jboss.vfs.VirtualFile");
- Method getPhysicalFile = virtualFileClass.getDeclaredMethod("getPhysicalFile");
- return (File) getPhysicalFile.invoke(vfsContent);
- } catch (Exception e) {
- log.error(_loc.get("while-scanning-vfs-url", finalUrl), e);
+ if (url.toString().endsWith(".jar")) {
+ ZipInputStream zis = AccessController.doPrivileged(new PrivilegedAction<ZipInputStream>() {
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ @Override
+ public ZipInputStream run() {
+ try {
+ Class vfs = Class.forName("org.jboss.vfs.VFS");
+ Method getChild = vfs.getDeclaredMethod("getChild", URL.class);
+ Object jarFile = getChild.invoke(null, finalUrl);
+
+ Class virtualFileClass = Class.forName("org.jboss.vfs.VirtualFile");
+ Method openStream = virtualFileClass.getDeclaredMethod("openStream");
+ return (ZipInputStream) openStream.invoke(jarFile);
+ } catch (Exception e) {
+ log.error(_loc.get("while-scanning-vfs-url", finalUrl), e);
+ }
+ return null;
}
- return null;
+ });
+ if (zis != null) {
+ scan(new ZipStreamMetaDataIterator(zis, newMetaDataFilter()), cparser, names, true, url);
}
- });
- if (file != null)
- scan(new FileMetaDataIterator(file, newMetaDataFilter()), cparser, names, true, file);
+ } else {
+ final URLConnection conn = url.openConnection();
+ final Object vfsContent = conn.getContent();
+ File file = AccessController.doPrivileged(new PrivilegedAction<File>() {
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ @Override
+ public File run() {
+ try {
+ Class virtualFileClass = Class.forName("org.jboss.vfs.VirtualFile");
+ Method getPhysicalFile = virtualFileClass.getDeclaredMethod("getPhysicalFile");
+ return (File) getPhysicalFile.invoke(vfsContent);
+ } catch (Exception e) {
+ log.error(_loc.get("while-scanning-vfs-url", finalUrl), e);
+ }
+ return null;
+ }
+ });
+ if (file != null) {
+ scan(new FileMetaDataIterator(file, newMetaDataFilter()), cparser, names, true, file);
+ }
+ }
continue;
}
if ("jar".equals(url.getProtocol())) {