@Override public Object parseDocument(final Document document, final Parse parse) { final Element documentElement = document.getDocumentElement(); // if the default environment factory was already set in the parse PvmEnvironmentFactory pvmEnvironmentFactory = (PvmEnvironmentFactory) parse.getDocumentObject(); if (pvmEnvironmentFactory == null) { pvmEnvironmentFactory = new PvmEnvironmentFactory(); parse.setDocumentObject(pvmEnvironmentFactory); } final WireDefinition environmentFactoryWireDefinition = getApplicationWireDefinition(documentElement, parse); final WireDefinition environmentWireDefinition = getBlockWireDefinition(documentElement, parse); // create the application wire context from the definition final WireContext environmentFactoryWireContext = new WireContext(environmentFactoryWireDefinition, Context.CONTEXTNAME_ENVIRONMENT_FACTORY); // propagate the parser classloader to the application context environmentFactoryWireContext.setClassLoader(classLoader); // configure the default environment factory pvmEnvironmentFactory.setEnvironmentFactoryCtxWireContext(environmentFactoryWireContext); pvmEnvironmentFactory.setEnvironmentCtxWireDefinition(environmentWireDefinition); parse.setDocumentObject(pvmEnvironmentFactory); return pvmEnvironmentFactory; }