Java tutorial
/** * Copyright 2014 Zaradai * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.zaradai.bloodstone.model.digester; import com.google.inject.Inject; import com.zaradai.bloodstone.model.BloodstoneLoader; import com.zaradai.bloodstone.model.ModelException; import com.zaradai.bloodstone.model.generated.Bloodstone; import com.zaradai.bloodstone.model.validation.ConfigValidator; import org.apache.commons.digester3.Digester; import org.apache.commons.digester3.binder.DigesterLoader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; public class DigesterBloodstoneLoader implements BloodstoneLoader { private static final Logger LOGGER = LoggerFactory.getLogger(DigesterBloodstoneLoader.class); private final ConfigValidator validator; @Inject DigesterBloodstoneLoader(ConfigValidator validator) { this.validator = validator; } @Override public Bloodstone load(String sourceUri) throws ModelException { Bloodstone res; InputStream inputStream = getStream(sourceUri); Digester digester = getDigester(); try { res = digester.parse(inputStream); } catch (SAXException e) { throw new ModelException("Unable to load config file", e); } catch (IOException e) { throw new ModelException("Unable to parse config file", e); } // do validation if provided if (validator != null) { validator.validate(res); } else { LOGGER.info("Configuration not validated"); } return res; } protected Digester getDigester() { DigesterLoader loader = DigesterLoader.newLoader(new BloodstoneModule()); return loader.newDigester(); } protected InputStream getStream(String sourceUri) { return DigesterBloodstoneLoader.class.getClassLoader().getResourceAsStream(sourceUri); } }