[ https://issues.apache.org/jira/browse/OPENJPA-2102?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Heath Thomann resolved OPENJPA-2102. ------------------------------------ Resolution: Fixed Fix Version/s: 2.3.0 2.1.2 > URLs which contains spaces are not properly handled by OpenJPA. > --------------------------------------------------------------- > > Key: OPENJPA-2102 > URL: https://issues.apache.org/jira/browse/OPENJPA-2102 > Project: OpenJPA > Issue Type: Bug > Affects Versions: 2.0.3, 2.1.2, 2.2.0 > Reporter: Heath Thomann > Assignee: Heath Thomann > Priority: Minor > Fix For: 2.1.2, 2.3.0 > > > Take the following lines of code in AbstractCFMetaDataFactory: > if (puUrlString != null && urlString.indexOf(puUrlString) != -1) > urls.add(url); > When either 'urlString' of puUrlString is encoded, and the other is not, the > 'indexOf' will fail even if the URLs are the same if both are either encoded > or decoded. Let me explain: > The 'urlString' is effectively obtained from the ClassLoader, and the > puUrlString is obtained from the OpenJPA configuration. If the user's URL > path contains spaces in it (' '), the URL may be encoded with '%20' (see the > URL and URI javadoc). The Classloader is likely to return encoded URLs. > However, given that the two URLs come from different places, it is not > guaranteed that both URLs will be encoded. If one URL is encoded (e.g. > encoded with a %20 for spaces) and the other URL is not encoded (e.g. the URL > contains spaces), the above 'indexOf' will fail even though technically the > two URLs may ultimately represent the same location when both are encoded (or > decoded). When the 'indexOf' fails the URL is not added to the list of URLs > to process which has downstream effects in that necessary meta data is > missing. For example, in the issue I'm working I saw the following exception > due to missing meta data: > Caused by: org.apache.openjpa.persistence.ArgumentException: Type > "class testcases.res.ejb.subscriber.SubscriberBehavior" loaded by > com.xxx.xx.classloader.CompoundClassLoader@221e275[appwar:RES Test > Subscriber] > Local ClassPath: ....... > Parent: com.xxx.xx.classloader.ProtectionClassLoader@47d3d6 > does not have persistence metadata. > at org.apache.openjpa.jdbc.meta.MappingTool.getMapping(MappingTool.java:687) > at org.apache.openjpa.jdbc.meta.MappingTool.buildSchema(MappingTool.java:753) > at org.apache.openjpa.jdbc.meta.MappingTool.run(MappingTool.java:651) > at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:154) > at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:164) > at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:122) > at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:210) > at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156) > at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227) > Thanks, > Heath Thomann -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira