It looks like there is a loadPersistedScssCache method in the com.vaadin.server.VaadinSerlvet that makes a call to javax.servlet.ServletContext.getRealPath(…). This is defined to return null if the WAR is not exploded. The VaadinServlet uses the real path the parse the cache file from the file system directly. In OSGI environments, WAR’s are not exploded and as such there is no real path, and the css themes are not retrievable.
It would be nice if there was a fallback approach in the case that the exploded WAR was not available. Perhaps persisting to a temp directory or the like.