<!--
  ~ 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.
  -->

<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
   <system
       systemId="http://java.sun.com/xml/ns/j2ee/application_1_4.xsd"
       uri="catalog/schema/application_1_4.xsd" />
   <system
       systemId="http://soapinterop.org/xsd2"
       uri="importAux.xsd" />
   <!--system
       systemId="http://example.com/test/doesnotexist.wsdl"
       uri="dir1/abstract.wsdl" /-->
   <system
       systemId="doesnotexist.xsd"
       uri="dir2/imported1.xsd" />
   <system
       systemId="http://example.com/neverExisted.xsd"
       uri="dir3/imported2.xsd" />
   <public
       publicId="-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN"
       uri="catalog/dtd/ejb-jar.dtd" />
   <public
       publicId="-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
       uri="catalog/dtd/ejb-jar_2_0.dtd" />
</catalog>
