1
2
3
4
5
6 package gov.nist.secauto.metaschema.databind.io.xml;
7
8 import gov.nist.secauto.metaschema.core.model.IBoundObject;
9 import gov.nist.secauto.metaschema.core.model.util.XmlEventUtil;
10 import gov.nist.secauto.metaschema.core.qname.IEnhancedQName;
11 import gov.nist.secauto.metaschema.core.util.ObjectUtils;
12 import gov.nist.secauto.metaschema.databind.io.AbstractProblemHandler;
13 import gov.nist.secauto.metaschema.databind.model.IBoundDefinitionModelComplex;
14
15 import org.apache.logging.log4j.LogManager;
16 import org.apache.logging.log4j.Logger;
17
18 import java.util.HashSet;
19 import java.util.Set;
20
21 import javax.xml.stream.events.Attribute;
22
23
24
25
26
27
28
29
30 public class DefaultXmlProblemHandler
31 extends AbstractProblemHandler
32 implements IXmlProblemHandler {
33 private static final Logger LOGGER = LogManager.getLogger(DefaultXmlProblemHandler.class);
34
35 private static final IEnhancedQName XSI_SCHEMA_LOCATION
36 = IEnhancedQName.of("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation");
37 private static final Set<IEnhancedQName> IGNORED_QNAMES;
38
39 static {
40 IGNORED_QNAMES = new HashSet<>();
41 IGNORED_QNAMES.add(XSI_SCHEMA_LOCATION);
42 }
43
44 @Override
45 public boolean handleUnknownAttribute(
46 IBoundDefinitionModelComplex parentDefinition,
47 IBoundObject targetObject,
48 Attribute attribute,
49 IXmlParsingContext parsingContext) {
50 IEnhancedQName qname = IEnhancedQName.of(ObjectUtils.requireNonNull(attribute.getName()));
51
52 if (LOGGER.isWarnEnabled() && !IGNORED_QNAMES.contains(qname)) {
53 LOGGER.atWarn().log("Skipping unrecognized attribute '{}'{}.",
54 qname,
55 XmlEventUtil.generateLocationMessage(
56 ObjectUtils.notNull(attribute.getLocation()),
57 parsingContext.getSource()));
58 }
59
60 return true;
61 }
62 }