<!--
  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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.apache.santuario</groupId>
    <artifactId>xmlsec</artifactId>
    <packaging>bundle</packaging>
    <name>Apache XML Security for Java</name>
    <version>2.3.0-SNAPSHOT</version>
    <description>
        Apache XML Security for Java supports XML-Signature Syntax and Processing,
        W3C Recommendation 12 February 2002, and XML Encryption Syntax and
        Processing, W3C Recommendation 10 December 2002. As of version 1.4,
        the library supports the standard Java API JSR-105: XML Digital Signature APIs.
    </description>
    <url>https://santuario.apache.org/</url>
    <issueManagement>
        <system>JIRA</system>
        <url>https://issues.apache.org/jira/browse/SANTUARIO</url>
    </issueManagement>
    <mailingLists>
        <mailingList>
            <name>Apache Santuario Developer List</name>
            <subscribe>dev-subscribe@santuario.apache.org</subscribe>
            <unsubscribe>
                dev-unsubscribe@santuario.apache.org
            </unsubscribe>
            <post>dev@santuario.apache.org</post>
            <archive>
                http://news.gmane.org/gmane.text.xml.security.devel
            </archive>
        </mailingList>
    </mailingLists>
    <inceptionYear>2000</inceptionYear>
    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <scm>
        <connection>scm:git:https://gitbox.apache.org/repos/asf/santuario-xml-security-java.git</connection>
        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/santuario-xml-security-java.git</developerConnection>
        <url>https://gitbox.apache.org/repos/asf?p=santuario-xml-security-java.git;a=summary</url>
      <tag>HEAD</tag>
  </scm>

    <organization>
        <name>The Apache Software Foundation</name>
        <url>https://www.apache.org/</url>
    </organization>

    <parent>
        <groupId>org.apache</groupId>
        <artifactId>apache</artifactId>
        <version>23</version>
    </parent>

    <build>
        <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
        <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>src/test/java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </testResource>
            <testResource>
                <directory>src/test/resources</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </testResource>
        </testResources>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <rulesets>
                        <ruleset>${basedir}/etc/santuario-pmd-ruleset.xml</ruleset>
                    </rulesets>
                    <linkXRef>false</linkXRef>
                    <sourceEncoding>UTF-8</sourceEncoding>
                    <failOnViolation>true</failOnViolation>
                    <verbose>true</verbose>
                    <includeTests>true</includeTests>
                    <targetJdk>${targetJdk}</targetJdk>
                </configuration>
                <executions>
                    <execution>
                        <id>validate</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                 <groupId>org.gaul</groupId>
                 <artifactId>modernizer-maven-plugin</artifactId>
                 <version>1.5.0</version>
                 <configuration>
                     <javaVersion>${targetJdk}</javaVersion>
                 </configuration>
                 <executions>
                     <execution>
                         <id>modernizer-check</id>
                         <phase>verify</phase>
                         <goals>
                             <goal>modernizer</goal>
                         </goals>
                     </execution>
                 </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>${targetJdk}</source>
                    <target>${targetJdk}</target>
                    <compilerArgs>
                        <arg>-XDcompilePolicy=simple</arg>
                        <!-- TODO Disabled until JDK 14 is supported <arg>-Xplugin:ErrorProne</arg>-->
                    </compilerArgs>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>com.google.errorprone</groupId>
                            <artifactId>error_prone_core</artifactId>
                            <version>2.3.4</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
            
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>jar</goal>
                            <goal>test-jar</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}</outputDirectory>
                            <testClassesDirectory>${project.build.directory}/test-classes</testClassesDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>5.1.1</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Implementation-Title>Apache XML Security</Implementation-Title>
                        <Implementation-Vendor>The Apache Software Foundation</Implementation-Vendor>
                        <Implementation-Vendor-Id>org.apache</Implementation-Vendor-Id>
                        <Implementation-Version>${project.version}</Implementation-Version>
                        <Specification-Title>Apache XML Security</Specification-Title>
                        <Specification-Vendor>The Apache Software Foundation</Specification-Vendor>
                        <Specification-Version>${project.version}</Specification-Version>
                        <Export-Package>
                              org.apache.xml.security.*;version="${project.version}",
                              org.apache.jcp.xml.dsig.internal.*;version="${project.version}",
                        </Export-Package>
                        <Import-Package>
                              !org.apache.xml.security.*,
                              !org.apache.jcp.xml.dsig.internal.*,
                              org.slf4j.*;version="[1.7,2)",
                              org.apache.commons.codec.*;version="[1.6,2)",
                              org.apache.xml.dtm*;resolution:=optional;version="[2.7,3)",
                              org.apache.xml.utils*;resolution:=optional;version="[2.7,3)",
                              org.apache.xpath*;resolution:=optional;version="[2.7,3)",
                              *
                        </Import-Package>
                        <Automatic-Module-Name>org.apache.santuario.xmlsec</Automatic-Module-Name>
                    </instructions>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.14.0</version>
                <executions>
                    <execution>
                        <id>bindings</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <schemaDirectory>
                                ${basedir}/src/main/resources/
                            </schemaDirectory>
                            <schemaIncludes>
                                <schemaInclude>schemas/security-config.xsd</schemaInclude>
                                <schemaInclude>bindings/schemas/exc-c14n.xsd</schemaInclude>
                                <schemaInclude>bindings/schemas/xmldsig-core-schema.xsd</schemaInclude>
                                <schemaInclude>bindings/schemas/xmldsig11-schema.xsd</schemaInclude>
                                <schemaInclude>bindings/schemas/xenc-schema.xsd</schemaInclude>
                                <schemaInclude>bindings/schemas/xenc-schema-11.xsd</schemaInclude>
                                <schemaInclude>bindings/schemas/rsa-pss.xsd</schemaInclude>
                            </schemaIncludes>
                            <bindingDirectory>${basedir}/src/main/resources/bindings/</bindingDirectory>
                            <bindingIncludes>
                                <bindingInclude>c14n.xjb</bindingInclude>
                                <bindingInclude>dsig.xjb</bindingInclude>
                                <bindingInclude>dsig11.xjb</bindingInclude>
                                <bindingInclude>xenc.xjb</bindingInclude>
                                <bindingInclude>xenc11.xjb</bindingInclude>
                                <bindingInclude>security-config.xjb</bindingInclude>
                                <bindingInclude>xop.xjb</bindingInclude>
                                <bindingInclude>rsa-pss.xjb</bindingInclude>
                            </bindingIncludes>
                            <catalog>${basedir}/src/main/resources/bindings/bindings.cat</catalog>
                            <forceRegenerate>false</forceRegenerate>
                            <episode>true</episode>
                            <specVersion>2.1</specVersion>
                            <extension>true</extension>
                            <!-- disable schema validation since the validation code
                            doesn't respect the catalog and will do online lookups :-( -->
                            <strict>false</strict>
                            <args>
                                <arg>-npa</arg>
                            </args>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.3</version>
                <configuration>
                    <useReleaseProfile>false</useReleaseProfile>
                    <preparationGoals>clean install</preparationGoals>
                    <goals>deploy</goals>
                    <arguments>-Papache-release</arguments>
                    <autoVersionSubmodules>true</autoVersionSubmodules>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <attach>true</attach>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.1.1</version>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.5</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>3.1.0</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <source>8</source>
                        <attach>true</attach>
                        <excludePackageNames>org.apache.xml.security.binding.*</excludePackageNames>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>clirr-maven-plugin</artifactId>
                    <version>${clirr.version}</version>
                    <configuration>
                        <minSeverity>${minSeverity}</minSeverity>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.owasp</groupId>
                    <artifactId>dependency-check-maven</artifactId>
                    <version>${maven-owasp-plugin-version}</version>
                    <executions>
                        <execution>
                            <phase>validate</phase>
                            <goals>
                                <goal>check</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

            </plugins>
        </pluginManagement>

        <defaultGoal>install</defaultGoal>
    </build>

    <profiles>
        <profile>
            <id>release</id>
            <activation>
                <property>
                    <name>release</name>
                    <value />
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>fastinstall</id>
            <properties>
                <maven.test.skip>true</maven.test.skip>
                <pmd.skip>true</pmd.skip>
            </properties>
        </profile>
        <profile>
            <id>nochecks</id>
            <properties>
                <pmd.skip>true</pmd.skip>
            </properties>
        </profile>
        <profile>
            <id>jdk18</id>
            <activation>
                <jdk>1.8</jdk>
            </activation>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-javadoc-plugin</artifactId>
                            <configuration>
                                <additionalJOptions>
                                    <additionalJOption>-Xdoclint:none</additionalJOption>
                                </additionalJOptions>
                            </configuration>
                        </plugin>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <configuration>
                                <fork>true</fork>
                                <compilerArgs combine.children="append">
                                    <arg>-J-Xbootclasspath/p:${settings.localRepository}/com/google/errorprone/javac/9+181-r4173-1/javac-9+181-r4173-1.jar</arg>
                                </compilerArgs>
                            </configuration>
                        </plugin>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <version>2.22.2</version>
                            <configuration>
                                <reportFormat>brief</reportFormat>
                                <useFile>false</useFile>
                                <childDelegation>false</childDelegation>
                                <reuseForks>false</reuseForks>
                                <includes>
                                    <include>**/*Test.java</include>
                                </includes>
                                <excludes>
                                    <exclude>**/PerformanceMemoryTest.java</exclude>
                                    <exclude>**/PerformanceTimingTest.java</exclude>
                                </excludes>
                                <systemPropertyVariables>
                                    <product.version>${project.version}</product.version>
                                    <log4j.configuration>log4j-xmlsec.xml</log4j.configuration>
                                    <!--<javax.xml.bind.JAXBContext>${xmlsec.jaxb.context.class}</javax.xml.bind.JAXBContext>-->
                                </systemPropertyVariables>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
         </profile>
         <profile>
            <id>jdk19-plus</id>
            <activation>
                <jdk>[9,)</jdk>
            </activation>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-javadoc-plugin</artifactId>
                            <configuration>
                                <additionalJOptions>
                                    <additionalJOption>-Xdoclint:none</additionalJOption>
                                </additionalJOptions>
                            </configuration>
                        </plugin>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <version>2.22.1</version>
                            <configuration>
                                <reportFormat>brief</reportFormat>
                                <useFile>false</useFile>
                                <childDelegation>false</childDelegation>
                                <reuseForks>false</reuseForks>
                                <includes>
                                    <include>**/*Test.java</include>
                                </includes>
                                <excludes>
                                    <exclude>**/PerformanceMemoryTest.java</exclude>
                                    <exclude>**/PerformanceTimingTest.java</exclude>
                                </excludes>
                                <argLine>-Xmx2000m --add-opens java.base/java.lang.reflect=ALL-UNNAMED</argLine>
                                <systemPropertyVariables>
                                    <product.version>${project.version}</product.version>
                                    <log4j.configuration>log4j-xmlsec.xml</log4j.configuration>
                                    <!--<javax.xml.bind.JAXBContext>${xmlsec.jaxb.context.class}</javax.xml.bind.JAXBContext>-->
                                </systemPropertyVariables>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
             </build>
             <dependencies>
                 <dependency>
                     <groupId>jakarta.xml.bind</groupId>
                     <artifactId>jakarta.xml.bind-api</artifactId>
                     <version>2.3.2</version>
                 </dependency>
                 <dependency>
                     <groupId>org.glassfish.jaxb</groupId>
                     <artifactId>jaxb-runtime</artifactId>
                     <version>2.3.2</version>
                     <scope>test</scope>
                 </dependency>
             </dependencies>
         </profile>

    </profiles>

    <properties>
        <xml.apis.version>1.4.01</xml.apis.version>
        <slf4j.version>1.7.29</slf4j.version>
        <xalan.version>2.7.2</xalan.version>
        <xerces.version>2.12.0</xerces.version>
        <junit.version>5.5.1</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <bcprov.version>1.66</bcprov.version>
        <hamcrest.version>2.2</hamcrest.version>
        <xmlunit.version>2.6.3</xmlunit.version>
        <commons.codec.version>1.14</commons.codec.version>
        <woodstox.core.version>5.2.1</woodstox.core.version>
        <jetty.version>9.4.24.v20191120</jetty.version>
        <xmlsec.jaxb.context.class />
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <targetJdk>1.8</targetJdk>
        <clirr.version>2.8</clirr.version>
        <maven-owasp-plugin-version>5.2.4</maven-owasp-plugin-version>

        <!-- Allow Clirr severity to be overriden by the command-line option -DminSeverity=level -->
        <minSeverity>info</minSeverity>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>${commons.codec.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.woodstox</groupId>
            <artifactId>woodstox-core</artifactId>
            <version>${woodstox.core.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.xmlunit</groupId>
            <artifactId>xmlunit-core</artifactId>
            <version>${xmlunit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-library</artifactId>
            <version>${hamcrest.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.xmlunit</groupId>
            <artifactId>xmlunit-matchers</artifactId>
            <version>${xmlunit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>${jetty.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlet</artifactId>
            <version>${jetty.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlets</artifactId>
            <version>${jetty.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>xalan</groupId>
            <artifactId>xalan</artifactId>
            <version>${xalan.version}</version>
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>${xerces.version}</version>
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
            <version>${xml.apis.version}</version>
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>${bcprov.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.carrotsearch</groupId>
            <artifactId>junit-benchmarks</artifactId>
            <version>0.7.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <distributionManagement>
        <repository>
            <id>apache.releases.https</id>
            <name>Apache Release Distribution Repository</name>
            <url>https://repository.apache.org/service/local/staging/deploy/maven2</url>
        </repository>
        <snapshotRepository>
            <id>apache.snapshots.https</id>
            <name>Apache Development Snapshot Repository</name>
            <url>https://repository.apache.org/content/repositories/snapshots</url>
            <uniqueVersion>false</uniqueVersion>
        </snapshotRepository>
    </distributionManagement>

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>clirr-maven-plugin</artifactId>
                <version>${clirr.version}</version>
                <configuration>
                    <minSeverity>${minSeverity}</minSeverity>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.owasp</groupId>
                <artifactId>dependency-check-maven</artifactId>
                <version>${maven-owasp-plugin-version}</version>
            </plugin>
        </plugins>
    </reporting>
</project>
