<?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.
-->

<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.2.xsd">
    <suppress>
        <notes><![CDATA[
   file name: self dependencies...
   ]]></notes>
        <gav regex="true">^org\.apache\.tomee:.*$</gav>
        <cve>CVE-2018-8031</cve>
    </suppress>
    <suppress>
        <notes><![CDATA[
   file name: self dependencies...
   ]]></notes>
        <gav regex="true">^org\.apache\.tomee:.*$</gav>
        <cve>CVE-2010-1151</cve>
    </suppress>
    <suppress>
        <notes><![CDATA[
   file name: false positive apache http server
   ]]></notes>
        <gav regex="true">^org\.apache\.tomee:.*$</gav>
        <cpe>cpe:/a:apache:apache_http_server</cpe>
    </suppress>
    <suppress>
        <notes><![CDATA[
   file name: false positive apache http server
   ]]></notes>
        <gav regex="true">^org\.apache\.tomee:.*$</gav>
        <cpe>cpe:/a:apache:http_server</cpe>
    </suppress>
    <suppress>
        <notes><![CDATA[
   file name: ziplock-*.jar
   ]]></notes>
        <gav regex="true">^org\.apache\.tomee:ziplock:.*$</gav>
        <cpe>cpe:/a:zip_project:zip</cpe>
    </suppress>
    <suppress>
        <notes><![CDATA[
   file name: eclipselink-*jar
   ]]></notes>
        <gav regex="true">^org\.eclipse\.persistence:eclipselink:.*$</gav>
        <cpe>cpe:/a:git:git</cpe>
    </suppress>
    <suppress>
        <notes><![CDATA[
   file name: eclipselink-*.jar
   ]]></notes>
        <gav regex="true">^org\.eclipse\.persistence:eclipselink:.*$</gav>
        <cpe>cpe:/a:git_project:git</cpe>
    </suppress>
    <suppress>
        <notes><![CDATA[
   file name: javax.persistence-*.jar
   ]]></notes>
        <gav regex="true">^org\.eclipse\.persistence:javax\.persistence:.*$</gav>
        <cpe>cpe:/a:git_project:git</cpe>
    </suppress>
    <suppress>
        <notes><![CDATA[
   file name: javax.persistence-*.jar
   ]]></notes>
        <gav regex="true">^org\.eclipse\.persistence:javax\.persistence:.*$</gav>
        <cpe>cpe:/a:git:git</cpe>
    </suppress>
    <suppress>
        <notes><![CDATA[
   file name: commonj.sdo-*.jar
   ]]></notes>
        <gav regex="true">^org\.eclipse\.persistence:commonj\.sdo:.*$</gav>
        <cpe>cpe:/a:git:git</cpe>
    </suppress>
    <suppress>
        <notes><![CDATA[
   file name: commonj.sdo-*.jar
   ]]></notes>
        <gav regex="true">^org\.eclipse\.persistence:commonj\.sdo:.*$</gav>
        <cpe>cpe:/a:git_project:git</cpe>
    </suppress>
</suppressions>
