[
https://issues.apache.org/jira/browse/OLINGO-1398?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
mibo resolved OLINGO-1398.
--------------------------
Resolution: Fixed
> got IllegalArgumentException in spring boot
> --------------------------------------------
>
> Key: OLINGO-1398
> URL: https://issues.apache.org/jira/browse/OLINGO-1398
> Project: Olingo
> Issue Type: Bug
> Components: odata2-annotation
> Affects Versions: V2 2.0.11
> Reporter: HAN BEI
> Assignee: mibo
> Priority: Blocker
> Fix For: V2 2.0.12
>
> Attachments: 0001-OLINGO-1398.patch, bug.jpg
>
>
> I got IllegalArgumentException in spring boot. That is beacause in spring
> boot we package third party dependency as embed jar. The url would be like
> this:jar:file:/C:/works/project/intelligent-claims/code/claims-web/target/sap-claims-service.jar!/BOOT-INF/lib/claims-api-0.0.1-SNAPSHOT.jar!/com/sap/s4/eureka/claims/api/v1/ro/masterdata.
>
> org.apache.olingo.odata2.annotation.processor.core.util.ClassHelper.getClassFqnFromJar(URI,
> String) can not handle this url
> correctly because split.length is 3 not 2 and JarFile(jarFilePath) can not
> handle embed jar path correctly. Please test and reproduce this issue in
> spring boot fat jar use java -jar xxx.
> I made some changes to fix this issue temporarily:
>
> {code:java}
> private static Collection<String> getClassFqnFromJar(final URI uri, final
> String packageToScan) { private static Collection<String>
> getClassFqnFromJar(final URI uri, final String packageToScan) { final
> String jarFilePath; String filepath = uri.toString(); String[] split =
> filepath.split(JAR_RESOURCE_SEPARATOR); if (split.length > 1) {
> jarFilePath = filepath.substring(0, filepath.lastIndexOf("!")+2); } else {
> throw new IllegalArgumentException("Illegal jar file path '" + filepath
> + "'."); } JarFile jarFile = null; try { URL url = new
> URL(jarFilePath); JarURLConnection connection = (JarURLConnection)
> url.openConnection(); jarFile = connection.getJarFile();
> List<String> classFileNames = new ArrayList<String>();
> Enumeration<JarEntry> entries = jarFile.entries();
> while (entries.hasMoreElements()) { JarEntry je =
> entries.nextElement(); String name = je.getName(); if
> (!je.isDirectory() && name.matches(".*" + packageToScan + ".*" +
> CLASSFILE_ENDING)) { String className = name.substring(0,
> name.length() - CLASSFILE_ENDING.length());
> classFileNames.add(className.replace(RESOURCE_SEPARATOR, PACKAGE_SEPARATOR));
> } }
> return classFileNames; } catch (IOException e) { throw new
> IllegalArgumentException("Exception during class loading from path '" +
> jarFilePath + "' with message '" + e.getMessage() + "'.", e); }
> finally { if (jarFile != null) { try { jarFile.close();
> } catch (IOException e) { throw new RuntimeException("Error
> during close of jar file: " + jarFile.getName() + "", e); } }
> } }
> {code}
>
>
--
This message was sent by Atlassian Jira
(v8.20.1#820001)