It's this piece of code in PersistenceUnitParsingDeployer that doesn't like your virtual file:
@Override
protected PersistenceUnitsMetaData parse(VFSDeploymentUnit unit, VirtualFile file, PersistenceUnitsMetaData root)
throws Exception
{
VirtualFile persistenceRoot = file.getParent().getParent();
// We can't pass in a VFS url.
//URL persistenceUnitRootUrl = persistenceRoot.toURL();
// FIXME: is this a supported hack?
// This introduces severe regression, will go the jar: url way (EJB-326)
//URL persistenceUnitRootUrl = new URL("jarjar:" + persistenceRoot.getHandler().toURL());
// http://opensource.atlassian.com/projects/hibernate/browse/EJB-326
URL persistenceUnitRootUrl = persistenceRoot.getHandler().toURL();
assert persistenceUnitRootUrl.getProtocol().equals("jar") || persistenceUnitRootUrl.getProtocol().equals("file") : "expected a jar or file url, but was " + persistenceUnitRootUrl;
URL persistenceXmlUrl = file.toURL();
PersistenceUnitsMetaData metaData = new PersistenceUnitsMetaData(persistenceUnitRootUrl, PersistenceXmlLoader.deploy(persistenceXmlUrl, new HashMap<String, String>(),
new EJB3DTDEntityResolver(), PersistenceUnitTransactionType.JTA));
log.info("Found persistence units " + metaData);
// FIXME: if in EAR then unscoped else scoped
return metaData;
}