This is an automated email from the ASF dual-hosted git repository. vy pushed a commit to branch 2.x-docgen in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 8dd9c6c56a3d09aae40a82e565364e8b52fd5194 Author: Volkan Yazıcı <[email protected]> AuthorDate: Tue Mar 19 12:14:57 2024 +0100 Remove references to the old XSD --- .../src/main/resources/Log4j-config.xsd | 1405 -------------------- .../log4j/core/config/xml/XmlSchemaTest.java | 103 -- .../log4j/core/config/xml/XmlConfiguration.java | 3 +- log4j-core/src/main/resources/Log4j-config.xsd | 1405 -------------------- 4 files changed, 1 insertion(+), 2915 deletions(-) diff --git a/log4j-core-test/src/main/resources/Log4j-config.xsd b/log4j-core-test/src/main/resources/Log4j-config.xsd deleted file mode 100644 index a5ae2d28a5..0000000000 --- a/log4j-core-test/src/main/resources/Log4j-config.xsd +++ /dev/null @@ -1,1405 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You 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. - ---> -<schema xmlns="http://www.w3.org/2001/XMLSchema" - xmlns:tns="http://logging.apache.org/log4j/2.0/config" - targetNamespace="http://logging.apache.org/log4j/2.0/config" - elementFormDefault="qualified"> - - <!-- - ================================================================================================================================ - <Configuration> root element - ================================================================================================================================ - --> - <element name="Configuration"> - <complexType> - <sequence> - <choice minOccurs="0"> - <element name="AsyncWaitStrategyFactory"> - <complexType> - <attribute name="class" type="string" use="required"/> - </complexType> - </element> - </choice> - <choice minOccurs="0"> - <element name="CustomLevels" type="tns:CustomLevelsType"> - <unique name="UniqueCustomLevelName"> - <selector xpath="tns:CustomLevel" /> - <field xpath="@name" /> - </unique> - </element> - <element name="CustomLevel" type="tns:CustomLevelType" /> - </choice> - <element name="Properties" minOccurs="0"> - <complexType> - <sequence> - <element name="Property" type="tns:PropertyType" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - </complexType> - <unique name="UniquePropertyName"> - <selector xpath="tns:Property" /> - <field xpath="@name" /> - </unique> - </element> - - <element name="Scripts" minOccurs="0" maxOccurs="unbounded"> - <complexType> - <sequence> - <element name="ScriptFile" minOccurs="0" maxOccurs="unbounded"> - <complexType> - <attribute name="name" type="string" use="required" /> - <attribute name="language" type="string" /> - <attribute name="path" type="string" use="required" /> - <attribute name="charset" type="string" /> - </complexType> - </element> - </sequence> - </complexType> - </element> - - <group ref="tns:FilterChoiceGroup" minOccurs="0" /> - - <element name="Appenders" type="tns:AppendersType" minOccurs="0" /> - - <element name="Loggers" type="tns:LoggersType" minOccurs="0"> - <unique name="UniqueLoggerName"> - <selector xpath="tns:Logger" /> - <field xpath="@name" /> - </unique> - </element> - </sequence> - - <attribute name="advertiser" type="string"> - <annotation> - <documentation>The Advertiser plugin name which will be used to advertise individual FileAppender or SocketAppender configurations. The only - Advertiser plugin provided is 'multicastdns". - </documentation> - </annotation> - </attribute> - <attribute name="dest" type="string"> - <annotation> - <documentation>Either "err" for stderr, "out" for stdout, a file path, or a URL.</documentation> - </annotation> - </attribute> - <attribute name="monitorInterval" type="tns:IntegerType"> - <annotation> - <documentation>The minimum amount of time, in seconds, that must elapse before the file configuration is checked for changes.</documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation>The name of the configuration.</documentation> - </annotation> - </attribute> - <attribute name="packages" type="string"> - <annotation> - <documentation>A comma separated list of package names to search for plugins. Plugins are only loaded once per classloader so changing this value - may not have any effect upon reconfiguration. - </documentation> - </annotation> - </attribute> - <attribute name="schema" type="string"> - <annotation> - <documentation>Identifies the location for the classloader to located the XML Schema to use to validate the configuration. Only valid when strict - is set to true. If not set no schema validation will take place. - </documentation> - </annotation> - </attribute> - <attribute name="shutdownHook"> - <annotation> - <documentation>Specifies whether or not Log4j should automatically shutdown when the JVM shuts down. The shutdown hook is enabled by default but - may be disabled by setting this attribute to "disable". - </documentation> - </annotation> - <simpleType> - <restriction base="string"> - <pattern value="(|disable|\$\{[^{}]+\})" /> - </restriction> - </simpleType> - </attribute> - <attribute name="shutdownTimeout" type="tns:IntegerType" default="0"> - <annotation> - <documentation>Specifies how many milliseconds appenders and background tasks will get to shutdown when the JVM shuts down. Default is zero which - mean that each appender uses its default timeout, and don't wait for background tasks. - </documentation> - </annotation> - </attribute> - <attribute name="status"> - <annotation> - <documentation>The level of internal Log4j events that should be logged to the console. Valid values for this attribute are "trace", "debug", - "info", "warn", "error" and "fatal". - </documentation> - </annotation> - <simpleType> - <restriction base="string"> - <pattern - value="([Tt][Rr][Aa][Cc][Ee]|[Dd][Ee][Bb][Uu][Gg]|[Ii][Nn][Ff][Oo]|[Ww][Aa][Rr][Nn]|[Ee][Rr][Rr][Oo][Rr]|[Ff][Aa][Tt][Aa][Ll]|[Oo][Ff][Ff]|\$\{[^{}]+\})" /> - </restriction> - </simpleType> - </attribute> - <attribute name="strict" type="tns:BooleanType"> - <annotation> - <documentation>Enables the use of the strict XML format. Not supported in JSON configurations.</documentation> - </annotation> - </attribute> - </complexType> - </element> - - <!-- - ================================================================================================================================ - <Configuration><CustomLevels> type and related types - ================================================================================================================================ - --> - <complexType name="CustomLevelsType"> - <sequence> - <element name="CustomLevel" type="tns:CustomLevelType" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - </complexType> - - <complexType name="CustomLevelType"> - <attribute name="name" type="string" use="required" /> - <attribute name="intLevel" type="tns:IntegerType" use="required" /> - </complexType> - - - <!-- - ================================================================================================================================ - Filter types - ================================================================================================================================ - --> - <group name="FilterChoiceGroup"> - <choice> - <element name="Filters"> - <complexType> - <group ref="tns:FilterChoiceGroup" minOccurs="0" maxOccurs="unbounded" /> - </complexType> - </element> - <element name="Filter" type="tns:FilterType" minOccurs="0" /> - <element name="BurstFilter" type="tns:BurstFilterType" minOccurs="0" /> - <element name="ContextMapFilter" type="tns:MapFilterType" minOccurs="0" /> - <element name="DynamicThresholdFilter" type="tns:DynamicThresholdFilterType" minOccurs="0" /> - <element name="MapFilter" type="tns:MapFilterType" minOccurs="0" /> - <element name="MarkerFilter" type="tns:MarkerFilterType" minOccurs="0" /> - <element name="MutableThreadContextMapFilter" type="tns:MutableThreadContextMapFilterType" minOccurs="0" /> - <element name="NoMarkerFilter" type="tns:NoMarkerFilterType" minOccurs="0" /> - <element name="RegexFilter" type="tns:RegexFilterType" minOccurs="0" /> - <element name="ScriptFilter" type="tns:ScriptFilterType" minOccurs="0" /> - <element name="StructuredDataFilter" type="tns:StructuredDataFilterType" minOccurs="0" /> - <element name="ThreadContextMapFilter" type="tns:MapFilterType" minOccurs="0" /> - <element name="ThresholdFilter" type="tns:ThresholdFilterType" minOccurs="0" /> - </choice> - </group> - - <complexType name="AbstractFilterType" abstract="true"> - <attribute name="onMatch" type="tns:FilterActionType" default="NEUTRAL"> - <annotation> - <documentation>Action to take when the filter matches. May be ACCEPT, DENY or NEUTRAL.</documentation> - </annotation> - </attribute> - <attribute name="onMismatch" type="tns:FilterActionType" default="DENY"> - <annotation> - <documentation>Action to take when the filter does not match. May be ACCEPT, DENY or NEUTRAL.</documentation> - </annotation> - </attribute> - </complexType> - - <simpleType name="FilterActionType"> - <restriction base="string"> - <enumeration value="ACCEPT" /> - <enumeration value="accept" /> - <enumeration value="DENY" /> - <enumeration value="deny" /> - <enumeration value="NEUTRAL" /> - <enumeration value="neutral" /> - </restriction> - </simpleType> - - <complexType name="AbstractFilterTypeWithKeyValuePairs" abstract="true"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <sequence> - <element name="KeyValuePair" type="tns:KeyValuePairType" minOccurs="0" maxOccurs="unbounded"> - <annotation> - <documentation> - One or more KeyValuePair elements that define the matching value for the key and the Level to evaluate when the key matches. - </documentation> - </annotation> - </element> - </sequence> - </extension> - </complexContent> - </complexType> - - <complexType name="BurstFilterType" mixed="true"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <attribute name="rate" type="string"> - <annotation> - <documentation>The average number of events per second to allow.</documentation> - </annotation> - </attribute> - <attribute name="maxBurst" type="tns:IntegerType"> - <annotation> - <documentation>The maximum number of events that can occur before events are filtered for exceeding the average rate. The default is 10 times - the rate. - </documentation> - </annotation> - </attribute> - <attribute name="level" type="string" use="required"> - <annotation> - <documentation>Level of messages to be filtered. Anything at or below this level will be filtered out if maxBurst has been exceeded. The - default is WARN meaning any messages that are higher than warn will be logged regardless of the size of a burst. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="FilterType" mixed="true"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <sequence> - <element name="KeyValuePair" type="tns:KeyValuePairType" minOccurs="0" /> - </sequence> - <attribute name="type" type="string" use="required"> - <annotation> - <documentation>The filter type, see https://logging.apache.org/log4j/2.x/manual/filters.html</documentation> - </annotation> - </attribute> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="DynamicThresholdFilterType"> - <complexContent> - <extension base="tns:AbstractFilterTypeWithKeyValuePairs"> - <attribute name="key" type="string" use="required"> - <annotation> - <documentation>The name of the item in the ThreadContext Map to compare.</documentation> - </annotation> - </attribute> - <attribute name="defaultThreshold" type="string" use="required"> - <annotation> - <documentation> - Level of messages to be filtered. The default threshold only applies if the log event contains the specified ThreadContext Map - item and its value does not match any key in the key/value pairs. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="MutableThreadContextMapFilterType"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <attribute name="configLocation" type="string"> - <annotation> - <documentation> - The location of the configuration for the filter. - </documentation> - </annotation> - </attribute> - <attribute name="pollInterval" type="int"> - <annotation> - <documentation> - The frequency in seconds that the configuration file should be checked for modifications. - </documentation> - </annotation> - </attribute> - <attribute name="operator" type="string"> - <annotation> - <documentation> - If the operator is "or" then a match by any one of the key/value pairs will be considered to be a match, otherwise all the - key/value pairs must match. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="MapFilterType"> - <complexContent> - <extension base="tns:AbstractFilterTypeWithKeyValuePairs"> - <attribute name="operator" type="string"> - <annotation> - <documentation> - If the operator is "or" then a match by any one of the key/value pairs will be considered to be a match, otherwise all the - key/value pairs must match. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="MarkerFilterType"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <attribute name="marker" type="string" use="required" /> - </extension> - </complexContent> - </complexType> - - <complexType name="NoMarkerFilterType"> - <complexContent> - <extension base="tns:AbstractFilterType" /> - </complexContent> - </complexType> - - <complexType name="RegexFilterType"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <attribute name="regex" type="string" use="required"> - <annotation> - <documentation>The regular expression.</documentation> - </annotation> - </attribute> - <attribute name="useRawMsg" type="tns:BooleanType" default="false"> - <annotation> - <documentation>If true the unformatted message will be used, otherwise the formatted message will be used.</documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="ScriptFilterType"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <choice> - <element name="Script"> - <complexType mixed="true"> - <attribute name="name" type="string" /> - <attribute name="language" type="string" /> - </complexType> - </element> - <element name="ScriptFile" /> - <element name="ScriptRef" /> - </choice> - </extension> - </complexContent> - </complexType> - - <complexType name="StructuredDataFilterType"> - <complexContent> - <extension base="tns:AbstractFilterTypeWithKeyValuePairs"> - <attribute name="operator" type="string"> - <annotation> - <documentation> - If the operator is "or" then a match by any one of the key/value pairs will be considered to be a match, otherwise all the - key/value pairs must match. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="ThresholdFilterType"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <attribute name="level" type="string" use="required"> - <annotation> - <documentation>A valid Level name to match on.</documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - - <!-- - ================================================================================================================================ - Layout types - ================================================================================================================================ - --> - <complexType name="LayoutType"> - <choice minOccurs="0" maxOccurs="unbounded"> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </choice> - <attribute name="type" type="string" use="required" /> - <anyAttribute processContents="lax" /> - </complexType> - - <complexType name="MessageLayoutType"> - </complexType> - - <complexType name="PatternLayoutType"> - <!-- https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout --> - <sequence> - <choice minOccurs="0"> - <element name="LevelPatternSelector"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="MarkerPatternSelector"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="ScriptPatternSelector"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - </choice> - <element name="Replace" minOccurs="0"> - <complexType> - <attribute name="regex" type="string" /> - <attribute name="replacement" type="string" /> - </complexType> - </element> - <element name="Pattern" type="string" minOccurs="0" /> - </sequence> - <attribute name="alwaysWriteExceptions" type="tns:BooleanType" default="true"> - <annotation> - <documentation>If true exceptions are always written even if the pattern contains no exception conversions.</documentation> - </annotation> - </attribute> - <attribute name="charset" type="string"> - <annotation> - <documentation>The character set to use when converting the syslog String to a byte array.</documentation> - </annotation> - </attribute> - <attribute name="disableAnsi" type="tns:BooleanType" default="false"> - <annotation> - <documentation>If true, do not output ANSI escape codes.</documentation> - </annotation> - </attribute> - <attribute name="footer" type="string"> - <annotation> - <documentation>Footer string to include at the bottom of each log file.</documentation> - </annotation> - </attribute> - <attribute name="header" type="string"> - <annotation> - <documentation>Header string to include at the top of each log file.</documentation> - </annotation> - </attribute> - <attribute name="noConsoleNoAnsi" type="tns:BooleanType" default="false"> - <annotation> - <documentation>If true and System.console() is null, do not output ANSI escape codes.</documentation> - </annotation> - </attribute> - <attribute name="pattern" type="string" /> - </complexType> - - <complexType name="HtmlLayoutType"> - <attribute name="charset" type="string" /> - <attribute name="contentType" type="string" /> - <attribute name="locationInfo" type="tns:BooleanType" /> - <attribute name="title" type="string" /> - <attribute name="fontName" type="string" /> - <attribute name="fontSize" type="string" /> - </complexType> - - <complexType name="AbstractJsonLayoutType"> - <sequence> - <element name="KeyValuePair" type="tns:KeyValuePairType" minOccurs="0" maxOccurs="unbounded"> - <annotation> - <documentation> - One or more KeyValuePair elements that define custom field in the output. - </documentation> - </annotation> - </element> - </sequence> - <attribute name="charset" type="string" /> - <attribute name="complete" type="tns:BooleanType" /> - <attribute name="compact" type="tns:BooleanType" /> - <attribute name="eventEol" type="tns:BooleanType" /> - <attribute name="endOfLine" type="string" /> - <attribute name="includeNullDelimiter" type="tns:BooleanType" /> - <attribute name="includeStacktrace" type="tns:BooleanType" /> - <attribute name="locationInfo" type="tns:BooleanType" /> - <attribute name="properties" type="tns:BooleanType" /> - <attribute name="stacktraceAsString" type="tns:BooleanType" /> - </complexType> - - <complexType name="JCsvParameterLayoutType"> - <complexContent> - <extension base="tns:AbstractJsonLayoutType"> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="GelfLayoutType"> - <sequence minOccurs="0"> - <choice minOccurs="0"> - <element name="LevelPatternSelector"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="MarkerPatternSelector"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="ScriptPatternSelector"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="MessagePattern" type="string" minOccurs="0" /> - </choice> - <element name="KeyValuePair" type="tns:KeyValuePairType" minOccurs="0" maxOccurs="unbounded"> - <annotation> - <documentation> - One or more KeyValuePair elements that define custom field in the output. - </documentation> - </annotation> - </element> - </sequence> - <attribute name="host" type="string" /> - <attribute name="compressionType"> - <simpleType> - <restriction base="string"> - <enumeration value="GZIP" /> - <enumeration value="ZLIB" /> - <enumeration value="OFF" /> - </restriction> - </simpleType> - </attribute> - <attribute name="compressionThreshold" type="tns:IntegerType" /> - <attribute name="includeNullDelimiter" type="tns:BooleanType" /> - <attribute name="includeStacktrace" type="tns:BooleanType" /> - <attribute name="includeThreadContext" type="tns:BooleanType" /> - <attribute name="messagePattern" type="string" /> - <attribute name="threadContextExcludes" type="string" /> - <attribute name="threadContextIncludes" type="string" /> - <attribute name="threadContextPrefix" type="string" /> - <attribute name="mapMessageExcludes" type="string" /> - <attribute name="mapMessageIncludes" type="string" /> - <attribute name="mapPrefix" type="string" /> - <attribute name="omitEmptyFields" type="tns:BooleanType" /> - </complexType> - - <complexType name="JsonLayoutType"> - <complexContent> - <extension base="tns:AbstractJsonLayoutType"> - <attribute name="propertiesAsList" type="tns:BooleanType" /> - <attribute name="includeTimeMillis" type="tns:BooleanType" /> - <attribute name="objectMessageAsJsonObject" type="tns:BooleanType" /> - </extension> - </complexContent> - </complexType> - - <complexType name="XmlLayoutType"> - <complexContent> - <extension base="tns:AbstractJsonLayoutType" /> - </complexContent> - </complexType> - - - <!-- - ================================================================================================================================ - Appender types - ================================================================================================================================ - --> - <complexType name="AppendersType"> - <sequence minOccurs="0" maxOccurs="unbounded"> - <element name="Appender" type="tns:AppenderType" minOccurs="0" /> - <element name="Async" type="tns:AsyncAppenderType" minOccurs="0" /> - <element name="Console" type="tns:ConsoleAppenderType" minOccurs="0" /> - <element name="Flume" type="tns:FlumeAppenderType" minOccurs="0" /> - <element name="JeroMQ" type="tns:JeroMQAppenderType" minOccurs="0" /> - <element name="JMS" type="tns:JMSAppenderType" minOccurs="0" /> - <element name="JMSQueue" type="tns:JMSAppenderType" minOccurs="0" /> - <element name="JMSTopic" type="tns:JMSAppenderType" minOccurs="0" /> - <element name="Kafka" type="tns:KafkaAppenderType" minOccurs="0" /> - <element name="Rewrite" type="tns:RewriteAppenderType" minOccurs="0" /> - <element name="Routing" type="tns:RoutingAppenderType" minOccurs="0" /> - <element name="SMTP" type="tns:SMTPAppenderType" minOccurs="0" /> - <element name="File" type="tns:FileAppenderType" minOccurs="0" /> - <element name="MemoryMappedFile" type="tns:MemoryMappedFileAppenderType" minOccurs="0" /> - <element name="RandomAccessFile" type="tns:RandomAccessFileAppenderType" minOccurs="0" /> - <element name="RollingFile" type="tns:RollingFileAppenderType" minOccurs="0" /> - <element name="RollingRandomAccessFile" type="tns:RollingRandomAccessFileAppenderType" minOccurs="0" /> - <element name="Socket" type="tns:SocketAppenderType" minOccurs="0" /> - <element name="ScriptAppenderSelector" type="tns:ScriptAppenderSelectorType" minOccurs="0" /> - - <!-- undocumented appenders used in unit tests --> - <element name="AlwaysFail" type="tns:GenericAppenderType" minOccurs="0" /> - <element name="Block" type="tns:GenericAppenderType" minOccurs="0" /> - <element name="Blocking" type="tns:GenericAppenderType" minOccurs="0" /> - <element name="Deadlock" type="tns:GenericAppenderType" minOccurs="0" /> - <element name="Failover" minOccurs="0"> - <complexType> - <complexContent> - <extension base="tns:GenericAppenderType"> - <sequence> - <element name="Failovers"> - <complexType> - <sequence> - <any processContents="lax" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - </sequence> - </extension> - </complexContent> - </complexType> - </element> - <element name="FailOnce" type="tns:GenericAppenderType" minOccurs="0" /> - <element name="Hanging" type="tns:GenericAppenderType" minOccurs="0" /> - <element name="List" type="tns:GenericAppenderType" minOccurs="0" /> - </sequence> - </complexType> - - <complexType name="AbstractAppenderType" abstract="true"> - <sequence> - <sequence> - <element name="Property" type="tns:PropertyType" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <choice minOccurs="0"> - <element name="Layout" type="tns:LayoutType" /> - <element name="CsvParameterLayout" type="tns:JCsvParameterLayoutType" /> - <element name="GelfLayout" type="tns:GelfLayoutType" /> - <element name="HtmlLayout" type="tns:HtmlLayoutType" /> - <element name="JsonLayout" type="tns:JsonLayoutType" /> - <element name="MessageLayout" type="tns:MessageLayoutType" /> - <element name="PatternLayout" type="tns:PatternLayoutType" /> - <element name="XmlLayout" type="tns:XmlLayoutType" /> - <!-- Deprecated --> - <element name="SerializedLayout"> - <complexType/> - </element> - </choice> - <group ref="tns:FilterChoiceGroup" minOccurs="0" /> - </sequence> - <attribute name="name" type="string" use="required"> - <annotation> - <documentation>The name of the appender.</documentation> - </annotation> - </attribute> - <attribute name="ignoreExceptions" type="tns:BooleanType" default="true"> - <annotation> - <documentation> - The default is true, causing exceptions encountered while appending events to be internally logged and then ignored. - When set to false - exceptions will be propagated to the caller, instead. - You must set this to false when wrapping this Appender in a FailoverAppender. - </documentation> - </annotation> - </attribute> - </complexType> - - <complexType name="AppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <attribute name="type" type="string" use="required" /> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="GenericAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="AsyncAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#ConsoleAppender --> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <sequence> - <choice minOccurs="0"> - <element name="AppenderRef" type="tns:AppenderRefType" /> - <element name="appender-ref" type="tns:AppenderRefType" /> - </choice> - <choice minOccurs="0"> - <element name="ArrayBlockingQueue"> - <complexType /> - </element> - <element name="DisruptorBlockingQueue"> - <complexType /> - </element> - <element name="JCToolsBlockingQueue"> - <complexType /> - </element> - <element name="LinkedTransferQueue"> - <complexType /> - </element> - </choice> - </sequence> - <attribute name="blocking" type="tns:BooleanType" /> - <attribute name="bufferSize" type="tns:IntegerType" /> - <attribute name="error-ref" type="string" /> - <attribute name="includeLocation" type="tns:BooleanType" /> - <attribute name="shutdownTimeout" type="tns:IntegerType" /> - </extension> - </complexContent> - </complexType> - - <complexType name="ConsoleAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#ConsoleAppender --> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <attribute name="direct" type="tns:BooleanType"> - <annotation> - <documentation> - Write directly to java.io.FileDescriptor and bypass java.lang.System.out/.err. Can give up to 10x performance boost when the - output is redirected to file or other process. Cannot be used with Jansi on Windows. Cannot be used with follow. - </documentation> - </annotation> - </attribute> - <attribute name="follow" type="tns:BooleanType"> - <annotation> - <documentation> - Identifies whether the appender honors reassignments of System.out or System.err via System.setOut or System.setErr made after - configuration. Note that the follow attribute cannot be used with Jansi on Windows. Cannot be used with direct. - </documentation> - </annotation> - </attribute> - <attribute name="target"> - <annotation> - <documentation>Default is SYSTEM_OUT.</documentation> - </annotation> - <simpleType> - <restriction base="string"> - <enumeration value="SYSTEM_ERR" /> - <enumeration value="SYSTEM_OUT" /> - </restriction> - </simpleType> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="FlumeAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <sequence> - <element name="Agent" maxOccurs="unbounded"> - <complexType> - <attribute name="host" type="string" /> - <attribute name="port" type="tns:IntegerType" /> - </complexType> - </element> - <element name="RFC5424Layout"> - <complexType> - <anyAttribute processContents="lax" /> - </complexType> - </element> - </sequence> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="JeroMQAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="JMSAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="KafkaAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <attribute name="key" type="string" /> - <attribute name="retryCount" type="int" /> - <attribute name="syncSend" type="boolean" /> - <attribute name="sendEventTimestamp" type="boolean" /> - <attribute name="topic" type="string" /> - </extension> - </complexContent> - </complexType> - - <complexType name="RewriteAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <sequence> - <choice> - <element name="MapRewritePolicy"> - <complexType> - <sequence> - <element name="KeyValuePair" type="tns:KeyValuePairType" maxOccurs="unbounded"> - <annotation> - <documentation> - One or more KeyValuePair elements that define the matching value for the key and the Level to evaluate when the - key - matches. - </documentation> - </annotation> - </element> - </sequence> - </complexType> - </element> - <element name="PropertiesRewritePolicy"> - <complexType> - <sequence> - <element name="Property" type="tns:PropertyType" maxOccurs="unbounded" /> - </sequence> - </complexType> - </element> - </choice> - <element name="AppenderRef" type="tns:AppenderRefType" minOccurs="0" /> - </sequence> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="RoutingAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#RoutingAppender --> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <sequence> - <element name="Script" minOccurs="0"> - <complexType mixed="true"> - <sequence minOccurs="0"> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="Routes"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="IdlePurgePolicy" minOccurs="0"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - </sequence> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="SMTPAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="AbstractFileAppenderType" abstract="true"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <attribute name="append" type="tns:BooleanType" default="true"> - <annotation> - <documentation> - When true, records will be appended to the end of the file. - When set to false, the file will be cleared before new records are - written. - </documentation> - </annotation> - </attribute> - <attribute name="advertise" type="tns:BooleanType" /> - <attribute name="advertiseURI" type="string" /> - <attribute name="fileName" type="string"> - <annotation> - <documentation> - The name of the file to write to. If the file, or any of its parent directories, do not exist, they will be created. - </documentation> - </annotation> - </attribute> - <attribute name="immediateFlush" type="tns:BooleanType" default="true"> - <annotation> - <documentation> - When set to true, each write will be followed by a flush. - This will guarantee that the data is passed to the operating system for writing; - it does not guarantee that the data is actually written to a physical device - such as a disk drive. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="RandomAccessFileAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#RandomAccessFileAppender --> - <complexContent> - <extension base="tns:AbstractFileAppenderType"> - <attribute name="bufferedIO" type="tns:BooleanType" default="true"> - <annotation> - <documentation> - When true, records will be written to a buffer and the data will be written to disk when the buffer is full or, if - immediateFlush is set, when the record is written. - File locking cannot be used with bufferedIO. - </documentation> - </annotation> - </attribute> - <attribute name="bufferSize" type="tns:IntegerType" default="8192"> - <annotation> - <documentation>When bufferedIO is true, this is the buffer size, the default is 8192 bytes.</documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="FileAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#FileAppender --> - <complexContent> - <extension base="tns:RandomAccessFileAppenderType"> - <attribute name="createOnDemand" type="tns:BooleanType" default="false"> - <annotation> - <documentation> - The appender creates the file on-demand. The appender only creates the file when a log event passes all filters and is routed - to this appender. - </documentation> - </annotation> - </attribute> - <attribute name="filePermissions" type="string"> - <annotation> - <documentation> - File attribute permissions in POSIX format to apply whenever the file is created. - Underlying files system shall support POSIX - file attribute view. - </documentation> - </annotation> - </attribute> - <attribute name="fileOwner" type="tns:BooleanType"> - <annotation> - <documentation> - File owner to define whenever the file is created. - Underlying files system shall support POSIX file attribute view. - </documentation> - </annotation> - </attribute> - <attribute name="fileGroup" type="tns:BooleanType"> - <annotation> - <documentation> - File group to define whenever the file is created. - Underlying files system shall support POSIX file attribute view. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="MemoryMappedFileAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#MemoryMappedFileAppender --> - <complexContent> - <extension base="tns:AbstractFileAppenderType"> - <attribute name="regionLength" type="tns:IntegerType"> - <annotation> - <documentation> The length of the mapped region, defaults to 32 MB (32 * 1024 * 1024 bytes). This parameter must be a value between 256 and - 1,073,741,824 (1 GB or 2^30); values outside this range will be adjusted to the closest valid value. Log4j will round the specified value - up to the nearest power of two. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="RollingFileAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender --> - <complexContent> - <extension base="tns:FileAppenderType"> - <sequence> - <group ref="tns:TriggeringPolicyChoiceGroup" minOccurs="0" /> - <choice minOccurs="0"> - <element name="DefaultRolloverStrategy" type="tns:DefaultRolloverStrategyType" /> - <element name="DirectWriteRolloverStrategy" type="tns:DirectWriteRolloverStrategy" /> - </choice> - </sequence> - <attribute name="filePattern" type="string" use="required"> - <annotation> - <documentation> - The pattern of the file name of the archived log file. - The format of the pattern is dependent on the RolloverPolicy that is - used. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="RollingRandomAccessFileAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender --> - <complexContent> - <extension base="tns:RollingFileAppenderType" /> - </complexContent> - </complexType> - - <complexType name="ScriptAppenderSelectorType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#ScriptAppenderSelector --> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <sequence> - <element name="Script" minOccurs="0"> - <complexType mixed="true"> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="AppenderSet" minOccurs="0"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - </sequence> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="SocketAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender --> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <sequence> - <element name="SocketOptions" minOccurs="0"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="Ssl" minOccurs="0"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - </sequence> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - - <!-- - ================================================================================================================================ - TriggeringPolicy types - ================================================================================================================================ - --> - <group name="TriggeringPolicyChoiceGroup"> - <choice> - <element name="Policies"> - <complexType> - <group ref="tns:TriggeringPolicyChoiceGroup" minOccurs="0" maxOccurs="unbounded" /> - </complexType> - </element> - <element name="CronTriggeringPolicy" type="tns:CronTriggeringPolicyType" /> - <element name="OnStartupTriggeringPolicy" type="tns:OnStartupTriggeringPolicyType" /> - <element name="SizeBasedTriggeringPolicy" type="tns:SizeBasedTriggeringPolicyType" /> - <element name="TimeBasedTriggeringPolicy" type="tns:TimeBasedTriggeringPolicyType" /> - </choice> - </group> - - <complexType name="CronTriggeringPolicyType"> - <attribute name="schedule" type="string"> - <annotation> - <documentation>The cron expression. The expression is the same as what is allowed in the Quartz scheduler.</documentation> - </annotation> - </attribute> - <attribute name="evaluateOnStartup" type="tns:BooleanType"> - <annotation> - <documentation> - On startup the cron expression will be evaluated against the file's last modification timestamp. If the cron expression indicates a - rollover should have occurred between that time and the current time the file will be immediately rolled over. - </documentation> - </annotation> - </attribute> - </complexType> - - <complexType name="OnStartupTriggeringPolicyType"> - <attribute name="minSize" type="tns:IntegerType" default="1"> - <annotation> - <documentation> - The minimum size the file must have to roll over. A size of zero will cause a roll over no matter what the file size is. The default - value is 1, which will prevent rolling over an empty file. - </documentation> - </annotation> - </attribute> - </complexType> - - <complexType name="SizeBasedTriggeringPolicyType"> - <attribute name="size" type="string" use="required"> - <annotation> - <documentation> - The size can be specified in bytes, with the suffix KB, MB or GB, for example 20MB. - </documentation> - </annotation> - </attribute> - </complexType> - - <complexType name="TimeBasedTriggeringPolicyType"> - <attribute name="interval" type="tns:IntegerType" default="1"> - <annotation> - <documentation> - How often a rollover should occur based on the most specific time unit in the date pattern. - </documentation> - </annotation> - </attribute> - <attribute name="modulate" type="tns:BooleanType" default="false"> - <annotation> - <documentation> - Indicates whether the interval should be adjusted to cause the next rollover to occur on the interval boundary. - </documentation> - </annotation> - </attribute> - <attribute name="maxRandomDelay" type="tns:IntegerType" default="0"> - <annotation> - <documentation> - Indicates the maximum number of seconds to randomly delay a rollover. By default, this is 0 which indicates no delay. - </documentation> - </annotation> - </attribute> - </complexType> - - - <!-- - ================================================================================================================================ - RolloverStrategy types - ================================================================================================================================ - --> - <complexType name="DefaultRolloverStrategyType"> - <choice minOccurs="0" maxOccurs="unbounded"> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </choice> - <attribute name="compressionLevel" type="tns:IntegerType"> - <annotation> - <documentation> - Sets the compression level, 0-9, where 0 = none, 1 = best speed, through 9 = best compression. Only implemented for ZIP files. - </documentation> - </annotation> - </attribute> - <attribute name="fileIndex" default="max"> - <annotation> - <documentation> - If set to "max", files with a higher index will be newer than files with a smaller index. - If set to "min", file renaming and the - counter will follow the Fixed Window strategy described above. - </documentation> - </annotation> - <simpleType> - <restriction base="string"> - <enumeration value="max" /> - <enumeration value="nomax" /> - <enumeration value="min" /> - </restriction> - </simpleType> - </attribute> - <attribute name="max" type="tns:IntegerType" default="7"> - <annotation> - <documentation> - The maximum value of the counter. Once this values is reached older archives will be deleted on subsequent rollovers. - </documentation> - </annotation> - </attribute> - <attribute name="min" type="tns:IntegerType" default="1"> - <annotation> - <documentation>The minimum value of the counter.</documentation> - </annotation> - </attribute> - <attribute name="stopCustomActionsOnError" type="tns:BooleanType" /> - <attribute name="tempCompressedFilePattern" type="string"> - <annotation> - <documentation>The pattern of the file name of the archived log file during compression.</documentation> - </annotation> - </attribute> - </complexType> - - <complexType name="DirectWriteRolloverStrategy"> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <attribute name="compressionLevel" type="tns:IntegerType"> - <annotation> - <documentation> - Sets the compression level, 0-9, where 0 = none, 1 = best speed, through 9 = best compression. Only implemented for ZIP files. - </documentation> - </annotation> - </attribute> - <attribute name="maxFiles" type="tns:IntegerType" default="7"> - <annotation> - <documentation> - The maximum number of files to allow in the time period matching the file pattern. If the number of files is exceeded the oldest file - will be deleted. If specified, the value must be greater than 1. If the value is less than zero or omitted then the number of files will not be - limited. - </documentation> - </annotation> - </attribute> - <attribute name="tempCompressedFilePattern" type="string"> - <annotation> - <documentation>The pattern of the file name of the archived log file during compression.</documentation> - </annotation> - </attribute> - <attribute name="stopCustomActionsOnError" type="boolean"> - <annotation> - <documentation>Defines whether to stop executing asynchronous actions if an error occurs.</documentation> - </annotation> - </attribute> - </complexType> - - - <!-- - ================================================================================================================================ - <Configuration><Loggers> type and related types - ================================================================================================================================ - --> - <complexType name="LoggersType" mixed="true"> - <choice minOccurs="0" maxOccurs="unbounded"> - <element name="Root" type="tns:RootType" /> - <element name="AsyncRoot" type="tns:AsyncRootType" /> - <element name="Logger" type="tns:LoggerType" /> - <element name="AsyncLogger" type="tns:AsyncLoggerType" /> - </choice> - </complexType> - - <complexType name="LoggerType"> - <sequence> - <group ref="tns:FilterChoiceGroup" minOccurs="0" /> - <choice minOccurs="0" maxOccurs="unbounded"> - <element name="Property" type="tns:PropertyType" /> - <element name="AppenderRef" type="tns:AppenderRefType" /> - <element name="appender-ref" type="tns:AppenderRefType" /> - </choice> - </sequence> - <attribute name="additivity" type="tns:BooleanType" /> - <attribute name="level" type="string" /> - <attribute name="name" type="string" use="required" /> - <attribute name="includeLocation" type="tns:BooleanType" /> - </complexType> - - <complexType name="AsyncLoggerType"> - <complexContent> - <extension base="tns:LoggerType" /> - </complexContent> - </complexType> - - <complexType name="RootType"> - <choice minOccurs="0" maxOccurs="unbounded"> - <element name="Property" type="tns:PropertyType" /> - <element name="AppenderRef" type="tns:AppenderRefType" /> - <element name="appender-ref" type="tns:AppenderRefType" /> - </choice> - <attribute name="additivity" type="tns:BooleanType" /> - <attribute name="level" type="string" /> - <attribute name="includeLocation" type="tns:BooleanType" /> - </complexType> - - <complexType name="AsyncRootType"> - <complexContent> - <extension base="tns:RootType" /> - </complexContent> - </complexType> - - <complexType name="AppenderRefType"> - <group ref="tns:FilterChoiceGroup" minOccurs="0" /> - <attribute name="level" type="string" /> - <attribute name="ref" type="string" use="required" /> - </complexType> - - - <!-- - ================================================================================================================================ - Reusable Simple Types for Attributes - ================================================================================================================================ - --> - <complexType name="KeyValuePairType"> - <simpleContent> - <extension base="string"> - <attribute name="key" type="string" use="required" /> - <attribute name="value" type="string" use="required" /> - </extension> - </simpleContent> - </complexType> - - <complexType name="PropertyType"> - <simpleContent> - <extension base="string"> - <attribute name="name" type="string" use="required" /> - <attribute name="value" type="string" /> - </extension> - </simpleContent> - </complexType> - - <simpleType name="BooleanType"> - <annotation> - <documentation>Allow boolean values or variable place holders in the form of ${variablename}</documentation> - </annotation> - <restriction base="string"> - <pattern value="(true|false|\$\{[^{}]+\})" /> - </restriction> - </simpleType> - - <simpleType name="IntegerType"> - <annotation> - <documentation>Allow long values or variable place holders in the form of ${variablename}</documentation> - </annotation> - <restriction base="string"> - <pattern value="-?([0-9]+|\$\{[^{}]+\})" /> - </restriction> - </simpleType> - -</schema> diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/xml/XmlSchemaTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/xml/XmlSchemaTest.java deleted file mode 100644 index 685f4bd7bc..0000000000 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/xml/XmlSchemaTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to you 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 org.apache.logging.log4j.core.config.xml; - -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Stream; -import javax.xml.XMLConstants; -import javax.xml.transform.sax.SAXSource; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Validator; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; -import org.xml.sax.Attributes; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.helpers.XMLFilterImpl; -import org.xml.sax.helpers.XMLReaderFactory; - -public class XmlSchemaTest { - - private static final String TARGET_NAMESPACE = "http://logging.apache.org/log4j/2.0/config"; - - private static final List<String> IGNORE_CONFIGS = Arrays.asList( // - "log4j2-arbiters.xml", // Arbiters violate XML schema as they can appear anywhere - "log4j2-environmentArbiters.xml", - "log4j2-scriptArbiters.xml", - "log4j2-systemPropertyArbiters.xml", - "log4j2-selectArbiters.xml", - "log4j-core-gctests/src/test/resources/gcFreeLogging.xml", // has 2 <Pattern> tags defined - "legacy-plugins.xml", // - "logback", // logback configs - "log4j-xinclude", // - "log4j12", // log4j 1.x configs - "perf-CountingNoOpAppender.xml", // uses test-appender CountingNoOp - "reconfiguration-deadlock.xml", // uses test-appender ReconfigurationDeadlockTestAppender - "AsyncWaitStrategy", // uses AsyncWaitStrategyFactory (LOG4J2-3472) - "XmlConfigurationSecurity.xml", // used for testing XML parser; shouldn't be parseable in secure settings - "InvalidConfig.xml", - "InvalidXML.xml"); - - static Stream<Path> testXmlSchemaValidation() throws IOException { - return Files.list(Paths.get("src", "test", "resources")).filter(filePath -> { - final String fileName = filePath.getFileName().toString(); - if (!fileName.endsWith(".xml")) return false; - for (final String ignore : IGNORE_CONFIGS) { - if (fileName.contains(ignore)) return false; - } - return true; - }); - } - - @ParameterizedTest - @MethodSource - public void testXmlSchemaValidation(final Path filePath) throws SAXException, IOException { - final SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - final Schema schema = factory.newSchema(new StreamSource(getClass().getResourceAsStream("/Log4j-config.xsd"))); - final Validator validator = schema.newValidator(); - - final XMLFilterImpl namespaceAdder = new XMLFilterImpl(XMLReaderFactory.createXMLReader()) { - @Override - public void startElement( - final String namespace, final String localName, final String qName, final Attributes atts) - throws SAXException { - super.startElement(TARGET_NAMESPACE, localName, qName, atts); - } - }; - - final InputSource source = new InputSource(filePath.toAbsolutePath().toString()); - final SAXSource transformedSource = new SAXSource(namespaceAdder, source); - assertDoesNotThrow(() -> { - try { - validator.validate(transformedSource); - } catch (SAXParseException e) { - // Wrap the exception to capture the location - throw new RuntimeException(e.toString(), e); - } - }); - } -} diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java index 6f6d2f1233..2eaf3d5429 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java @@ -62,7 +62,6 @@ public class XmlConfiguration extends AbstractConfiguration implements Reconfigu private static final String XINCLUDE_FIXUP_LANGUAGE = "http://apache.org/xml/features/xinclude/fixup-language"; private static final String XINCLUDE_FIXUP_BASE_URIS = "http://apache.org/xml/features/xinclude/fixup-base-uris"; - private static final String LOG4J_XSD = "Log4j-config.xsd"; private final List<Status> status = new ArrayList<>(); private Element rootElement; @@ -142,7 +141,7 @@ public class XmlConfiguration extends AbstractConfiguration implements Reconfigu try (final InputStream is = Loader.getResourceAsStream(schemaResource, XmlConfiguration.class.getClassLoader())) { if (is != null) { - final javax.xml.transform.Source src = new StreamSource(is, LOG4J_XSD); + final javax.xml.transform.Source src = new StreamSource(is); final SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = null; try { diff --git a/log4j-core/src/main/resources/Log4j-config.xsd b/log4j-core/src/main/resources/Log4j-config.xsd deleted file mode 100644 index a5ae2d28a5..0000000000 --- a/log4j-core/src/main/resources/Log4j-config.xsd +++ /dev/null @@ -1,1405 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You 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. - ---> -<schema xmlns="http://www.w3.org/2001/XMLSchema" - xmlns:tns="http://logging.apache.org/log4j/2.0/config" - targetNamespace="http://logging.apache.org/log4j/2.0/config" - elementFormDefault="qualified"> - - <!-- - ================================================================================================================================ - <Configuration> root element - ================================================================================================================================ - --> - <element name="Configuration"> - <complexType> - <sequence> - <choice minOccurs="0"> - <element name="AsyncWaitStrategyFactory"> - <complexType> - <attribute name="class" type="string" use="required"/> - </complexType> - </element> - </choice> - <choice minOccurs="0"> - <element name="CustomLevels" type="tns:CustomLevelsType"> - <unique name="UniqueCustomLevelName"> - <selector xpath="tns:CustomLevel" /> - <field xpath="@name" /> - </unique> - </element> - <element name="CustomLevel" type="tns:CustomLevelType" /> - </choice> - <element name="Properties" minOccurs="0"> - <complexType> - <sequence> - <element name="Property" type="tns:PropertyType" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - </complexType> - <unique name="UniquePropertyName"> - <selector xpath="tns:Property" /> - <field xpath="@name" /> - </unique> - </element> - - <element name="Scripts" minOccurs="0" maxOccurs="unbounded"> - <complexType> - <sequence> - <element name="ScriptFile" minOccurs="0" maxOccurs="unbounded"> - <complexType> - <attribute name="name" type="string" use="required" /> - <attribute name="language" type="string" /> - <attribute name="path" type="string" use="required" /> - <attribute name="charset" type="string" /> - </complexType> - </element> - </sequence> - </complexType> - </element> - - <group ref="tns:FilterChoiceGroup" minOccurs="0" /> - - <element name="Appenders" type="tns:AppendersType" minOccurs="0" /> - - <element name="Loggers" type="tns:LoggersType" minOccurs="0"> - <unique name="UniqueLoggerName"> - <selector xpath="tns:Logger" /> - <field xpath="@name" /> - </unique> - </element> - </sequence> - - <attribute name="advertiser" type="string"> - <annotation> - <documentation>The Advertiser plugin name which will be used to advertise individual FileAppender or SocketAppender configurations. The only - Advertiser plugin provided is 'multicastdns". - </documentation> - </annotation> - </attribute> - <attribute name="dest" type="string"> - <annotation> - <documentation>Either "err" for stderr, "out" for stdout, a file path, or a URL.</documentation> - </annotation> - </attribute> - <attribute name="monitorInterval" type="tns:IntegerType"> - <annotation> - <documentation>The minimum amount of time, in seconds, that must elapse before the file configuration is checked for changes.</documentation> - </annotation> - </attribute> - <attribute name="name" type="string"> - <annotation> - <documentation>The name of the configuration.</documentation> - </annotation> - </attribute> - <attribute name="packages" type="string"> - <annotation> - <documentation>A comma separated list of package names to search for plugins. Plugins are only loaded once per classloader so changing this value - may not have any effect upon reconfiguration. - </documentation> - </annotation> - </attribute> - <attribute name="schema" type="string"> - <annotation> - <documentation>Identifies the location for the classloader to located the XML Schema to use to validate the configuration. Only valid when strict - is set to true. If not set no schema validation will take place. - </documentation> - </annotation> - </attribute> - <attribute name="shutdownHook"> - <annotation> - <documentation>Specifies whether or not Log4j should automatically shutdown when the JVM shuts down. The shutdown hook is enabled by default but - may be disabled by setting this attribute to "disable". - </documentation> - </annotation> - <simpleType> - <restriction base="string"> - <pattern value="(|disable|\$\{[^{}]+\})" /> - </restriction> - </simpleType> - </attribute> - <attribute name="shutdownTimeout" type="tns:IntegerType" default="0"> - <annotation> - <documentation>Specifies how many milliseconds appenders and background tasks will get to shutdown when the JVM shuts down. Default is zero which - mean that each appender uses its default timeout, and don't wait for background tasks. - </documentation> - </annotation> - </attribute> - <attribute name="status"> - <annotation> - <documentation>The level of internal Log4j events that should be logged to the console. Valid values for this attribute are "trace", "debug", - "info", "warn", "error" and "fatal". - </documentation> - </annotation> - <simpleType> - <restriction base="string"> - <pattern - value="([Tt][Rr][Aa][Cc][Ee]|[Dd][Ee][Bb][Uu][Gg]|[Ii][Nn][Ff][Oo]|[Ww][Aa][Rr][Nn]|[Ee][Rr][Rr][Oo][Rr]|[Ff][Aa][Tt][Aa][Ll]|[Oo][Ff][Ff]|\$\{[^{}]+\})" /> - </restriction> - </simpleType> - </attribute> - <attribute name="strict" type="tns:BooleanType"> - <annotation> - <documentation>Enables the use of the strict XML format. Not supported in JSON configurations.</documentation> - </annotation> - </attribute> - </complexType> - </element> - - <!-- - ================================================================================================================================ - <Configuration><CustomLevels> type and related types - ================================================================================================================================ - --> - <complexType name="CustomLevelsType"> - <sequence> - <element name="CustomLevel" type="tns:CustomLevelType" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - </complexType> - - <complexType name="CustomLevelType"> - <attribute name="name" type="string" use="required" /> - <attribute name="intLevel" type="tns:IntegerType" use="required" /> - </complexType> - - - <!-- - ================================================================================================================================ - Filter types - ================================================================================================================================ - --> - <group name="FilterChoiceGroup"> - <choice> - <element name="Filters"> - <complexType> - <group ref="tns:FilterChoiceGroup" minOccurs="0" maxOccurs="unbounded" /> - </complexType> - </element> - <element name="Filter" type="tns:FilterType" minOccurs="0" /> - <element name="BurstFilter" type="tns:BurstFilterType" minOccurs="0" /> - <element name="ContextMapFilter" type="tns:MapFilterType" minOccurs="0" /> - <element name="DynamicThresholdFilter" type="tns:DynamicThresholdFilterType" minOccurs="0" /> - <element name="MapFilter" type="tns:MapFilterType" minOccurs="0" /> - <element name="MarkerFilter" type="tns:MarkerFilterType" minOccurs="0" /> - <element name="MutableThreadContextMapFilter" type="tns:MutableThreadContextMapFilterType" minOccurs="0" /> - <element name="NoMarkerFilter" type="tns:NoMarkerFilterType" minOccurs="0" /> - <element name="RegexFilter" type="tns:RegexFilterType" minOccurs="0" /> - <element name="ScriptFilter" type="tns:ScriptFilterType" minOccurs="0" /> - <element name="StructuredDataFilter" type="tns:StructuredDataFilterType" minOccurs="0" /> - <element name="ThreadContextMapFilter" type="tns:MapFilterType" minOccurs="0" /> - <element name="ThresholdFilter" type="tns:ThresholdFilterType" minOccurs="0" /> - </choice> - </group> - - <complexType name="AbstractFilterType" abstract="true"> - <attribute name="onMatch" type="tns:FilterActionType" default="NEUTRAL"> - <annotation> - <documentation>Action to take when the filter matches. May be ACCEPT, DENY or NEUTRAL.</documentation> - </annotation> - </attribute> - <attribute name="onMismatch" type="tns:FilterActionType" default="DENY"> - <annotation> - <documentation>Action to take when the filter does not match. May be ACCEPT, DENY or NEUTRAL.</documentation> - </annotation> - </attribute> - </complexType> - - <simpleType name="FilterActionType"> - <restriction base="string"> - <enumeration value="ACCEPT" /> - <enumeration value="accept" /> - <enumeration value="DENY" /> - <enumeration value="deny" /> - <enumeration value="NEUTRAL" /> - <enumeration value="neutral" /> - </restriction> - </simpleType> - - <complexType name="AbstractFilterTypeWithKeyValuePairs" abstract="true"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <sequence> - <element name="KeyValuePair" type="tns:KeyValuePairType" minOccurs="0" maxOccurs="unbounded"> - <annotation> - <documentation> - One or more KeyValuePair elements that define the matching value for the key and the Level to evaluate when the key matches. - </documentation> - </annotation> - </element> - </sequence> - </extension> - </complexContent> - </complexType> - - <complexType name="BurstFilterType" mixed="true"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <attribute name="rate" type="string"> - <annotation> - <documentation>The average number of events per second to allow.</documentation> - </annotation> - </attribute> - <attribute name="maxBurst" type="tns:IntegerType"> - <annotation> - <documentation>The maximum number of events that can occur before events are filtered for exceeding the average rate. The default is 10 times - the rate. - </documentation> - </annotation> - </attribute> - <attribute name="level" type="string" use="required"> - <annotation> - <documentation>Level of messages to be filtered. Anything at or below this level will be filtered out if maxBurst has been exceeded. The - default is WARN meaning any messages that are higher than warn will be logged regardless of the size of a burst. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="FilterType" mixed="true"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <sequence> - <element name="KeyValuePair" type="tns:KeyValuePairType" minOccurs="0" /> - </sequence> - <attribute name="type" type="string" use="required"> - <annotation> - <documentation>The filter type, see https://logging.apache.org/log4j/2.x/manual/filters.html</documentation> - </annotation> - </attribute> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="DynamicThresholdFilterType"> - <complexContent> - <extension base="tns:AbstractFilterTypeWithKeyValuePairs"> - <attribute name="key" type="string" use="required"> - <annotation> - <documentation>The name of the item in the ThreadContext Map to compare.</documentation> - </annotation> - </attribute> - <attribute name="defaultThreshold" type="string" use="required"> - <annotation> - <documentation> - Level of messages to be filtered. The default threshold only applies if the log event contains the specified ThreadContext Map - item and its value does not match any key in the key/value pairs. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="MutableThreadContextMapFilterType"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <attribute name="configLocation" type="string"> - <annotation> - <documentation> - The location of the configuration for the filter. - </documentation> - </annotation> - </attribute> - <attribute name="pollInterval" type="int"> - <annotation> - <documentation> - The frequency in seconds that the configuration file should be checked for modifications. - </documentation> - </annotation> - </attribute> - <attribute name="operator" type="string"> - <annotation> - <documentation> - If the operator is "or" then a match by any one of the key/value pairs will be considered to be a match, otherwise all the - key/value pairs must match. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="MapFilterType"> - <complexContent> - <extension base="tns:AbstractFilterTypeWithKeyValuePairs"> - <attribute name="operator" type="string"> - <annotation> - <documentation> - If the operator is "or" then a match by any one of the key/value pairs will be considered to be a match, otherwise all the - key/value pairs must match. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="MarkerFilterType"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <attribute name="marker" type="string" use="required" /> - </extension> - </complexContent> - </complexType> - - <complexType name="NoMarkerFilterType"> - <complexContent> - <extension base="tns:AbstractFilterType" /> - </complexContent> - </complexType> - - <complexType name="RegexFilterType"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <attribute name="regex" type="string" use="required"> - <annotation> - <documentation>The regular expression.</documentation> - </annotation> - </attribute> - <attribute name="useRawMsg" type="tns:BooleanType" default="false"> - <annotation> - <documentation>If true the unformatted message will be used, otherwise the formatted message will be used.</documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="ScriptFilterType"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <choice> - <element name="Script"> - <complexType mixed="true"> - <attribute name="name" type="string" /> - <attribute name="language" type="string" /> - </complexType> - </element> - <element name="ScriptFile" /> - <element name="ScriptRef" /> - </choice> - </extension> - </complexContent> - </complexType> - - <complexType name="StructuredDataFilterType"> - <complexContent> - <extension base="tns:AbstractFilterTypeWithKeyValuePairs"> - <attribute name="operator" type="string"> - <annotation> - <documentation> - If the operator is "or" then a match by any one of the key/value pairs will be considered to be a match, otherwise all the - key/value pairs must match. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="ThresholdFilterType"> - <complexContent> - <extension base="tns:AbstractFilterType"> - <attribute name="level" type="string" use="required"> - <annotation> - <documentation>A valid Level name to match on.</documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - - <!-- - ================================================================================================================================ - Layout types - ================================================================================================================================ - --> - <complexType name="LayoutType"> - <choice minOccurs="0" maxOccurs="unbounded"> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </choice> - <attribute name="type" type="string" use="required" /> - <anyAttribute processContents="lax" /> - </complexType> - - <complexType name="MessageLayoutType"> - </complexType> - - <complexType name="PatternLayoutType"> - <!-- https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout --> - <sequence> - <choice minOccurs="0"> - <element name="LevelPatternSelector"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="MarkerPatternSelector"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="ScriptPatternSelector"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - </choice> - <element name="Replace" minOccurs="0"> - <complexType> - <attribute name="regex" type="string" /> - <attribute name="replacement" type="string" /> - </complexType> - </element> - <element name="Pattern" type="string" minOccurs="0" /> - </sequence> - <attribute name="alwaysWriteExceptions" type="tns:BooleanType" default="true"> - <annotation> - <documentation>If true exceptions are always written even if the pattern contains no exception conversions.</documentation> - </annotation> - </attribute> - <attribute name="charset" type="string"> - <annotation> - <documentation>The character set to use when converting the syslog String to a byte array.</documentation> - </annotation> - </attribute> - <attribute name="disableAnsi" type="tns:BooleanType" default="false"> - <annotation> - <documentation>If true, do not output ANSI escape codes.</documentation> - </annotation> - </attribute> - <attribute name="footer" type="string"> - <annotation> - <documentation>Footer string to include at the bottom of each log file.</documentation> - </annotation> - </attribute> - <attribute name="header" type="string"> - <annotation> - <documentation>Header string to include at the top of each log file.</documentation> - </annotation> - </attribute> - <attribute name="noConsoleNoAnsi" type="tns:BooleanType" default="false"> - <annotation> - <documentation>If true and System.console() is null, do not output ANSI escape codes.</documentation> - </annotation> - </attribute> - <attribute name="pattern" type="string" /> - </complexType> - - <complexType name="HtmlLayoutType"> - <attribute name="charset" type="string" /> - <attribute name="contentType" type="string" /> - <attribute name="locationInfo" type="tns:BooleanType" /> - <attribute name="title" type="string" /> - <attribute name="fontName" type="string" /> - <attribute name="fontSize" type="string" /> - </complexType> - - <complexType name="AbstractJsonLayoutType"> - <sequence> - <element name="KeyValuePair" type="tns:KeyValuePairType" minOccurs="0" maxOccurs="unbounded"> - <annotation> - <documentation> - One or more KeyValuePair elements that define custom field in the output. - </documentation> - </annotation> - </element> - </sequence> - <attribute name="charset" type="string" /> - <attribute name="complete" type="tns:BooleanType" /> - <attribute name="compact" type="tns:BooleanType" /> - <attribute name="eventEol" type="tns:BooleanType" /> - <attribute name="endOfLine" type="string" /> - <attribute name="includeNullDelimiter" type="tns:BooleanType" /> - <attribute name="includeStacktrace" type="tns:BooleanType" /> - <attribute name="locationInfo" type="tns:BooleanType" /> - <attribute name="properties" type="tns:BooleanType" /> - <attribute name="stacktraceAsString" type="tns:BooleanType" /> - </complexType> - - <complexType name="JCsvParameterLayoutType"> - <complexContent> - <extension base="tns:AbstractJsonLayoutType"> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="GelfLayoutType"> - <sequence minOccurs="0"> - <choice minOccurs="0"> - <element name="LevelPatternSelector"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="MarkerPatternSelector"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="ScriptPatternSelector"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="MessagePattern" type="string" minOccurs="0" /> - </choice> - <element name="KeyValuePair" type="tns:KeyValuePairType" minOccurs="0" maxOccurs="unbounded"> - <annotation> - <documentation> - One or more KeyValuePair elements that define custom field in the output. - </documentation> - </annotation> - </element> - </sequence> - <attribute name="host" type="string" /> - <attribute name="compressionType"> - <simpleType> - <restriction base="string"> - <enumeration value="GZIP" /> - <enumeration value="ZLIB" /> - <enumeration value="OFF" /> - </restriction> - </simpleType> - </attribute> - <attribute name="compressionThreshold" type="tns:IntegerType" /> - <attribute name="includeNullDelimiter" type="tns:BooleanType" /> - <attribute name="includeStacktrace" type="tns:BooleanType" /> - <attribute name="includeThreadContext" type="tns:BooleanType" /> - <attribute name="messagePattern" type="string" /> - <attribute name="threadContextExcludes" type="string" /> - <attribute name="threadContextIncludes" type="string" /> - <attribute name="threadContextPrefix" type="string" /> - <attribute name="mapMessageExcludes" type="string" /> - <attribute name="mapMessageIncludes" type="string" /> - <attribute name="mapPrefix" type="string" /> - <attribute name="omitEmptyFields" type="tns:BooleanType" /> - </complexType> - - <complexType name="JsonLayoutType"> - <complexContent> - <extension base="tns:AbstractJsonLayoutType"> - <attribute name="propertiesAsList" type="tns:BooleanType" /> - <attribute name="includeTimeMillis" type="tns:BooleanType" /> - <attribute name="objectMessageAsJsonObject" type="tns:BooleanType" /> - </extension> - </complexContent> - </complexType> - - <complexType name="XmlLayoutType"> - <complexContent> - <extension base="tns:AbstractJsonLayoutType" /> - </complexContent> - </complexType> - - - <!-- - ================================================================================================================================ - Appender types - ================================================================================================================================ - --> - <complexType name="AppendersType"> - <sequence minOccurs="0" maxOccurs="unbounded"> - <element name="Appender" type="tns:AppenderType" minOccurs="0" /> - <element name="Async" type="tns:AsyncAppenderType" minOccurs="0" /> - <element name="Console" type="tns:ConsoleAppenderType" minOccurs="0" /> - <element name="Flume" type="tns:FlumeAppenderType" minOccurs="0" /> - <element name="JeroMQ" type="tns:JeroMQAppenderType" minOccurs="0" /> - <element name="JMS" type="tns:JMSAppenderType" minOccurs="0" /> - <element name="JMSQueue" type="tns:JMSAppenderType" minOccurs="0" /> - <element name="JMSTopic" type="tns:JMSAppenderType" minOccurs="0" /> - <element name="Kafka" type="tns:KafkaAppenderType" minOccurs="0" /> - <element name="Rewrite" type="tns:RewriteAppenderType" minOccurs="0" /> - <element name="Routing" type="tns:RoutingAppenderType" minOccurs="0" /> - <element name="SMTP" type="tns:SMTPAppenderType" minOccurs="0" /> - <element name="File" type="tns:FileAppenderType" minOccurs="0" /> - <element name="MemoryMappedFile" type="tns:MemoryMappedFileAppenderType" minOccurs="0" /> - <element name="RandomAccessFile" type="tns:RandomAccessFileAppenderType" minOccurs="0" /> - <element name="RollingFile" type="tns:RollingFileAppenderType" minOccurs="0" /> - <element name="RollingRandomAccessFile" type="tns:RollingRandomAccessFileAppenderType" minOccurs="0" /> - <element name="Socket" type="tns:SocketAppenderType" minOccurs="0" /> - <element name="ScriptAppenderSelector" type="tns:ScriptAppenderSelectorType" minOccurs="0" /> - - <!-- undocumented appenders used in unit tests --> - <element name="AlwaysFail" type="tns:GenericAppenderType" minOccurs="0" /> - <element name="Block" type="tns:GenericAppenderType" minOccurs="0" /> - <element name="Blocking" type="tns:GenericAppenderType" minOccurs="0" /> - <element name="Deadlock" type="tns:GenericAppenderType" minOccurs="0" /> - <element name="Failover" minOccurs="0"> - <complexType> - <complexContent> - <extension base="tns:GenericAppenderType"> - <sequence> - <element name="Failovers"> - <complexType> - <sequence> - <any processContents="lax" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - </sequence> - </extension> - </complexContent> - </complexType> - </element> - <element name="FailOnce" type="tns:GenericAppenderType" minOccurs="0" /> - <element name="Hanging" type="tns:GenericAppenderType" minOccurs="0" /> - <element name="List" type="tns:GenericAppenderType" minOccurs="0" /> - </sequence> - </complexType> - - <complexType name="AbstractAppenderType" abstract="true"> - <sequence> - <sequence> - <element name="Property" type="tns:PropertyType" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <choice minOccurs="0"> - <element name="Layout" type="tns:LayoutType" /> - <element name="CsvParameterLayout" type="tns:JCsvParameterLayoutType" /> - <element name="GelfLayout" type="tns:GelfLayoutType" /> - <element name="HtmlLayout" type="tns:HtmlLayoutType" /> - <element name="JsonLayout" type="tns:JsonLayoutType" /> - <element name="MessageLayout" type="tns:MessageLayoutType" /> - <element name="PatternLayout" type="tns:PatternLayoutType" /> - <element name="XmlLayout" type="tns:XmlLayoutType" /> - <!-- Deprecated --> - <element name="SerializedLayout"> - <complexType/> - </element> - </choice> - <group ref="tns:FilterChoiceGroup" minOccurs="0" /> - </sequence> - <attribute name="name" type="string" use="required"> - <annotation> - <documentation>The name of the appender.</documentation> - </annotation> - </attribute> - <attribute name="ignoreExceptions" type="tns:BooleanType" default="true"> - <annotation> - <documentation> - The default is true, causing exceptions encountered while appending events to be internally logged and then ignored. - When set to false - exceptions will be propagated to the caller, instead. - You must set this to false when wrapping this Appender in a FailoverAppender. - </documentation> - </annotation> - </attribute> - </complexType> - - <complexType name="AppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <attribute name="type" type="string" use="required" /> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="GenericAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="AsyncAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#ConsoleAppender --> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <sequence> - <choice minOccurs="0"> - <element name="AppenderRef" type="tns:AppenderRefType" /> - <element name="appender-ref" type="tns:AppenderRefType" /> - </choice> - <choice minOccurs="0"> - <element name="ArrayBlockingQueue"> - <complexType /> - </element> - <element name="DisruptorBlockingQueue"> - <complexType /> - </element> - <element name="JCToolsBlockingQueue"> - <complexType /> - </element> - <element name="LinkedTransferQueue"> - <complexType /> - </element> - </choice> - </sequence> - <attribute name="blocking" type="tns:BooleanType" /> - <attribute name="bufferSize" type="tns:IntegerType" /> - <attribute name="error-ref" type="string" /> - <attribute name="includeLocation" type="tns:BooleanType" /> - <attribute name="shutdownTimeout" type="tns:IntegerType" /> - </extension> - </complexContent> - </complexType> - - <complexType name="ConsoleAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#ConsoleAppender --> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <attribute name="direct" type="tns:BooleanType"> - <annotation> - <documentation> - Write directly to java.io.FileDescriptor and bypass java.lang.System.out/.err. Can give up to 10x performance boost when the - output is redirected to file or other process. Cannot be used with Jansi on Windows. Cannot be used with follow. - </documentation> - </annotation> - </attribute> - <attribute name="follow" type="tns:BooleanType"> - <annotation> - <documentation> - Identifies whether the appender honors reassignments of System.out or System.err via System.setOut or System.setErr made after - configuration. Note that the follow attribute cannot be used with Jansi on Windows. Cannot be used with direct. - </documentation> - </annotation> - </attribute> - <attribute name="target"> - <annotation> - <documentation>Default is SYSTEM_OUT.</documentation> - </annotation> - <simpleType> - <restriction base="string"> - <enumeration value="SYSTEM_ERR" /> - <enumeration value="SYSTEM_OUT" /> - </restriction> - </simpleType> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="FlumeAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <sequence> - <element name="Agent" maxOccurs="unbounded"> - <complexType> - <attribute name="host" type="string" /> - <attribute name="port" type="tns:IntegerType" /> - </complexType> - </element> - <element name="RFC5424Layout"> - <complexType> - <anyAttribute processContents="lax" /> - </complexType> - </element> - </sequence> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="JeroMQAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="JMSAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="KafkaAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <attribute name="key" type="string" /> - <attribute name="retryCount" type="int" /> - <attribute name="syncSend" type="boolean" /> - <attribute name="sendEventTimestamp" type="boolean" /> - <attribute name="topic" type="string" /> - </extension> - </complexContent> - </complexType> - - <complexType name="RewriteAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <sequence> - <choice> - <element name="MapRewritePolicy"> - <complexType> - <sequence> - <element name="KeyValuePair" type="tns:KeyValuePairType" maxOccurs="unbounded"> - <annotation> - <documentation> - One or more KeyValuePair elements that define the matching value for the key and the Level to evaluate when the - key - matches. - </documentation> - </annotation> - </element> - </sequence> - </complexType> - </element> - <element name="PropertiesRewritePolicy"> - <complexType> - <sequence> - <element name="Property" type="tns:PropertyType" maxOccurs="unbounded" /> - </sequence> - </complexType> - </element> - </choice> - <element name="AppenderRef" type="tns:AppenderRefType" minOccurs="0" /> - </sequence> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="RoutingAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#RoutingAppender --> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <sequence> - <element name="Script" minOccurs="0"> - <complexType mixed="true"> - <sequence minOccurs="0"> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="Routes"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="IdlePurgePolicy" minOccurs="0"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - </sequence> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="SMTPAppenderType"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="AbstractFileAppenderType" abstract="true"> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <attribute name="append" type="tns:BooleanType" default="true"> - <annotation> - <documentation> - When true, records will be appended to the end of the file. - When set to false, the file will be cleared before new records are - written. - </documentation> - </annotation> - </attribute> - <attribute name="advertise" type="tns:BooleanType" /> - <attribute name="advertiseURI" type="string" /> - <attribute name="fileName" type="string"> - <annotation> - <documentation> - The name of the file to write to. If the file, or any of its parent directories, do not exist, they will be created. - </documentation> - </annotation> - </attribute> - <attribute name="immediateFlush" type="tns:BooleanType" default="true"> - <annotation> - <documentation> - When set to true, each write will be followed by a flush. - This will guarantee that the data is passed to the operating system for writing; - it does not guarantee that the data is actually written to a physical device - such as a disk drive. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="RandomAccessFileAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#RandomAccessFileAppender --> - <complexContent> - <extension base="tns:AbstractFileAppenderType"> - <attribute name="bufferedIO" type="tns:BooleanType" default="true"> - <annotation> - <documentation> - When true, records will be written to a buffer and the data will be written to disk when the buffer is full or, if - immediateFlush is set, when the record is written. - File locking cannot be used with bufferedIO. - </documentation> - </annotation> - </attribute> - <attribute name="bufferSize" type="tns:IntegerType" default="8192"> - <annotation> - <documentation>When bufferedIO is true, this is the buffer size, the default is 8192 bytes.</documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="FileAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#FileAppender --> - <complexContent> - <extension base="tns:RandomAccessFileAppenderType"> - <attribute name="createOnDemand" type="tns:BooleanType" default="false"> - <annotation> - <documentation> - The appender creates the file on-demand. The appender only creates the file when a log event passes all filters and is routed - to this appender. - </documentation> - </annotation> - </attribute> - <attribute name="filePermissions" type="string"> - <annotation> - <documentation> - File attribute permissions in POSIX format to apply whenever the file is created. - Underlying files system shall support POSIX - file attribute view. - </documentation> - </annotation> - </attribute> - <attribute name="fileOwner" type="tns:BooleanType"> - <annotation> - <documentation> - File owner to define whenever the file is created. - Underlying files system shall support POSIX file attribute view. - </documentation> - </annotation> - </attribute> - <attribute name="fileGroup" type="tns:BooleanType"> - <annotation> - <documentation> - File group to define whenever the file is created. - Underlying files system shall support POSIX file attribute view. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="MemoryMappedFileAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#MemoryMappedFileAppender --> - <complexContent> - <extension base="tns:AbstractFileAppenderType"> - <attribute name="regionLength" type="tns:IntegerType"> - <annotation> - <documentation> The length of the mapped region, defaults to 32 MB (32 * 1024 * 1024 bytes). This parameter must be a value between 256 and - 1,073,741,824 (1 GB or 2^30); values outside this range will be adjusted to the closest valid value. Log4j will round the specified value - up to the nearest power of two. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="RollingFileAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender --> - <complexContent> - <extension base="tns:FileAppenderType"> - <sequence> - <group ref="tns:TriggeringPolicyChoiceGroup" minOccurs="0" /> - <choice minOccurs="0"> - <element name="DefaultRolloverStrategy" type="tns:DefaultRolloverStrategyType" /> - <element name="DirectWriteRolloverStrategy" type="tns:DirectWriteRolloverStrategy" /> - </choice> - </sequence> - <attribute name="filePattern" type="string" use="required"> - <annotation> - <documentation> - The pattern of the file name of the archived log file. - The format of the pattern is dependent on the RolloverPolicy that is - used. - </documentation> - </annotation> - </attribute> - </extension> - </complexContent> - </complexType> - - <complexType name="RollingRandomAccessFileAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender --> - <complexContent> - <extension base="tns:RollingFileAppenderType" /> - </complexContent> - </complexType> - - <complexType name="ScriptAppenderSelectorType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#ScriptAppenderSelector --> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <sequence> - <element name="Script" minOccurs="0"> - <complexType mixed="true"> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="AppenderSet" minOccurs="0"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - </sequence> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - <complexType name="SocketAppenderType"> - <!-- https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender --> - <complexContent> - <extension base="tns:AbstractAppenderType"> - <sequence> - <element name="SocketOptions" minOccurs="0"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - <element name="Ssl" minOccurs="0"> - <complexType> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <anyAttribute processContents="lax" /> - </complexType> - </element> - </sequence> - <anyAttribute processContents="lax" /> - </extension> - </complexContent> - </complexType> - - - <!-- - ================================================================================================================================ - TriggeringPolicy types - ================================================================================================================================ - --> - <group name="TriggeringPolicyChoiceGroup"> - <choice> - <element name="Policies"> - <complexType> - <group ref="tns:TriggeringPolicyChoiceGroup" minOccurs="0" maxOccurs="unbounded" /> - </complexType> - </element> - <element name="CronTriggeringPolicy" type="tns:CronTriggeringPolicyType" /> - <element name="OnStartupTriggeringPolicy" type="tns:OnStartupTriggeringPolicyType" /> - <element name="SizeBasedTriggeringPolicy" type="tns:SizeBasedTriggeringPolicyType" /> - <element name="TimeBasedTriggeringPolicy" type="tns:TimeBasedTriggeringPolicyType" /> - </choice> - </group> - - <complexType name="CronTriggeringPolicyType"> - <attribute name="schedule" type="string"> - <annotation> - <documentation>The cron expression. The expression is the same as what is allowed in the Quartz scheduler.</documentation> - </annotation> - </attribute> - <attribute name="evaluateOnStartup" type="tns:BooleanType"> - <annotation> - <documentation> - On startup the cron expression will be evaluated against the file's last modification timestamp. If the cron expression indicates a - rollover should have occurred between that time and the current time the file will be immediately rolled over. - </documentation> - </annotation> - </attribute> - </complexType> - - <complexType name="OnStartupTriggeringPolicyType"> - <attribute name="minSize" type="tns:IntegerType" default="1"> - <annotation> - <documentation> - The minimum size the file must have to roll over. A size of zero will cause a roll over no matter what the file size is. The default - value is 1, which will prevent rolling over an empty file. - </documentation> - </annotation> - </attribute> - </complexType> - - <complexType name="SizeBasedTriggeringPolicyType"> - <attribute name="size" type="string" use="required"> - <annotation> - <documentation> - The size can be specified in bytes, with the suffix KB, MB or GB, for example 20MB. - </documentation> - </annotation> - </attribute> - </complexType> - - <complexType name="TimeBasedTriggeringPolicyType"> - <attribute name="interval" type="tns:IntegerType" default="1"> - <annotation> - <documentation> - How often a rollover should occur based on the most specific time unit in the date pattern. - </documentation> - </annotation> - </attribute> - <attribute name="modulate" type="tns:BooleanType" default="false"> - <annotation> - <documentation> - Indicates whether the interval should be adjusted to cause the next rollover to occur on the interval boundary. - </documentation> - </annotation> - </attribute> - <attribute name="maxRandomDelay" type="tns:IntegerType" default="0"> - <annotation> - <documentation> - Indicates the maximum number of seconds to randomly delay a rollover. By default, this is 0 which indicates no delay. - </documentation> - </annotation> - </attribute> - </complexType> - - - <!-- - ================================================================================================================================ - RolloverStrategy types - ================================================================================================================================ - --> - <complexType name="DefaultRolloverStrategyType"> - <choice minOccurs="0" maxOccurs="unbounded"> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </choice> - <attribute name="compressionLevel" type="tns:IntegerType"> - <annotation> - <documentation> - Sets the compression level, 0-9, where 0 = none, 1 = best speed, through 9 = best compression. Only implemented for ZIP files. - </documentation> - </annotation> - </attribute> - <attribute name="fileIndex" default="max"> - <annotation> - <documentation> - If set to "max", files with a higher index will be newer than files with a smaller index. - If set to "min", file renaming and the - counter will follow the Fixed Window strategy described above. - </documentation> - </annotation> - <simpleType> - <restriction base="string"> - <enumeration value="max" /> - <enumeration value="nomax" /> - <enumeration value="min" /> - </restriction> - </simpleType> - </attribute> - <attribute name="max" type="tns:IntegerType" default="7"> - <annotation> - <documentation> - The maximum value of the counter. Once this values is reached older archives will be deleted on subsequent rollovers. - </documentation> - </annotation> - </attribute> - <attribute name="min" type="tns:IntegerType" default="1"> - <annotation> - <documentation>The minimum value of the counter.</documentation> - </annotation> - </attribute> - <attribute name="stopCustomActionsOnError" type="tns:BooleanType" /> - <attribute name="tempCompressedFilePattern" type="string"> - <annotation> - <documentation>The pattern of the file name of the archived log file during compression.</documentation> - </annotation> - </attribute> - </complexType> - - <complexType name="DirectWriteRolloverStrategy"> - <sequence> - <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> - </sequence> - <attribute name="compressionLevel" type="tns:IntegerType"> - <annotation> - <documentation> - Sets the compression level, 0-9, where 0 = none, 1 = best speed, through 9 = best compression. Only implemented for ZIP files. - </documentation> - </annotation> - </attribute> - <attribute name="maxFiles" type="tns:IntegerType" default="7"> - <annotation> - <documentation> - The maximum number of files to allow in the time period matching the file pattern. If the number of files is exceeded the oldest file - will be deleted. If specified, the value must be greater than 1. If the value is less than zero or omitted then the number of files will not be - limited. - </documentation> - </annotation> - </attribute> - <attribute name="tempCompressedFilePattern" type="string"> - <annotation> - <documentation>The pattern of the file name of the archived log file during compression.</documentation> - </annotation> - </attribute> - <attribute name="stopCustomActionsOnError" type="boolean"> - <annotation> - <documentation>Defines whether to stop executing asynchronous actions if an error occurs.</documentation> - </annotation> - </attribute> - </complexType> - - - <!-- - ================================================================================================================================ - <Configuration><Loggers> type and related types - ================================================================================================================================ - --> - <complexType name="LoggersType" mixed="true"> - <choice minOccurs="0" maxOccurs="unbounded"> - <element name="Root" type="tns:RootType" /> - <element name="AsyncRoot" type="tns:AsyncRootType" /> - <element name="Logger" type="tns:LoggerType" /> - <element name="AsyncLogger" type="tns:AsyncLoggerType" /> - </choice> - </complexType> - - <complexType name="LoggerType"> - <sequence> - <group ref="tns:FilterChoiceGroup" minOccurs="0" /> - <choice minOccurs="0" maxOccurs="unbounded"> - <element name="Property" type="tns:PropertyType" /> - <element name="AppenderRef" type="tns:AppenderRefType" /> - <element name="appender-ref" type="tns:AppenderRefType" /> - </choice> - </sequence> - <attribute name="additivity" type="tns:BooleanType" /> - <attribute name="level" type="string" /> - <attribute name="name" type="string" use="required" /> - <attribute name="includeLocation" type="tns:BooleanType" /> - </complexType> - - <complexType name="AsyncLoggerType"> - <complexContent> - <extension base="tns:LoggerType" /> - </complexContent> - </complexType> - - <complexType name="RootType"> - <choice minOccurs="0" maxOccurs="unbounded"> - <element name="Property" type="tns:PropertyType" /> - <element name="AppenderRef" type="tns:AppenderRefType" /> - <element name="appender-ref" type="tns:AppenderRefType" /> - </choice> - <attribute name="additivity" type="tns:BooleanType" /> - <attribute name="level" type="string" /> - <attribute name="includeLocation" type="tns:BooleanType" /> - </complexType> - - <complexType name="AsyncRootType"> - <complexContent> - <extension base="tns:RootType" /> - </complexContent> - </complexType> - - <complexType name="AppenderRefType"> - <group ref="tns:FilterChoiceGroup" minOccurs="0" /> - <attribute name="level" type="string" /> - <attribute name="ref" type="string" use="required" /> - </complexType> - - - <!-- - ================================================================================================================================ - Reusable Simple Types for Attributes - ================================================================================================================================ - --> - <complexType name="KeyValuePairType"> - <simpleContent> - <extension base="string"> - <attribute name="key" type="string" use="required" /> - <attribute name="value" type="string" use="required" /> - </extension> - </simpleContent> - </complexType> - - <complexType name="PropertyType"> - <simpleContent> - <extension base="string"> - <attribute name="name" type="string" use="required" /> - <attribute name="value" type="string" /> - </extension> - </simpleContent> - </complexType> - - <simpleType name="BooleanType"> - <annotation> - <documentation>Allow boolean values or variable place holders in the form of ${variablename}</documentation> - </annotation> - <restriction base="string"> - <pattern value="(true|false|\$\{[^{}]+\})" /> - </restriction> - </simpleType> - - <simpleType name="IntegerType"> - <annotation> - <documentation>Allow long values or variable place holders in the form of ${variablename}</documentation> - </annotation> - <restriction base="string"> - <pattern value="-?([0-9]+|\$\{[^{}]+\})" /> - </restriction> - </simpleType> - -</schema>
