@Before public void initializeParser() throws Exception { // Initialize the parser XMLMapper mapper = XMLMapper.Factory.create(); testParser = new TestParser(); mapper.registerRootElement(new QName(TEST_NAMESPACE, "test"), testParser); parsingContext = new ExtensionParsingContextImpl(mapper); mainExtension.initializeParsers(parsingContext); addedExtraParsers = false; stack.set(new Stack<String>()); }
@Before public void setupParser() throws Exception { parser = new JBossServiceXmlDescriptorParser(propertyReplacer); xmlMapper = XMLMapper.Factory.create(); xmlMapper.registerRootElement( new QName(JBossServiceXmlDescriptorParser.NAMESPACE, "server"), parser); inputFactory = XMLInputFactory.newInstance(); }
/** * Process a deployment for jboss-service.xml files. Will parse the xml file and attach a * configuration discovered during processing. * * @param phaseContext the deployment unit context * @throws DeploymentUnitProcessingException */ public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { final VirtualFile deploymentRoot = phaseContext.getDeploymentUnit().getAttachment(Attachments.DEPLOYMENT_ROOT).getRoot(); if (deploymentRoot == null || !deploymentRoot.exists()) return; VirtualFile serviceXmlFile = null; if (deploymentRoot.isDirectory()) { serviceXmlFile = deploymentRoot.getChild(SERVICE_DESCRIPTOR_PATH); } else if (deploymentRoot .getName() .toLowerCase(Locale.ENGLISH) .endsWith(SERVICE_DESCRIPTOR_SUFFIX)) { serviceXmlFile = deploymentRoot; } if (serviceXmlFile == null || !serviceXmlFile.exists()) return; final XMLMapper xmlMapper = XMLMapper.Factory.create(); final JBossServiceXmlDescriptorParser jBossServiceXmlDescriptorParser = new JBossServiceXmlDescriptorParser( JBossDescriptorPropertyReplacement.propertyReplacer(phaseContext.getDeploymentUnit())); xmlMapper.registerRootElement( new QName("urn:jboss:service:7.0", "server"), jBossServiceXmlDescriptorParser); xmlMapper.registerRootElement(new QName(null, "server"), jBossServiceXmlDescriptorParser); InputStream xmlStream = null; try { xmlStream = serviceXmlFile.openStream(); final XMLStreamReader reader = inputFactory.createXMLStreamReader(xmlStream); final ParseResult<JBossServiceXmlDescriptor> result = new ParseResult<JBossServiceXmlDescriptor>(); xmlMapper.parseDocument(result, reader); final JBossServiceXmlDescriptor xmlDescriptor = result.getResult(); if (xmlDescriptor != null) phaseContext .getDeploymentUnit() .putAttachment(JBossServiceXmlDescriptor.ATTACHMENT_KEY, xmlDescriptor); else throw SarMessages.MESSAGES.failedXmlParsing(serviceXmlFile); } catch (Exception e) { throw SarMessages.MESSAGES.failedXmlParsing(e, serviceXmlFile); } finally { VFSUtils.safeClose(xmlStream); } }
/** {@inheritDoc} */ @Override public List<ModelNode> load() throws ConfigurationPersistenceException { final XMLMapper mapper = XMLMapper.Factory.create(); mapper.registerRootElement(rootElement, rootParser); final List<ModelNode> updates = new ArrayList<ModelNode>(); try { final FileInputStream fis = new FileInputStream(fileName); try { BufferedInputStream input = new BufferedInputStream(fis); XMLStreamReader streamReader = XMLInputFactory.newInstance().createXMLStreamReader(input); mapper.parseDocument(updates, streamReader); streamReader.close(); input.close(); fis.close(); } finally { safeClose(fis); } } catch (Exception e) { throw new ConfigurationPersistenceException("Failed to parse configuration", e); } return updates; }
@Test public void testParse() throws Exception { final File testXmlFile = getResourceFile( JBossServiceXmlDescriptorParserTestCase.class, "/test/serviceXmlDeployment.jar/META-INF/jboss-service.xml"); final ParseResult<JBossServiceXmlDescriptor> jBossServiceXmlDescriptorParseResult = new ParseResult<JBossServiceXmlDescriptor>(); InputStream inputStream = null; try { inputStream = new FileInputStream(testXmlFile); final XMLStreamReader reader = inputFactory.createXMLStreamReader(inputStream); xmlMapper.parseDocument(jBossServiceXmlDescriptorParseResult, reader); } finally { if (inputStream != null) inputStream.close(); } final JBossServiceXmlDescriptor xmlDescriptor = jBossServiceXmlDescriptorParseResult.getResult(); assertNotNull(xmlDescriptor); final List<JBossServiceConfig> serviceConfigs = xmlDescriptor.getServiceConfigs(); assertEquals(3, serviceConfigs.size()); for (JBossServiceConfig jBossServiceConfig : serviceConfigs) { assertEquals("org.jboss.as.service.LegacyService", jBossServiceConfig.getCode()); if (jBossServiceConfig.getName().equals("jboss.test.service")) { final JBossServiceConstructorConfig constructorConfig = jBossServiceConfig.getConstructorConfig(); assertNotNull(constructorConfig); final JBossServiceConstructorConfig.Argument[] arguments = constructorConfig.getArguments(); assertEquals(1, arguments.length); assertEquals(String.class.getName(), arguments[0].getType()); assertEquals("Test Value", arguments[0].getValue()); } else if (jBossServiceConfig.getName().equals("jboss.test.service.second")) { assertNull(jBossServiceConfig.getConstructorConfig()); final JBossServiceDependencyConfig[] dependencyConfigs = jBossServiceConfig.getDependencyConfigs(); assertEquals(1, dependencyConfigs.length); assertEquals("jboss.test.service", dependencyConfigs[0].getDependencyName()); assertEquals("other", dependencyConfigs[0].getOptionalAttributeName()); final JBossServiceAttributeConfig[] attributeConfigs = jBossServiceConfig.getAttributeConfigs(); assertEquals(1, attributeConfigs.length); assertEquals("somethingElse", attributeConfigs[0].getName()); assertNull(attributeConfigs[0].getInject()); final JBossServiceAttributeConfig.ValueFactory valueFactory = attributeConfigs[0].getValueFactory(); assertNotNull(valueFactory); assertEquals("jboss.test.service", valueFactory.getBeanName()); assertEquals("appendSomethingElse", valueFactory.getMethodName()); final JBossServiceAttributeConfig.ValueFactoryParameter[] parameters = valueFactory.getParameters(); assertEquals(1, parameters.length); assertEquals("java.lang.String", parameters[0].getType()); assertEquals("more value", parameters[0].getValue()); } else if (jBossServiceConfig.getName().equals("jboss.test.service.third")) { assertNull(jBossServiceConfig.getConstructorConfig()); final JBossServiceAttributeConfig[] attributeConfigs = jBossServiceConfig.getAttributeConfigs(); assertEquals(2, attributeConfigs.length); assertEquals("other", attributeConfigs[0].getName()); assertNull(attributeConfigs[0].getValueFactory()); final JBossServiceAttributeConfig.Inject inject = attributeConfigs[0].getInject(); assertNotNull(inject); assertEquals("jboss.test.service.second", inject.getBeanName()); assertEquals("other", inject.getPropertyName()); assertEquals("somethingElse", attributeConfigs[1].getName()); assertNull(attributeConfigs[1].getValueFactory()); assertNull(attributeConfigs[1].getInject()); assertEquals("Another test value", attributeConfigs[1].getValue()); } } }
@Override public void setSubsystemXmlMapping( final String namespaceUri, final XMLElementReader<List<ModelNode>> reader) { mapper.registerRootElement(new QName(namespaceUri, SUBSYSTEM), reader); }