*/
package org.opendaylight.controller.configpusherfeature.internal;
+import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import com.google.common.io.Files;
import java.util.LinkedHashSet;
import java.util.List;
import javax.xml.bind.JAXBException;
+import javax.xml.stream.XMLStreamException;
import org.apache.karaf.features.BundleInfo;
import org.apache.karaf.features.Conditional;
import org.apache.karaf.features.ConfigFileInfo;
*/
public class AbstractFeatureWrapper implements Feature {
private static final Logger LOG = LoggerFactory.getLogger(AbstractFeatureWrapper.class);
+
+ protected static final String CONFIG_FILE_SUFFIX = "xml";
+
protected Feature feature = null;
protected AbstractFeatureWrapper() {
* from the underlying Feature Config files
*/
public LinkedHashSet<FeatureConfigSnapshotHolder> getFeatureConfigSnapshotHolders() throws Exception {
- final LinkedHashSet <FeatureConfigSnapshotHolder> snapShotHolders = new LinkedHashSet<FeatureConfigSnapshotHolder>();
+ final LinkedHashSet <FeatureConfigSnapshotHolder> snapShotHolders = new LinkedHashSet<>();
for(final ConfigFileInfo c: getConfigurationFiles()) {
- try {
- snapShotHolders.add(new FeatureConfigSnapshotHolder(c,this));
- } catch (final JAXBException e) {
- LOG.debug("{} is not a config subsystem config file",c.getFinalname());
+ // Skip non xml files
+ if(Files.getFileExtension(c.getFinalname()).equals(CONFIG_FILE_SUFFIX)) {
+ final Optional<FeatureConfigSnapshotHolder> featureConfigSnapshotHolder = getFeatureConfigSnapshotHolder(c);
+ if(featureConfigSnapshotHolder.isPresent()) {
+ snapShotHolders.add(featureConfigSnapshotHolder.get());
+ }
}
}
return snapShotHolders;
}
+ protected Optional<FeatureConfigSnapshotHolder> getFeatureConfigSnapshotHolder(final ConfigFileInfo c) {
+ try {
+ return Optional.of(new FeatureConfigSnapshotHolder(c, this));
+ } catch (final JAXBException e) {
+ LOG.warn("Unable to parse configuration snapshot. Config from '{}' will be IGNORED. " +
+ "Note that subsequent config files may fail due to this problem. " +
+ "Xml markup in this file needs to be fixed, for detailed information see enclosed exception.",
+ c.getFinalname(), e);
+ } catch (final XMLStreamException e) {
+ // Files that cannot be loaded are ignored as non config subsystem files e.g. jetty.xml
+ LOG.debug("Unable to read configuration file '{}'. Not a configuration snapshot",
+ c.getFinalname(), e);
+ }
+ return Optional.absent();
+ }
+
@Override
public int hashCode() {
final int prime = 31;
*/
package org.opendaylight.controller.configpusherfeature.internal;
+import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import java.util.LinkedHashSet;
import java.util.List;
-import javax.xml.bind.JAXBException;
import org.apache.felix.utils.version.VersionRange;
import org.apache.felix.utils.version.VersionTable;
import org.apache.karaf.features.Dependency;
LinkedHashSet <FeatureConfigSnapshotHolder> snapShotHolders = new LinkedHashSet<FeatureConfigSnapshotHolder>();
for(ChildAwareFeatureWrapper c: getChildFeatures()) {
for(FeatureConfigSnapshotHolder h: c.getFeatureConfigSnapshotHolders()) {
- FeatureConfigSnapshotHolder f;
- try {
- f = new FeatureConfigSnapshotHolder(h,this);
- snapShotHolders.add(f);
- } catch (JAXBException e) {
- LOG.debug("{} is not a config subsystem config file",h.getFileInfo().getFinalname());
+ final Optional<FeatureConfigSnapshotHolder> featureConfigSnapshotHolder = getFeatureConfigSnapshotHolder(h.getFileInfo());
+ if(featureConfigSnapshotHolder.isPresent()) {
+ snapShotHolders.add(featureConfigSnapshotHolder.get());
}
}
}
* @param holder - FeatureConfigSnapshotHolder that we
* @param feature - new
*/
- public FeatureConfigSnapshotHolder(final FeatureConfigSnapshotHolder holder, final Feature feature) throws JAXBException {
+ public FeatureConfigSnapshotHolder(final FeatureConfigSnapshotHolder holder, final Feature feature) throws JAXBException, XMLStreamException {
this(holder.fileInfo,holder.getFeature());
this.featureChain.add(feature);
}
* @param fileInfo - ConfigFileInfo to read into the ConfigSnapshot
* @param feature - Feature the ConfigFileInfo was attached to
*/
- public FeatureConfigSnapshotHolder(final ConfigFileInfo fileInfo, final Feature feature) throws JAXBException {
+ public FeatureConfigSnapshotHolder(final ConfigFileInfo fileInfo, final Feature feature) throws JAXBException, XMLStreamException {
Preconditions.checkNotNull(fileInfo);
Preconditions.checkNotNull(fileInfo.getFinalname());
Preconditions.checkNotNull(feature);
XMLInputFactory xif = XMLInputFactory.newFactory();
xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
xif.setProperty(XMLInputFactory.SUPPORT_DTD, false);
- try {
- XMLStreamReader xsr = xif.createXMLStreamReader(new StreamSource(new File(fileInfo.getFinalname())));
- unmarshalled = ((ConfigSnapshot) um.unmarshal(xsr));
- } catch (final XMLStreamException e) {
- throw new JAXBException(e);
- }
+
+ XMLStreamReader xsr = xif.createXMLStreamReader(new StreamSource(new File(fileInfo.getFinalname())));
+ unmarshalled = ((ConfigSnapshot) um.unmarshal(xsr));
}
/*
* (non-Javadoc)