@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);
 }