xml-commons-resolver-1.2/ 40755 0 0 0 10530407253 12515 5ustar 0 0 xml-commons-resolver-1.2/apidocs/ 40755 0 0 0 10530407252 14136 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/ 40755 0 0 0 10530407253 16000 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/ 40755 0 0 0 10530407252 16566 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/ 40755 0 0 0 10530407252 20007 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/ 40755 0 0 0 10530407252 20607 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/ 40755 0 0 0 10530407252 22450 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/ 40755 0 0 0 10530407252 23413 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/class-use/ 40755 0 0 0 10530407252 25312 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/class-use/ 40755 0 0 0 10530407252 24347 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/ 40755 0 0 0 10530407252 24112 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/class-use/ 40755 0 0 0 10530407252 26011 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/ 40755 0 0 0 10530407253 24076 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/ 40755 0 0 0 10530407252 25774 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/ 40755 0 0 0 10530407252 23610 5ustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/class-use/ 40755 0 0 0 10530407253 25510 5ustar 0 0 xml-commons-resolver-1.2/docs/ 40755 0 0 0 10530407252 13444 5ustar 0 0 xml-commons-resolver-1.2/etc/ 40755 0 0 0 10530407252 13267 5ustar 0 0 xml-commons-resolver-1.2/src/ 40755 0 0 0 10530407252 13303 5ustar 0 0 xml-commons-resolver-1.2/src/org/ 40755 0 0 0 10530407252 14072 5ustar 0 0 xml-commons-resolver-1.2/src/org/apache/ 40755 0 0 0 10530407252 15313 5ustar 0 0 xml-commons-resolver-1.2/src/org/apache/xml/ 40755 0 0 0 10530407252 16113 5ustar 0 0 xml-commons-resolver-1.2/src/org/apache/xml/resolver/ 40755 0 0 0 10530407252 17754 5ustar 0 0 xml-commons-resolver-1.2/src/org/apache/xml/resolver/apps/ 40755 0 0 0 10530407252 20717 5ustar 0 0 xml-commons-resolver-1.2/src/org/apache/xml/resolver/helpers/ 40755 0 0 0 10530407252 21416 5ustar 0 0 xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/ 40755 0 0 0 10530407252 21401 5ustar 0 0 xml-commons-resolver-1.2/src/org/apache/xml/resolver/tests/ 40755 0 0 0 10530407252 21116 5ustar 0 0 xml-commons-resolver-1.2/src/org/apache/xml/resolver/tools/ 40755 0 0 0 10530407252 21114 5ustar 0 0 xml-commons-resolver-1.2/KEYS100644 0 0 47041 10530407253 13336 0ustar 0 0 This file contains the PGP keys of xml-commons committers and are used for signing .zip/.tar.gz distributions. To verify the .sig on a distribution: Using PGP: pgp xml-commons-version.num.zip.sig Using gpg: gpg -verify xml-commons-version.num.zip.sig xml-commons-version.num.zip To import these public keys into your keyring: Using PGP: pgp < KEYS or pgp -ka KEYS Using gpg: gpg --import < KEYS Committers: to put your key in here: Using pgp: pgp -kxa and append it to this file. Using gpg: gpg --export -a >>KEYS should do the trick Shane Curcuru curcuru@apache.org shane_curcuru@yahoo.com -----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGP 8.0.3 mQGiBDghjNIRBADXB4UY4YfZ2DmbSushlzPZCkY00iDPUB+GkW6FQhgnGCLZovgy FhCnCsKdN1xyHFq/Ns3PV3HPrMGxFKgVOfRuxREbF8CoXAa/u0qR1WoAm+rlyC9l OVsHdXxyOpZ8e4SPGne8LQYZwr2q+LsHiXOZktkaBo8ua8F4EJYkBMFhZQCg/4Iw jXmfpt661Essmf8d05cMdAcEAL0r+PrFxCmrU8Ok+r74+eqyclxVbiDbOf7Uef6N fEJmC5ihX7p8k8eEf2XepeAo6N0gdOxYVXVwcoRCmqPy7SSg1jnXqKOnA87ylv16 lOiJ5WUkiVX96WOWEsbbYKuggmWeDL+6iFc9hp6oEP2sf/geC8AEAEHTPfneJzpo 3z28A/9iX41r4K0iRx5eIJu2KUrjdpPxhn0JPe9dz2XzWZIciNeki+ThrcarEj9h lmfvcGLifXbQfXuFid3btMsBRI8dqAbbXmyfvCYYSHDOkXEmoMW66AWfeF4hgfHF SA5lmcpH4mtHU69uC0+cvYlRROP+HaeOepYbriA+9A9Qq4MAW7QnU2hhbmUgQ3Vy Y3VydSA8c2hhbmVfY3VyY3VydUB5YWhvby5jb20+iQBGBBARAgAGBQI8PxjSAAoJ EBm5wYtkQsPcrAAAnjlSm8EVo0o5rri6OmDZ0phUAYhkAKDx81ipeBW6poHtevPK iTjlyIJ+IIkARgQQEQIABgUCPXjKsQAKCRAGhxZOXhTh0jpAAKCtUhax5RkRs8qc SgkaaXB/bE56JQCg6fzUE7nAH8S4Dl93i+smLhh9aAKIRgQTEQIABgUCPdw+xwAK CRBq1Wz+GTEbALK0AJ98d+oMwhKHwaqtGkam0Ja59kDLHgCfWGKQMPhuZtPneXAA fNQdhLAoYtaIRgQQEQIABgUCPd0ldgAKCRABUtYD3+rEuRnIAJ0e1ZVTbhaBcipW ElZDiBTfOJAr9wCdHyU3V88nocGAGPnVFmJQ6dgn5VyJAJkEEwEBAAYFAj3dGN4A CgkQPo+38viDQdlYbQPlFR6/Cv702Ap/E7y/oyXsDKBuZceO9hI4/5VmmQi5f6nv nobpZB4V86daM3ezDOHN9jfkykzjDQpEpEQaxqGsErVlkr+487B9NvFSirazi9rc 6DVG1YGsPQwwVxfVURrg/N6fPHPPFvSi0hPCBuTcq8t4NwKQi4nAJo9hzCWIRgQT EQIABgUCPd1iqAAKCRBMxE0AEd+H6WfxAJ4v3EzeplYOeCw5xetd/DCUnoWLyQCd EdGIiQutJg+tgB9R7mA4eUDqLxCIRgQQEQIABgUCPd0QwAAKCRBQjq7FMC2laFVQ AKCT4immcoQQz7dSyuKwtP5L0G7DEQCfZZadSLSCwkY9Y4J3rfdhYd4mFkmJAEYE EBECAAYFAj3dLfEACgkQVZHiwGZkwHjv/wCfXmP5/37LvI+n1uAjVpyPBtqmGE0A oKrzmtazTouvzY4i7ndaa/CfdOVviEYEExECAAYFAj3c8/gACgkQXP03+sx4yJPm dACeMPmPPIiRkkHgMaK/IBQ0ZQli2U4AoOQcl/wsbJ1GPcylqgRv8/RzxxnuiQCc BBMBAQAGBQI93SHjAAoJEGSwzQUYe9aNpVkD/37RpdwN/RWcXEJdIcRcqKR/xTVh 1PS64bRJmbWOnjwoRnojjZ9pG7CemppRwfXm7UQq5z5tyoDOJ+tMcRg+SUHxDXpx noHA+7A0oKNGnDAB4b/9PhR09TG/yvUhOLeKAw/0nTQH6j98kI5RJUqvYui24RlO dMuGmOtHGxqUVjCHiQCVAwUQPd0PMJrNPMCpn3XdAQFvSQQAneGqwiStSGVG8RF9 uoUVVIppUoaDF1pIHiZD34/0cX8EznofkVN8Nqf+FK++cZPb+G7cHIrhCutRxiqv AZBHkvLkUEsYv4OHbcmi+kjzykIPfbPKVah8GPGEiJw4O0ckLbc/djbYFZ6iWMX0 6ROwpa2xsUDYq4TpwxdnD9RdIaaJAD8DBRA93Q+S3bpkuiwxLS8RAoMxAKDAhh9F sLAU/av0VvTjh9bVQtBDRQCgtQCettfGk438Tw4JAjhC989Wp7yJAJwEEwEBAAYF Aj3fjmsACgkQ7q1M/UmlY9lj3wQA4BeKyC7mzjqD/pm3iX0xEoHZbRyszbT3yptb bxj/EmIDQDuJk6xu9PjMVstB0CaEuu4IlQ5umD8TiBOaEKIbXXwPxiZUHHXXdsrK JxVeOxrCIbd1pETfNJxh8Oimu5WOre/MVY0iwgGdgl9+kEQHpCKi9PcKA68ly+uS Vbbf80KJAEYEEBECAAYFAj3h75kACgkQvrorh/X8S0I0TwCg2TvJVDhOniTCyUBc Y5JTKA49aaEAni/ig1NiAiYtWX0OKV8luwhA7hNiiEYEExECAAYFAj3hXBkACgkQ /A+FifiUvhLyvACeJc6sJMEEdNu+0d1YbIL72meEPS4AnRNZlVuuTCYZV2CBkqYo EPcQa96CiEYEEhECAAYFAj3ud8oACgkQs10SPRMEYVVeWwCfcYLRDEUJlwaTGfff przKwctkSKMAoKBPVd1zwrrUEozucAW0ZCLVX5HFiQBOBBARAgAOBQI+CJR6BAsD AgECGQEACgkQMuwXWTCiHVVp3gCgzI8dLv+HC5/Dm3qMWSfv3f7sabYAnjk85CFW FfbTUZpuQhiNThCKrlpjiQBGBBARAgAGBQI/whh8AAoJEInYTK9GsmLGCIYAn1qF q9YQkvhyfVI0BrWHzzwNpW2SAJ9tBwq3YYN2syaK5VErdQ9YhH3sYYhGBBIRAgAG BQI/ueEKAAoJELkkUqxMkWW2efIAn2lU8DBumX3TF0rPRMXd/NsH9S2PAKCJS/4I MqeZxPJFh9nvBsRsqowPrYhGBBMRAgAGBQI/ucMzAAoJEMsyoQeIw6WlLJYAoIxN +k9v56gRE0Da95xpDchkyaXGAJ9y5EC/TB7IvioJrX7knHGkgJLZuohGBBMRAgAG BQI/uav/AAoJEKge5knOGdXG5JgAn3uiywCUK4a14MtxrNXGUo1zH3uSAJ4yw8C6 pqdmdFxNVJDZqwcXIjixSIhGBBMRAgAGBQI/uaXCAAoJEBD6TIilTaLf43YAoOuO vs4J7kKXJMY7x8J+U+E6vEtqAJ9/3G8bSYn34USX8dKvtHICfq8m64kARgQQEQIA BgUCP7+tlgAKCRCyvrxAFSkkr/zYAJ0cw/XXM2mbAvvkmFENNQWCgczjOwCgjOGy dE99x7ycPdSU1jFNTEUXYXWJAEYEEBECAAYFAj+/rcQACgkQwR57R5ZPMdmI6QCd GC3TOV0rpX53kpTCiYyGrhxz2J0AnRjSqQJ650Wu71gr8vG4pJzg9wCyiEYEEhEC AAYFAj+//W8ACgkQ7Jk9Y2X9ze5/BQCdEdJY8H7tKkB+pZTvbLqgAmvtgPUAn3Du dKUEpQRRJIeNWTRjfy/ANxu8iEYEExECAAYFAj/ELgsACgkQ+jyNJhQrUJsdygCf ZIx5DogHEBKyOShfs/ztkPxI6+IAoIFemXEuDdONWdAP3VAB44jHumeNiEYEExEC AAYFAj/H2IEACgkQpHQPOdFHt3YmRACfSYNTshX1JNV6Mm8gmvJFrafUShwAn3ee nfbYrq4K/W4I8AtZwCYg/eqQiEYEExECAAYFAj/K6HQACgkQaFp3yu5WVQ7L8QCd Gng/QFBpr3U+R5B4lrCIsLWmxNcAnj5Ok4rUMv3pVyhg3cYpj8rugefZiEYEExEC AAYFAj/N3zEACgkQEy5J1OQe3H76tgCgmyFrSD9EUQ3UWWsjYhXfcYc2SGAAoJAt 8YAf/8ItnJjustL3zEtww7xYiEYEExECAAYFAj/Q15oACgkQZAeG2a2/nhp9JwCg zydcCk8LDFe6fVQCNsO+8gmckrEAmwU+wvYEq5nh96eRDGEjX5GceasBtCJTaGFu ZSBDdXJjdXJ1IDxjdXJjdXJ1QGFwYWNoZS5vcmc+iQBGBBARAgAGBQI7Lmr6AAoJ EBm5wYtkQsPcSuEAn3m6m88SwsFb4YX9DbuArAkAlaHkAKD28+7bsIQtA+THnHp+ Gq5aU9lZHokARgQQEQIABgUCOy7FPgAKCRC+uiuH9fxLQgSjAKDE0c6dsZs0eE41 biw0tROI5DgJFgCguDjRBLUIyLk7gwlYWT0E7b5PtGmJAEYEEBECAAYFAj0KVRUA CgkQDL/HgFBA4OTsLwCcCA6Jpj9a1UKtYas6wfXhKtNwtAMAoKWVDpb54xKCIG/b B/X+68sXxwZhiQBGBBARAgAGBQI9eMqjAAoJEAaHFk5eFOHSY6cAoLP/hpfhO9Lq VJigIFy3xqu+Vv1BAKDLdxAkhQb22JIaHIrVv4WpUgXNDIhGBBMRAgAGBQI93D6t AAoJEGrVbP4ZMRsAb48AoMljWI/2Wp4Qagxj+gQphOv4z0lzAJ99KUHvTFQiywXX MI8BlaZWYdz4bohGBBARAgAGBQI93SVzAAoJEAFS1gPf6sS5kOUAmQGQs8gksZDP xoilLVVtpoIFYvwrAJ9z6ZGdpe8ogofxJdgID2sGAVAogokAmQQTAQEABgUCPd0Y twAKCRA+j7fy+INB2dIJA+YldBY+BbHEWhI8SCyKqJMGBWfSXMZwwPXiYTnntpGV navyPN3GMQihqh3vg296fEo+00YVkkVoFA7SQ2BDYmLhXvkIM4HAk7xwgk00G8JE Vk+sFyhYgVSaEqva4xUoNNhia8P30Xw8NJ872C0fQ2nFPLTuM3/IKP0cA08nMIhG BBMRAgAGBQI93WKjAAoJEEzETQAR34fpPhIAn38wCHmuPvarHccTYbTOutH+SNAT AJ0YY01IdaY/ShHxvyzPeqtTDHmr6IhGBBARAgAGBQI93RCkAAoJEFCOrsUwLaVo b1AAoLLH3YT1KEo/abmbBF9D/u8u7ph2AKCc0CF+3tB6EqMLyXeinAa/483494kA RgQQEQIABgUCPd0uCgAKCRBVkeLAZmTAeKs5AKDN3xh+M1YT8SNmYBCeVn//ylvB xwCgkWafdVY1zNFG0zpvKsXlaqB4u2aIRgQTEQIABgUCPdzz9QAKCRBc/Tf6zHjI k/5MAKDOzpBcqfXpAh4+fmmrvHD7cpiuEACdHquGYN470JiGv/hPWz0XT0DjJU+J AJwEEwEBAAYFAj3dIeMACgkQZLDNBRh71o0fbAP/UBOrFEdBV5tfJCuL6ogxS3YO ZJBXkCGaCL/WzkOeNsKfEuEJRRaDtiGdsUImvaHF2X6QIlxg51PdZ++K436eYNnr IXpm66QuZxKlfQ9vZ2roricoPgSXNUBReCAFkmPKlsB6/kizsYk01cGKLeQ2tMdi cKPVlBf1uUj6u/bchSmJAJUDBRA93Q76ms08wKmfdd0BAQRuA/9g7FADt19ovzjr KCw12czOSsrv68MwqA16GOOpKkqlTMhw21HLRNmE3onehRYFqjpiAs9+4gpKEHHD hDs7U9ZWu6akyBVRpLcLN5ciJC8RoY7R/q0xJTy77s5RJumL28cD1n3k2pDIwpDP KdqIM2EBtnEKlR8xUgvbM/Ixfr9jf4kAPwMFED3dD3vdumS6LDEtLxECAPoAnRzu QoZ5WvX884HZSPSSmw3Hm0YnAKDCuFeWLV0sG+aaFEPBZ4vI94lEn4kAnAQTAQEA BgUCPd+OawAKCRDurUz9SaVj2VWEA/4uwoqm0iUj2IoE5VGgV62vGrNl1pk+h9wi 3fWyZVxm0Ld2wnVmYqGrJ5eocbqFEJzWGS9KUDQHERblGLjQwoeJVOfZoFx8MVuH aOoSQNQW7lhNfEjjA6vL5ssrrvPJm9tEfPIEolMXRxKK2vlW6qHpE4KdNrHmFpl7 UFGydZCirYhGBBMRAgAGBQI94VwRAAoJEPwPhYn4lL4S2M8AnjlNGzgReaMBbNek T5gy5falVDnhAJ99IwnBGp6ZLjdkSVdHX3wB5jLIoohGBBIRAgAGBQI97nfKAAoJ ELNdEj0TBGFVIy4AnAmNZb5/rMGV8EZ+7KrdPZY65LLnAKCmi8d1IEhOUTh8g2dy 37LtjOZ3DokATgQQEQIADgUCPgiUegQLAwIBAhkAAAoJEDLsF1kwoh1Ve4wAn29j 6+l9ZD9s7Cyg68t07TaiIuqCAKCIN/re80GUwyV4+D6dnPeGuS+5ZYkARgQQEQIA BgUCOy5s/QAKCRDWyjT3y1p1XImQAJsGE+lFjW6w4ypoShWLyJC+olNrEwCgkMVl Tr5FRNd2nJ38GHCAoHfZ3tOIRgQSEQIABgUCP7nhDgAKCRC5JFKsTJFltkU9AKCF 1rcAzrR96eMRtLrkEYGm+CjNEgCbB1WcWzFuoX97PlrMvrCLKnEExe6IRgQTEQIA BgUCP7nDLgAKCRDLMqEHiMOlpQxlAJ0T9xLagQIuFoT71iEyLIgCMvpl2gCffITi siyguRstK2hR/5kdU67bZJWIRgQTEQIABgUCP7msAgAKCRCoHuZJzhnVxjzoAJ4w NTBrLjaiXnzVX/laYKNImz2EygCeJoupc4EKsW5PdnVYG2a/NragDMuIRgQTEQIA BgUCP7mlxgAKCRAQ+kyIpU2i3wEzAJ9hFNcCScJ6pp8V2HTiLRo5tje3YgCgyFNX /Qa+wFa7tXtV7dItSRYybGaJAEYEEBECAAYFAj+/rZYACgkQsr68QBUpJK+bEwCd FZaS+L39rqvnbepLDvEzl2a0ApAAoKTXJa/znHMIn18JwUv3xN395XcfiQBGBBAR AgAGBQI/v63EAAoJEMEee0eWTzHZn+gAnAm/+0shp2JH2OdtsW73/rXGxRPMAKCA FvMwLD4pQ6N5wHIT9fhGVnJd14kAnAQTAQIABgUCP8JvfAAKCRA34/Rf7mXjIRZs BADDZhm1xqe/6aAviCdnA5rIUMhPqrFE43rBHWCUa2LclS3YL82e1/kPgHyyxXI9 u/xNI/WirnsB4hGdOgJgXGPrEhFHPTFDfWp5ZOR2v1m/XHl/ylLvZcHG8E01bt7U L6c7GmSRTDTqHiyIgDaXAF/nFwHxo8n1rJ2Izj63P9DdqIhGBBIRAgAGBQI/v/05 AAoJEOyZPWNl/c3ur3gAn2cWMfL4zNmtz/gz+qUtm1f5sWd2AKCncn+raytqkEi/ iWJ8cxP9bhpbnIhFBBMRAgAGBQI/xC4NAAoJEPo8jSYUK1Cbf9UAmIjknU0okMX6 PH2h/JW/nGt/C3YAmwToIn06dj4bhBlv/Yw1f1NSiKvOiEYEExECAAYFAj/H2IQA CgkQpHQPOdFHt3bnxgCffyCmDz5aelAF7qOfkbc95WmkDtgAn10zcRWsFNmNRRob 8fmme2iXHuvNiEYEExECAAYFAj/K6HYACgkQaFp3yu5WVQ5etgCfT6QFDAb8J8VC NMXDPhWDPdkxCmQAn21B+YC66CcqXdxsSk+fv5YKgIXviEYEExECAAYFAj/N3zQA CgkQEy5J1OQe3H6TOwCdH5QSWu0sJzw4W3VvG9s9/W8791oAoJeaHPPB/GyqznXs klzt1Yy/RZ5QiEYEExECAAYFAj/Q15sACgkQZAeG2a2/nhpwbwCfVXXGVC3uza1R aG47/CSrCzI/3dMAnj1flD+tXgJ7s1NZ1u1butGxQilqtCdTaGFuZSBDdXJjdXJ1 IDxzaGFuZV9jdXJjdXJ1QGxvdHVzLmNvbT6JAEYEEBECAAYFAjipmT8ACgkQUes+ 8Vd2WvJVsgCg796C2LV6yBEjoYSsiEgKDcihy18AoOWnDo1ar9ZPGTUBrSk3/Vvp +YPkiQBGBBARAgAGBQI7E8AUAAoJEBm5wYtkQsPcSUMAn11wnT/eW6LM3gOI8p4i Iyw3g+IBAJ90IMtRZwCz3fKPQx94AInsXr5RyokARgQQEQIABgUCOy7FfwAKCRC+ uiuH9fxLQhjTAKDDUMomB1wKbVEhcdoyzpjt13tTMgCgiser+HuJ5boYdvtoEfsn 0bHQMFSJAE4EEBECAA4FAjzf+sAECwMCAQIZAAAKCRAy7BdZMKIdVcNAAKDTYj5I y0OKZazeuAT2WjChmV7lRgCgpBXjOGhIzgTruMhSd7Kax2CKFMSIRgQTEQIABgUC Pdw+xwAKCRBq1Wz+GTEbAMUcAKDO3bgEoTsyNv5XLkMBJhlCmRxxGACgmcBBw5QO Ht12HY/1z9R462RjM5aIRgQQEQIABgUCPd0ldQAKCRABUtYD3+rEuRy9AJ0U9BEC /pRn4btyHjRPBMg8vjX4jQCgqSpieQiWk/EFK7IfJfWZ0uA+CyGIRgQTEQIABgUC Pd1iqAAKCRBMxE0AEd+H6TTCAJ9sOJE8y1Hkg2d89sXB2qay6TZi/wCfShF2Nl1U 7kld3dUtl3JwhocizLiIRgQQEQIABgUCPd0QnwAKCRBQjq7FMC2laPLQAKCyQJ5o Ce42iXJ7ypB7wqrJGL9p/gCgrz+wSvMx1yoaTUqjosr9N1rEOCuJAEYEEBECAAYF Aj3dLf0ACgkQVZHiwGZkwHhGJgCeL9DPvlB6/fOeDCCt6S2f6iWrChgAmwTj0EHc VcCs7n92H/igq+opleYjiEYEExECAAYFAj3c8/gACgkQXP03+sx4yJMa2gCgwq1u Dtm2vNjwq4I/+Vl0+a+2pncAn0sdsytgRve4CfGwZRv8xu+gI/8ViQCcBBMBAQAG BQI93SHYAAoJEGSwzQUYe9aNLioD/1+VERJTdBzVnc5DBZ99cpKVJTP6QTo0TyCC 6HbdJt2fNHqpJ6+nN0X6zbUIDcneKlr8SdqX9RL3bvin+upDoXZj6VafLw+Q/KnO yp9q3hBlXatPZ+RvyxDFcg/RlvHLDGY6He1tNp10L5bk/X3D4unwWZPdZu7CWy60 0z4+qwwciQCVAwUQPd0PBZrNPMCpn3XdAQFu8AP9EBkVw9zw5EroGarXHq/bTdqe Neb57qudvtUYpH7xMEi0S8mf1mhrNPzqyVsAAHCwsCLRLGxTYZFgyfgOdPtkLBZS oJTzpmEyM64v+cYD8cdct92XGEZGBu1Mv2aXYXaTNo6lLBxh9X1yeOot0l/IJvvQ 73FOJaIQU1oXX5nQu52JAD8DBRA93Q+G3bpkuiwxLS8RAr/wAJ4ocYKa58/Hxx72 IiloLMKX2AsahwCeIJAXeTFMOFVEWt6g6DPvpKNwnOOJAJwEEwEBAAYFAj3fjmUA CgkQ7q1M/UmlY9lTYwP8DfLFzlWVM4xS3RmJqTnXqWTvRBNwGbKJzq7edS0g7e0L 9WAmbQXgIoM1WoeNLvxge9PxyXFD4AqfWFEeZbmWCf+Z9QK298r9Qqo8eu0rjMaf eJBrCvAlAE4898BwVFTjfRaJH2TnkSa4/m9omuZow7JUn1VzIM0UMyLRGvQWgkmI RgQTEQIABgUCPeFcGQAKCRD8D4WJ+JS+EgLxAJ0W7BzADClOkbvjL7SCmwSErOGn 3ACZAUHKnbp1vhXXSwyE4MW+3wDyuYGIRgQSEQIABgUCPe53wAAKCRCzXRI9EwRh VdZrAJ99CognwCjGDozpASDxzjFuq0f8QQCfTM27Xe8uov6NnDbW+F41QVcEVE6J AEYEEBECAAYFAjsubTcACgkQ1so098tadVzvZQCfRN3SVna4GEb5IwSm/zRn0exF r6MAoLSGnZ1wKQT12W/tNR/y2BueOEY2iEYEEhECAAYFAj+54Q4ACgkQuSRSrEyR ZbZwjACgjgsmqRp+fh0hV/o+9jcHSM9+Pd0AnRHBDBrxAxWIUBDjhZFb3TbHcaDv iEYEExECAAYFAj+5wzMACgkQyzKhB4jDpaW3UgCgj90ut9Td0N+8hEVA+EdvB3t3 xmQAoK/iOB9Ls4Uj7wDljU8/520xVe5NiEUEExECAAYFAj+5rAIACgkQqB7mSc4Z 1cbgGwCYgyCzxCThihJMmGpt3aUaZ4pz+ACfWHYEbZKglAoTN6pWcKwUCNzlNWOI RgQTEQIABgUCP7mlxgAKCRAQ+kyIpU2i39KtAJ42RrSsecNbvqwU+l4ZT8ATs8Np DACcC8R8s+3rb7cbgUWqrxH4m1NeO8KJAEYEEBECAAYFAj+/rZcACgkQsr68QBUp JK+PngCdG9Qz4PN+acQ5YWGBvDSAlZkDdTcAoPMAyFI5eiY5z9Rpk1QyDT9ynG2N iQBGBBARAgAGBQI/v63FAAoJEMEee0eWTzHZn3EAn3ywXPadoIn30lZ5hJn3IKRO dILDAJ95vnunOk7EOT5YozphhpxlC+0ML4hGBBIRAgAGBQI/v/1XAAoJEOyZPWNl /c3uUHIAn3eAHMXK9LpyYrjjvSlk5kMICVURAJ9hYlZKuY3IXaFqJsLPO+3e0V5e jYhGBBMRAgAGBQI/xC4NAAoJEPo8jSYUK1CbJf4An1IzokipvQN+tyu8gBZ2NEcv 6q3QAJ4kY/zbqnvt9/puwuaVghvAzm8uQohGBBMRAgAGBQI/x9iEAAoJEKR0DznR R7d2gXsAoMAG8pWv3Oubm9GY2jReT9u49nKdAKCaDiGdlAQCuPsNzsCVcEi3oLmp wohGBBMRAgAGBQI/yuh2AAoJEGhad8ruVlUO0+oAoJ4XLC51rm2xxvGvphlVYY4c v8irAJoDBuLHXa/EIcfM0MsRS+j5hGy5aIhGBBMRAgAGBQI/zd80AAoJEBMuSdTk Htx+O3AAoJBGHct+LreueugZ6juGN4fM86mXAJwN6kY42IysDOs5IqaThBXwjsRu m4kAmQQSAQIABgUCP8pxhwAKCRA+j7fy+INB2QC/A+dmOAYipf6q/lht31nqq7H7 68TdyiUAnkCFhyGBWRY62RIvbgUEVVLA0GPH2N2AKUvlHBLHpr9RkaM41jKMiVXp hxGsBwFrQrOLPC2oigpj/2AAeDv+498SZ6KVIv63lKptbQfEdzHh16YtLw6ouEju vi8sBJIpIM6dCPUcH4hGBBMRAgAGBQI/0NebAAoJEGQHhtmtv54a/MIAoLpQWuF2 zCe6ZO8R3QN8R5t3BB0DAKDThBr3kjPq0cMFoVc3x60wniejSbQoU2hhbmUgQ3Vy Y3VydSA8c2hhbmVfY3VyY3VydUB1cy5pYm0uY29tPokARgQQEQIABgUCPeDugwAK CRAy7BdZMKIdVZv3AKD+0XWnRmS+Kti5ir6prL5WdhrjoQCeI5ZEcEOAOLBbJvmE wUD3EVt57aWJAEYEEBECAAYFAj3h75kACgkQvrorh/X8S0KWlACfR55jeePqrVKM ynSqNMDoHqotu7gAn0VYszTjNWywREe67UpKaKlufyj5iEYEExECAAYFAj3hXBkA CgkQ/A+FifiUvhLkGQCdGZiIY4MrjbTkwf8af6wQJObvqWAAnR4RqNJYuK/aISEs 4vXyCgwS73siiEYEEhECAAYFAj3ud8oACgkQs10SPRMEYVWBIQCfRLOPZ9mh5ohN rCvhZJJgzirMfWYAn14nLg6X+2Sjk7qU4RJsB2NVvWRHiEYEEhECAAYFAj+54Q4A CgkQuSRSrEyRZbY06wCgn5Zqx5GcE4yfIa91esjHGuiUlSIAoJctxWqrgzoJ4N4l wVuw2tF5sdo4iEUEExECAAYFAj+5wzMACgkQyzKhB4jDpaWdUQCWKifv+6H1FvHj 8gaMr1VAW0lNLQCcDTS7gjMf8ctAHnSjv0wWaxFUrtSIRgQTEQIABgUCP7msAgAK CRCoHuZJzhnVxoqLAKDBQVdspYH07K2SiFIPGZxefeW+iQCdGiPYXvn1RFVKirGj Lr5eiJ/RIpWIRgQTEQIABgUCP7qY1gAKCRBc/Tf6zHjIk3tsAKDqbtP5ltSJCvgc gCvzJzO2NDTV2wCePBo7YCHvXrk788cohDBAkj84xzCIRgQTEQIABgUCP7mlxgAK CRAQ+kyIpU2i355CAJ95xIIjLiZT6EOgIUQFYwCpqMoa6QCfatVpfH1zv17YI2My HIpuj3L/OFuJAEYEEBECAAYFAj+/rZcACgkQsr68QBUpJK8k8wCfbacgmuHx4QX+ JQfY6JQp94jdM5AAoJfBZiuSoaNjbI1ASOu+bZFBsvH5iQBGBBARAgAGBQI/v63F AAoJEMEee0eWTzHZGuIAn1O6GQAvypRCqqJiZ4SEgzFTcSWLAKDFzQj9YnBFqrK2 MjqJJKr5ZSzIxohGBBIRAgAGBQI/v/1bAAoJEOyZPWNl/c3usNoAn1POailTMcl/ 3Q8nY1w/1yJg8jDpAJ4tJouVo1pGFhlemymbEC6gpMOSUIhGBBMRAgAGBQI/xC4N AAoJEPo8jSYUK1Cb6r4AoJHF1yuluwdBFz1VdqtjrXTZvIpOAJ9g1kFd1Xxj27GT +RsvasX5M8n1XohGBBMRAgAGBQI/x9iEAAoJEKR0DznRR7d2HssAn2p5IR6tD7H5 L+x6/1UXIQCkPtOvAKCJ3vlHTBiAFCn164gqB2x8BNdwJohGBBMRAgAGBQI/yuh2 AAoJEGhad8ruVlUOTXMAnRcCjBZPdNN2CXcdTb3NveAHVJAmAJ44f4m9g0vPeNDX zokeOuv3ztlNaYhGBBMRAgAGBQI/zd80AAoJEBMuSdTkHtx+9T8An0dKrbnE589p xClkBNY0Fp7Nx4wiAKChW4ynvd3UH7CL6L9poQ7zPW3zu4kAmQQSAQIABgUCP8px iQAKCRA+j7fy+INB2aOuA+diQg1Ms/knMOIMdqNARVwkq5uqDWCE1u2+yD6F15yY 19vbPHJTR3mxBQn8tjNWBmwtGzXQY52EYQietgA3/T/OdndwJ7QFr/ABRPKfCnvF Jsqbpquw539CCltwzOC7R6jYYfMHMK3iyX04/NyjH2PE9Yxb+bgAf/y/q9tQQYhG BBMRAgAGBQI/0NebAAoJEGQHhtmtv54aF+EAoIowOTATGSnzjw4qPJxJgeKaVbDC AKCeyjsy1jkARXqznxfz6phb3FszeLkCDQQ4IYzSEAgA9kJXtwh/CBdyorrWqULz Bej5UxE5T7bxbrlLOCDaAadWoxTpj0BV89AHxstDqZSt90xkhkn4DIO9ZekX1KHT UPj1WV/cdlJPPT2N286Z4VeSWc39uK50T8X8dryDxUcwYc58yWb/Ffm7/ZFexwGq 01uejaClcjrUGvC/RgBYK+X0iP1YTknbzSC0neSRBzZrM2w4DUUdD3yIsxx8Wy2O 9vPJI8BD8KVbGI2Ou1WMuF040zT9fBdXQ6MdGGzeMyEstSr/POGxKUAYEY18hKcK ctaGxAMZyAcpesqVDNmWn6vQClCbAkbTCD1mpF1Bn5x8vYlLIhkmuquiXsNV6TIL OwACAggAzu/QObuykLGwPLCoSQEKfeNSGPOr7wK2XSp8c8DS1B2jrVL4oH+PYb6w VhcNd3+Xt4+P/BfllemRU80GD6t/RHoTEZhIhp/38erBLJfLPqFDYdjKf30EMMjF WIhecg9QnZSXU2f7EJ24L+/vnotjAz6hZfJvjb1b1tX3PQ1W2e+lTFhSz1RYSKx4 msEcez3Z0wValNqWlet3t78cCZRT4fPOkyM4C7FbtK6csvFUXkIfu3qgx4aVk8HU IwXkHZD2W7XiFSPhMtgcPeUAb3AIeYJs/iqP4H4N4oJ8B6tXxmpDm3P85PhC4gJO FUThnZKGkLtWwdUago8XSKB5VUA/UIkARgQYEQIABgUCOCGM0gAKCRAy7BdZMKId VXS+AKDhyJwx048+c7ATINSGf6IxiXQyYQCg46pJ/fc0HVWUvHfjioDRaLQUIv8= =lq57 -----END PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.0.6 (GNU/Linux) Comment: For info see http://www.gnupg.org mQGiBDroAiERBADyNm5yn0yL/Gp3U7O3F0MihZthgsSvIoDkKXAWDTMDhT8Nggy6 JhjQS0MbNY8VU+q64K8kpvwKjBaS9tTC9NocY6h9UPNNeQU1Mbr2DAVR4u+wXvAD KlmQrF4mzKD8MujsepjYuVk33/UgLa45aIjrNJUlTwX3Sp9MyJQ6RNnL3wCgsqu0 chx4y/yRii+pJLaqBBPB6usD/1ssfcMk+V1PyBzQrPfrHpCY7HAPuqJ9z83c+z+e qpwLdIoLbY9fTHrqORC4pUqKlzCH7e+LF0F84iQFz8HxqY04LCet21cvjjlTGaQQ WE0l5PWT3DM83AebCBeAALiY5TRzHwqv0PWeKovlFV02rLH/9GcHHt7uvJlTpqOm WdItBADs23ZgEFwvAJ21/EJl46p3Eip/KsRl0YlVNZp8f8llzKkO75+ZtGDyPzis b3ifIZ5aaf8Gj/Kj9z14k2ACyQ0zXh3IK+xkiDSwR/4+1mNAWvZGV99LV9fdjrN8 n01IxDrSpK9R3FLTY98F/lGwdA0/dkGT9ENIAbsvTTc8QE1UJrQdTm9ybWFuIFdh bHNoIDxuZHdAbndhbHNoLmNvbT6IVwQTEQIAFwUCOugCIQULBwoDBAMVAwIDFgIB AheAAAoJEDspbVHMGFo76D4AnA8zoMGdmLZ3iSYs8GQgqMG79qheAJ9LNruDoJXD kYQF/1xblpHplww0s7kBDQQ66AInEAQAwFe71FvMFP1Gl5fMhGYk1TJY9LmvFSx7 AtAewkhYM6e8AtSkuEkxVtyij4V5F9IQehjNBz3xedZnAupN4tjf3V1hB0BtdCHA A7w0HXZrYulph2rGHSG7J/nL3LOL1BUO/619zAsMEAZq2hkSIruEbLzbjiB2JKep RfdYnLnvN+8AAwUD/1JP6fWed0Y3DxHSvLQidcXx+lG9oB5udImEcpcDeP2a59He UJ1lGkqJBLRoEybf0phEAsS0LSgw+oOIpxG5y1pAvkjFEwwGzsumQv49wh8R2Ud7 KwmEtAbyxdAbRf/zrlbO+n+tV5UpcoXcUypfZMUDSBP0/hdz+OJh2PyrqccwiEYE GBECAAYFAjroAicACgkQOyltUcwYWjuA4gCdFOJk+GWS20R3aoNiTnD7V+cDQEIA njl6OEYbqHLkI9yneXePsQlkkcuZ =hhJU -----END PGP PUBLIC KEY BLOCK----- Name User ID Michael Glavassevich mrglavas@ca.ibm.com -----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGP 8.0.3 - not licensed for commercial use: www.pgp.com mQGiBEAX4Q4RBAD/gIkxuOTVes5ccPoI16wPPHwwlEtar0VprlAdwqW5n+FvIvVL cX+dkJGmWM6A2GcFLSjlV4vbvelabhasooCHzs/gMb138+xSYhBgipHgJAzo6Vw3 iH2+ujZRwXhnt0st0ALQhNjIal8T9zB4QMXlLheYyHOTXKX26nbTIepSpwCg/w1x EPl2yfNpB59eA5VlOAz5768D/2HmYGsADKrOopA59DzMlLRDq6f7ehPuMmHFW6It ToY6uBzTHHdYPP+HJ1e8vBnmAfP1Tw1NIEXTa76TyLtIoYcqhajZzPNO7nIwqYrr UOc713TFXA6m8QvWjZYwGrchkLBXjKqTwtJSSzmH9MhwfHWt902ea1OusWtyoNZD QI7GBADNB9rWekuJ77Mds+xI12G+x0zeOshvIIL8pIerWlPdyhaVgs2GRt+/BVoD G/e+3gT5vFV+paTu7Rh1QphEWoQXwClLWNSkivky+G9o2xTCRlURZ7KylwYI9lKd JwEiQX7nhYyuSC8Y5FyD9S6BNohUhJTfBAAGEr1d4EHOKnZ+3rQqTWljaGFlbCBH bGF2YXNzZXZpY2ggPG1yZ2xhdmFzQGNhLmlibS5jb20+iQBXBBARAgAXBQJAF+EO BwsJCAcDAgoCGQEFGwMAAAAACgkQHcMB3HRezqq7jQCgm/LQ9LbfY5nag8ZWygkr KEHGjGgAn0zQgj51GqNGaJx7aA3HgC5Z1krzuQINBEAX4Q4QCAD2Qle3CH8IF3Ki utapQvMF6PlTETlPtvFuuUs4INoBp1ajFOmPQFXz0AfGy0OplK33TGSGSfgMg71l 6RfUodNQ+PVZX9x2Uk89PY3bzpnhV5JZzf24rnRPxfx2vIPFRzBhznzJZv8V+bv9 kV7HAarTW56NoKVyOtQa8L9GAFgr5fSI/VhOSdvNILSd5JEHNmszbDgNRR0PfIiz HHxbLY7288kjwEPwpVsYjY67VYy4XTjTNP18F1dDox0YbN4zISy1Kv884bEpQBgR jXyEpwpy1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsiGSa6q6Je w1XpMgs7AAICB/9/JpIHcuOeMW+l1jZuUQCGIW+Aa5pB/s0x6eS1xoP24eEk9xgC NPVt3pfHRtBh9kQpcvTr5y+sU0G4o2+vrJreld1KKWMwz2NhnSmbBZ8EdQLniuKW mRXLWpMlxq6aP5hEzqu73NsayYNZB7aWY9y0Oz7RpDJ3ggcK38U6DN49drDnfoqO cUjMhpV3OaN/yP77dA99AgTMt4TzzCCqxH9DVmDzTsdh+GTNPC+Tv1Rm0kpgvHDf SF4+VKmcGh1iCk5AvLaQIO8FpcnPyS68BjVPGKTkKwcWsCDhJELmrAtOWwq5MwAH +0F+3MOa7DeROltIcLO7M5Jw6qituFd6jS/2iQBMBBgRAgAMBQJAF+EOBRsMAAAA AAoJEB3DAdx0Xs6q9hQAoMrWVVJkcnuZ0RsbEEsaqt88V682AKChXsOpysIu7Wpw xbl01xpkXrsTpQ== =ONzc -----END PGP PUBLIC KEY BLOCK----- Name User ID Michael Glavassevich mrglavas@ca.ibm.com -----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGP 8.1 - not licensed for commercial use: www.pgp.com mQGiBEK8beERBAD/AP2jAbggMPiFgeG26HijyIiDNfcWkmQomU4MyVUk3eILG3wp d/ebNvgkThirNTr8qddRWLmjMn3uEOEF471l+seh7gya9Xuu4V1Xbet8YIgGdwA6 hmREwjK2OqeMgr8Cz/frkMarAwDNebT2qZ7WtnGQCAlROyFRGAwcU1JrmwCg/6I/ uMgcALMsut7OUGpA39ack+sD/2/k712eGLzqy6WHqCx2+gTki2C2ADwdH3h6/IVj t9BH3AidO+gafz8Wv5Wu7Ok9NRXfvlpp03o+n0fCu3ZFDHrhxZpANLD7sW2nL4UH 8AzBHsQU7NCiZ+WG5yE7lCYzQNQwo00kkFonkY+o512uSDoUmhQTSe1eiWISfNSW NKnRBAClys3dwWtfQ0MsX3OW4A7nZXq90Kxt1oMxpE48aG8MEL8oYqelsnRDYYN/ JGSXi8JeKQyp/2rcocNJP+FaDe023rMzXRTyPOlY4GS5FVB433hU1/ZdG2Bis9f1 szW+i3vbw22N2uHRsvmnf1dmaXBKRcxCxsO9qQRNzA4wg7Jq4rQqTWljaGFlbCBH bGF2YXNzZXZpY2ggPG1yZ2xhdmFzQGNhLmlibS5jb20+iQBdBBARAgAdBQJCvG3h BwsJCAcDAgoCGQEFGwMAAAAFHgEAAAAACgkQ/UnAesCSaxNzIgCcCV+HNMY5uvD8 fgjKSzqDvpGQ3gMAoKjuemz8st3QH+6SVQ2AQP6IdtZRuQINBEK8beEQCAD2Qle3 CH8IF3KiutapQvMF6PlTETlPtvFuuUs4INoBp1ajFOmPQFXz0AfGy0OplK33TGSG SfgMg71l6RfUodNQ+PVZX9x2Uk89PY3bzpnhV5JZzf24rnRPxfx2vIPFRzBhznzJ Zv8V+bv9kV7HAarTW56NoKVyOtQa8L9GAFgr5fSI/VhOSdvNILSd5JEHNmszbDgN RR0PfIizHHxbLY7288kjwEPwpVsYjY67VYy4XTjTNP18F1dDox0YbN4zISy1Kv88 4bEpQBgRjXyEpwpy1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsi GSa6q6Jew1XpMgs7AAICCADYC32Mp6Rza1Z4mTZK6Run1e+w23K8jNxSN3kRSbAd nKlonYpBQRw/5JwbYNFXriqDtsrJYhGBb1caaRyDlegAinXWnRq6o+kkLLemZQOo qOW1FIOjWLV6bKbQO+8/2zh8ukGm+uTiljMyOj5g5Y55h47u0hKObP9O/JX4ZTb+ xCMNmlapOdGQqiHy0SwfYs0eB9roQeLpPF8cA6HX/CrmwjwZzmTNk5nXE63VH9fJ DVYKr3GDajD33VSV8BMlFscKpIJSsILvfCZJY/qmZcpgSZOBfqDTDB1xQBHsR/CT cRI6Ri6WFDmBPAavFhB/QLcwRcTfMRkIeaLc34E5tW7UiQBMBBgRAgAMBQJCvG3h BRsMAAAAAAoJEP1JwHrAkmsTJCsAn3AT5PPocZARQWNClJxnePPSAkbdAKCaWftI fy7m79rRrQiANKiR07P/lw== =LVTd -----END PGP PUBLIC KEY BLOCK-----xml-commons-resolver-1.2/LICENSE.resolver.txt100644 0 0 26446 10530407253 16331 0ustar 0 0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed 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. xml-commons-resolver-1.2/NOTICE-resolver.txt100644 0 0 604 10530407253 16153 0ustar 0 0 Apache XML Commons Resolver Copyright 2006 The Apache Software Foundation. This product includes software developed at The Apache Software Foundation http://www.apache.org/ Portions of this code are derived from classes placed in the public domain by Arbortext on 10 Apr 2000. See: http://www.arbortext.com/customer_support/updates_and_technical_notes/catalogs/docs/README.htm xml-commons-resolver-1.2/apidocs/resolver/allclasses-frame.html100644 0 0 7155 10530407252 22210 0ustar 0 0 All Classes All Classes
BootstrapResolver
Catalog
CatalogEntry
CatalogException
CatalogManager
CatalogReader
CatalogResolver
Debug
DOMCatalogParser
DOMCatalogReader
ExtendedXMLCatalogReader
FileURL
Namespaces
OASISXMLCatalogReader
PublicId
resolver
Resolver
ResolvingParser
ResolvingXMLFilter
ResolvingXMLReader
SAXCatalogParser
SAXCatalogReader
SAXParserHandler
TextCatalogReader
TR9401CatalogReader
Version
XCatalogReader
xparse
XParseError
xread
xml-commons-resolver-1.2/apidocs/resolver/deprecated-list.html100644 0 0 20102 10530407253 22047 0ustar 0 0 xml-commons-resolver API: Deprecated List

Deprecated API

Deprecated Classes
org.apache.xml.resolver.tools.ResolvingParser
          This interface has been replaced by the ResolvingXMLReader for SAX2. 
org.apache.xml.resolver.apps.xparse
          This interface has been replaced by the ResolvingXMLReader for SAX2. 
 

Deprecated Methods
org.apache.xml.resolver.CatalogManager.allowOasisXMLCatalogPI()
          No longer static; use get/set methods. 
org.apache.xml.resolver.CatalogManager.catalogClassName()
          No longer static; use get/set methods. 
org.apache.xml.resolver.CatalogManager.catalogFiles()
          No longer static; use get/set methods. 
org.apache.xml.resolver.CatalogManager.ignoreMissingProperties(boolean)
          No longer static; use get/set methods. 
org.apache.xml.resolver.CatalogManager.preferPublic()
          No longer static; use get/set methods. 
org.apache.xml.resolver.CatalogManager.relativeCatalogs()
          No longer static; use get/set methods. 
org.apache.xml.resolver.CatalogManager.staticCatalog()
          No longer static; use get/set methods. 
org.apache.xml.resolver.CatalogManager.verbosity()
          No longer static; use get/set methods. 
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/help-doc.html100644 0 0 20513 10530407252 20476 0ustar 0 0 xml-commons-resolver API: API Help

How This API Document Is Organized

This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

Overview

The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

Package

Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

  • Interfaces (italic)
  • Classes
  • Exceptions
  • Errors

Class/Interface

Each class, interface, inner class and inner interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description

  • Inner Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary

  • Field Detail
  • Constructor Detail
  • Method Detail
Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

Use

Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

Tree (Class Hierarchy)

There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.

Deprecated API

The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

Index

The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

Prev/Next

These links take you to the next or previous class, interface, package, or related page.

Frames/No Frames

These links show and hide the HTML frames. All pages are available with or without frames.

Serialized Form

Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

This help file applies to API documentation generated using the standard doclet.



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/index-all.html100644 0 0 356713 10530407252 20716 0ustar 0 0 xml-commons-resolver API: Index
A B C D E F G I L M N O P Q R S T U V W X

A

addDelegate(CatalogEntry) - Method in class org.apache.xml.resolver.Catalog
Add to the current list of delegated catalogs.
addEntry(CatalogEntry) - Method in class org.apache.xml.resolver.Catalog
Cleanup and process a Catalog entry.
addEntry(CatalogEntry) - Method in class org.apache.xml.resolver.Resolver
Cleanup and process a Catalog entry.
addEntryType(String, int) - Static method in class org.apache.xml.resolver.CatalogEntry
Adds a new catalog entry type.
addReader(String, CatalogReader) - Method in class org.apache.xml.resolver.Catalog
Add a new CatalogReader to the Catalog.
allowOasisXMLCatalogPI() - Method in class org.apache.xml.resolver.CatalogManager
Deprecated. No longer static; use get/set methods.
args - Variable in class org.apache.xml.resolver.CatalogEntry
The arguments associated with this entry

B

base - Variable in class org.apache.xml.resolver.Catalog
The base URI for relative system identifiers in the catalog.
BASE - Static variable in class org.apache.xml.resolver.Catalog
The BASE Catalog Entry type.
baseURIStack - Variable in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
 
BootstrapResolver - class org.apache.xml.resolver.helpers.BootstrapResolver.
A simple bootstrapping resolver.
BootstrapResolver() - Constructor for class org.apache.xml.resolver.helpers.BootstrapResolver
Constructor.

C

caseSensitive - Variable in class org.apache.xml.resolver.readers.TextCatalogReader
Are keywords in the catalog case sensitive?
catalog - Variable in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The catalog object needs to be stored by the object so that SAX callbacks can use it.
catalog - Variable in class org.apache.xml.resolver.readers.XCatalogReader
The catalog object needs to be stored by the object so that SAX callbacks can use it.
Catalog - class org.apache.xml.resolver.Catalog.
Represents OASIS Open Catalog files.
CATALOG - Static variable in class org.apache.xml.resolver.Catalog
The CATALOG Catalog Entry type.
Catalog() - Constructor for class org.apache.xml.resolver.Catalog
Constructs an empty Catalog.
Catalog(CatalogManager) - Constructor for class org.apache.xml.resolver.Catalog
Constructs an empty Catalog with a specific CatalogManager.
catalogClassName() - Method in class org.apache.xml.resolver.CatalogManager
Deprecated. No longer static; use get/set methods.
catalogCwd - Variable in class org.apache.xml.resolver.Catalog
The base URI of the Catalog file currently being parsed.
catalogEntries - Variable in class org.apache.xml.resolver.Catalog
The catalog entries currently known to the system.
CatalogEntry - class org.apache.xml.resolver.CatalogEntry.
Represents a Catalog entry.
CatalogEntry() - Constructor for class org.apache.xml.resolver.CatalogEntry
Null constructor; something for subclasses to call.
CatalogEntry(int, Vector) - Constructor for class org.apache.xml.resolver.CatalogEntry
Construct a catalog entry of the specified type.
CatalogEntry(String, Vector) - Constructor for class org.apache.xml.resolver.CatalogEntry
Construct a catalog entry of the specified type.
CatalogException - exception org.apache.xml.resolver.CatalogException.
Signal Catalog exception.
CatalogException(Exception) - Constructor for class org.apache.xml.resolver.CatalogException
Create a new CatalogException wrapping an existing exception.
CatalogException(int) - Constructor for class org.apache.xml.resolver.CatalogException
Create a new CatalogException.
CatalogException(int, String) - Constructor for class org.apache.xml.resolver.CatalogException
Create a new CatalogException.
CatalogException(String, Exception) - Constructor for class org.apache.xml.resolver.CatalogException
Create a new CatalogException from an existing exception.
catalogFiles - Variable in class org.apache.xml.resolver.Catalog
A vector of catalog files to be loaded.
catalogFiles() - Method in class org.apache.xml.resolver.CatalogManager
Deprecated. No longer static; use get/set methods.
catalogManager - Variable in class org.apache.xml.resolver.Catalog
The catalog manager in use for this instance.
CatalogManager - class org.apache.xml.resolver.CatalogManager.
CatalogManager provides an interface to the catalog properties.
CatalogManager() - Constructor for class org.apache.xml.resolver.CatalogManager
Constructor.
CatalogManager(String) - Constructor for class org.apache.xml.resolver.CatalogManager
Constructor that specifies an explicit property file.
CatalogReader - interface org.apache.xml.resolver.readers.CatalogReader.
The CatalogReader interface.
CatalogResolver - class org.apache.xml.resolver.tools.CatalogResolver.
A SAX EntityResolver/JAXP URIResolver that uses catalogs.
CatalogResolver() - Constructor for class org.apache.xml.resolver.tools.CatalogResolver
Constructor
CatalogResolver(boolean) - Constructor for class org.apache.xml.resolver.tools.CatalogResolver
Constructor
CatalogResolver(CatalogManager) - Constructor for class org.apache.xml.resolver.tools.CatalogResolver
Constructor
catalogs - Variable in class org.apache.xml.resolver.Catalog
A vector of Catalogs.
catfile - Variable in class org.apache.xml.resolver.readers.TextCatalogReader
The input stream used to read the catalog
characters(char[], int, int) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX characters method.
characters(char[], int, int) - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The SAX characters method does nothing.
characters(char[], int, int) - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
characters(char[], int, int) - Method in class org.apache.xml.resolver.readers.XCatalogReader
The SAX characters method does nothing.
characters(char[], int, int) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX DocumentHandler API.
checkAttributes(Attributes, String) - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
 
checkAttributes(Attributes, String, String) - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
 
copyReaders(Catalog) - Method in class org.apache.xml.resolver.Catalog
Copies the reader list from the current Catalog to a new Catalog.

D

debug - Variable in class org.apache.xml.resolver.CatalogManager
The manager's debug object.
debug - Variable in class org.apache.xml.resolver.helpers.Debug
The internal debug level.
debug - Variable in class org.apache.xml.resolver.readers.SAXCatalogReader
The debug class to use for this reader.
Debug - class org.apache.xml.resolver.helpers.Debug.
Static debugging/messaging class for Catalogs.
Debug() - Constructor for class org.apache.xml.resolver.helpers.Debug
Constructor
decodeURN(String) - Static method in class org.apache.xml.resolver.helpers.PublicId
Decode a "publicid" URN into a public identifier.
default_override - Variable in class org.apache.xml.resolver.Catalog
The default initial override setting.
DELEGATE_PUBLIC - Static variable in class org.apache.xml.resolver.Catalog
The DELEGATE_PUBLIC Catalog Entry type.
DELEGATE_SYSTEM - Static variable in class org.apache.xml.resolver.Catalog
The DELEGATE_SYSTEM Catalog Entry type.
DELEGATE_URI - Static variable in class org.apache.xml.resolver.Catalog
The DELEGATE_URI Catalog Entry type.
DOCTYPE - Static variable in class org.apache.xml.resolver.Catalog
The DOCTYPE Catalog Entry type.
DOCUMENT - Static variable in class org.apache.xml.resolver.Catalog
The DOCUMENT Catalog Entry type.
DOMCatalogParser - interface org.apache.xml.resolver.readers.DOMCatalogParser.
The DOMCatalogParser interface.
DOMCatalogReader - class org.apache.xml.resolver.readers.DOMCatalogReader.
A DOM-based CatalogReader.
DOMCatalogReader() - Constructor for class org.apache.xml.resolver.readers.DOMCatalogReader
Null constructor; something for subclasses to call.
DTDDECL - Static variable in class org.apache.xml.resolver.Catalog
The DTDDECL Catalog Entry type.

E

encodedByte(int) - Method in class org.apache.xml.resolver.Catalog
Perform %-encoding on a single byte.
encodeURN(String) - Static method in class org.apache.xml.resolver.helpers.PublicId
Encode a public identifier as a "publicid" URN.
endDocument() - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX endDocument method.
endDocument() - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The SAX endDocument method does nothing.
endDocument() - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
endDocument() - Method in class org.apache.xml.resolver.readers.XCatalogReader
The SAX endDocument method does nothing.
endDocument() - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX DocumentHandler API.
endElement(String) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX endElement method.
endElement(String) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX DocumentHandler API.
endElement(String, String, String) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX2 endElement method.
endElement(String, String, String) - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The SAX endElement
endElement(String, String, String) - Method in class org.apache.xml.resolver.readers.ExtendedXMLCatalogReader
The SAX endElement method does nothing.
endElement(String, String, String) - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
endElement(String, String, String) - Method in class org.apache.xml.resolver.readers.XCatalogReader
The SAX endElement method does nothing.
endPrefixMapping(String) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX endPrefixMapping method.
endPrefixMapping(String) - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The SAX endPrefixMapping method does nothing.
endPrefixMapping(String) - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
endPrefixMapping(String) - Method in class org.apache.xml.resolver.readers.XCatalogReader
The SAX endPrefixMapping method does nothing.
ENTITY - Static variable in class org.apache.xml.resolver.Catalog
The ENTITY Catalog Entry type.
entryArgs - Static variable in class org.apache.xml.resolver.CatalogEntry
The entryTypes vector maps catalog entry types to the number of arguments they're required to have.
entryType - Variable in class org.apache.xml.resolver.CatalogEntry
The entry type of this entry
entryTypes - Static variable in class org.apache.xml.resolver.CatalogEntry
The entryTypes vector maps catalog entry names (e.g., 'BASE' or 'SYSTEM') to their type (1, 2, etc.).
error(SAXParseException) - Method in class org.apache.xml.resolver.apps.XParseError
SAX2 API
extendedNamespaceName - Static variable in class org.apache.xml.resolver.readers.ExtendedXMLCatalogReader
The namespace name of extended catalog elements
ExtendedXMLCatalogReader - class org.apache.xml.resolver.readers.ExtendedXMLCatalogReader.
Parse Extended OASIS Entity Resolution Technical Committee XML Catalog files.
ExtendedXMLCatalogReader() - Constructor for class org.apache.xml.resolver.readers.ExtendedXMLCatalogReader
 

F

fatalError(SAXParseException) - Method in class org.apache.xml.resolver.apps.XParseError
SAX2 API
FileURL - class org.apache.xml.resolver.helpers.FileURL.
Static method for dealing with file: URLs.
FileURL() - Constructor for class org.apache.xml.resolver.helpers.FileURL
 
finalize() - Method in class org.apache.xml.resolver.readers.TextCatalogReader
The destructor.
fixSlashes(String) - Method in class org.apache.xml.resolver.Catalog
Replace backslashes with forward slashes.

G

getAllowOasisXMLCatalogPI() - Method in class org.apache.xml.resolver.CatalogManager
Get the current XML Catalog PI setting.
getBootstrapResolver() - Method in class org.apache.xml.resolver.CatalogManager
Get the bootstrap resolver.
getCaseSensitive() - Method in class org.apache.xml.resolver.readers.TextCatalogReader
 
getCatalog() - Method in class org.apache.xml.resolver.CatalogManager
Get a catalog instance.
getCatalog() - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
Get the current catalog.
getCatalog() - Method in class org.apache.xml.resolver.readers.XCatalogReader
Get the current catalog.
getCatalog() - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. Return the Catalog being used.
getCatalog() - Method in class org.apache.xml.resolver.tools.ResolvingXMLFilter
Provide accessto the underlying Catalog.
getCatalog() - Method in class org.apache.xml.resolver.tools.CatalogResolver
Return the underlying catalog
getCatalogClassName() - Method in class org.apache.xml.resolver.CatalogManager
Get the current Catalog class name.
getCatalogFiles() - Method in class org.apache.xml.resolver.CatalogManager
Return the current list of catalog files.
getCatalogManager() - Method in class org.apache.xml.resolver.Catalog
Return the CatalogManager used by this catalog.
getCatalogParser(String, String) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
Get the SAXCatalogParser class for the given namespace/root element type.
getCatalogParser(String, String) - Method in class org.apache.xml.resolver.readers.DOMCatalogReader
Get the name of the parser class for a given catalog type.
getCurrentBase() - Method in class org.apache.xml.resolver.Catalog
Returns the current base URI.
getDebug() - Method in class org.apache.xml.resolver.helpers.Debug
Get the current debug level.
getDefaultOverride() - Method in class org.apache.xml.resolver.Catalog
Returns the default override setting associated with this catalog.
getEntryArg(int) - Method in class org.apache.xml.resolver.CatalogEntry
Get an entry argument.
getEntryArgCount(int) - Static method in class org.apache.xml.resolver.CatalogEntry
Find out how many arguments an entry is required to have.
getEntryArgCount(String) - Static method in class org.apache.xml.resolver.CatalogEntry
Find out how many arguments an entry is required to have.
getEntryType() - Method in class org.apache.xml.resolver.CatalogEntry
Get the entry type.
getEntryType(String) - Static method in class org.apache.xml.resolver.CatalogEntry
Lookup an entry type
getErrorCount() - Method in class org.apache.xml.resolver.apps.XParseError
Return the error count
getException() - Method in class org.apache.xml.resolver.CatalogException
Return the embedded exception, if any.
getExceptionType() - Method in class org.apache.xml.resolver.CatalogException
Return the exception type
getFatalCount() - Method in class org.apache.xml.resolver.apps.XParseError
Return the fatal error count
getIgnoreMissingProperties() - Method in class org.apache.xml.resolver.CatalogManager
How are missing properties handled?
getLocalName(Element) - Static method in class org.apache.xml.resolver.helpers.Namespaces
Returns the "localname" part of a QName, which is the whole name if it has no prefix.
getMaxMessages() - Method in class org.apache.xml.resolver.apps.XParseError
Return the number of messages to display
getMessage() - Method in class org.apache.xml.resolver.CatalogException
Return a detail message for this exception.
getNamespaceURI(Element) - Static method in class org.apache.xml.resolver.helpers.Namespaces
Returns the namespace URI for the namespace to which the element belongs.
getNamespaceURI(Node, String) - Static method in class org.apache.xml.resolver.helpers.Namespaces
Returns the namespace URI for the specified prefix at the specified context node.
getParserClass() - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
Get the parser class currently in use.
getParserFactory() - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
Get the parser factory currently in use.
getPreferPublic() - Method in class org.apache.xml.resolver.CatalogManager
Return the current prefer public setting.
getPrefix(Element) - Static method in class org.apache.xml.resolver.helpers.Namespaces
Returns the "prefix" part of a QName or the empty string (not null) if the name has no prefix.
getPrivateCatalog() - Method in class org.apache.xml.resolver.CatalogManager
Get a new catalog instance.
getProduct() - Static method in class org.apache.xml.resolver.Version
Get just the product name.
getRelativeCatalogs() - Method in class org.apache.xml.resolver.CatalogManager
Get the relativeCatalogs setting.
getResolvedEntity(String, String) - Method in class org.apache.xml.resolver.tools.CatalogResolver
Implements the guts of the resolveEntity method for the SAX interface.
getStaticManager() - Static method in class org.apache.xml.resolver.CatalogManager
Allow access to the static CatalogManager
getUseStaticCatalog() - Method in class org.apache.xml.resolver.CatalogManager
Get the current use static catalog setting.
getVerbosity() - Method in class org.apache.xml.resolver.CatalogManager
What is the current verbosity?
getVersion() - Static method in class org.apache.xml.resolver.Version
Get the version string for xml-commons-resolver.
getVersionNum() - Static method in class org.apache.xml.resolver.Version
Get just the version number v.r.
getWarningCount() - Method in class org.apache.xml.resolver.apps.XParseError
Return the warning count

I

ignorableWhitespace(char[], int, int) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX ignorableWhitespace method.
ignorableWhitespace(char[], int, int) - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The SAX ignorableWhitespace method does nothing.
ignorableWhitespace(char[], int, int) - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
ignorableWhitespace(char[], int, int) - Method in class org.apache.xml.resolver.readers.XCatalogReader
The SAX ignorableWhitespace method does nothing.
ignorableWhitespace(char[], int, int) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX DocumentHandler API.
ignoreMissingProperties(boolean) - Method in class org.apache.xml.resolver.CatalogManager
Deprecated. No longer static; use get/set methods.
inExtensionNamespace() - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
Are we in an extension namespace?
INVALID_ENTRY - Static variable in class org.apache.xml.resolver.CatalogException
An invalid entry
INVALID_ENTRY_TYPE - Static variable in class org.apache.xml.resolver.CatalogException
An invalid entry type

L

LINKTYPE - Static variable in class org.apache.xml.resolver.Catalog
The LINKTYPE Catalog Entry type.
loadSystemCatalogs() - Method in class org.apache.xml.resolver.Catalog
Load the system catalog files.
localCatalogFiles - Variable in class org.apache.xml.resolver.Catalog
A vector of catalog files constructed during processing of CATALOG entries in the current catalog.
localDelegate - Variable in class org.apache.xml.resolver.Catalog
A vector of DELEGATE* Catalog entries constructed during processing of the Catalog.

M

main(String[]) - Static method in class org.apache.xml.resolver.Version
Print the release version to the command line.
main(String[]) - Static method in class org.apache.xml.resolver.apps.xparse
Deprecated. The main entry point
main(String[]) - Static method in class org.apache.xml.resolver.apps.resolver
The main entry point
main(String[]) - Static method in class org.apache.xml.resolver.apps.xread
The main entry point
makeAbsolute(String) - Method in class org.apache.xml.resolver.Catalog
Construct an absolute URI from a relative one, using the current base URI.
makeURL(String) - Static method in class org.apache.xml.resolver.helpers.FileURL
Construct a file: URL for a path name.
message(int, String) - Method in class org.apache.xml.resolver.helpers.Debug
Print debug message (if the debug level is high enough).
message(int, String, String) - Method in class org.apache.xml.resolver.helpers.Debug
Print debug message (if the debug level is high enough).
message(int, String, String, String) - Method in class org.apache.xml.resolver.helpers.Debug
Print debug message (if the debug level is high enough).

N

namespaceAware - Static variable in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. Make the parser Namespace aware?
namespaceAware - Static variable in class org.apache.xml.resolver.tools.ResolvingXMLReader
Make the parser Namespace aware?
namespaceAware - Variable in class org.apache.xml.resolver.tools.CatalogResolver
Make the parser Namespace aware?
namespaceMap - Variable in class org.apache.xml.resolver.readers.SAXCatalogReader
Mapping table from QNames to CatalogParser classes.
namespaceMap - Variable in class org.apache.xml.resolver.readers.DOMCatalogReader
Mapping table from QNames to CatalogParser classes.
namespaceName - Static variable in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The namespace name of OASIS ERTC catalogs
Namespaces - class org.apache.xml.resolver.helpers.Namespaces.
Static Namespace query methods.
Namespaces() - Constructor for class org.apache.xml.resolver.helpers.Namespaces
 
namespaceStack - Variable in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
 
newCatalog() - Method in class org.apache.xml.resolver.Catalog
Create a new Catalog object.
nextChar() - Method in class org.apache.xml.resolver.readers.TextCatalogReader
Return the next logical character from the input stream.
nextEntry - Static variable in class org.apache.xml.resolver.CatalogEntry
The nextEntry is the ordinal number of the next entry type.
nextToken() - Method in class org.apache.xml.resolver.readers.TextCatalogReader
Return the next token in the catalog file.
NO_XML_PARSER - Static variable in class org.apache.xml.resolver.CatalogException
Could not instantiate an XML parser
normalize(String) - Static method in class org.apache.xml.resolver.helpers.PublicId
Normalize a public identifier.
normalizeURI(String) - Method in class org.apache.xml.resolver.Catalog
Perform character normalization on a URI reference.
NOTATION - Static variable in class org.apache.xml.resolver.Catalog
The NOTATION Catalog Entry type.
notationDecl(String, String, String) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX DTDHandler API.
notationDecl(String, String, String) - Method in class org.apache.xml.resolver.tools.ResolvingXMLFilter
SAX DTDHandler API.

O

OASISXMLCatalogReader - class org.apache.xml.resolver.readers.OASISXMLCatalogReader.
Parse OASIS Entity Resolution Technical Committee XML Catalog files.
OASISXMLCatalogReader() - Constructor for class org.apache.xml.resolver.readers.OASISXMLCatalogReader
Default constructor
OASISXMLCatalogReader(SAXParserFactory, Catalog) - Constructor for class org.apache.xml.resolver.readers.OASISXMLCatalogReader
Constructor allowing for providing custom SAX parser factory
org.apache.xml.resolver - package org.apache.xml.resolver
Apache XML Commons Resolver package.
org.apache.xml.resolver.apps - package org.apache.xml.resolver.apps
Apache XML Commons Resolver Applications package.
org.apache.xml.resolver.helpers - package org.apache.xml.resolver.helpers
Apache XML Commons Resolver Helpers package.
org.apache.xml.resolver.readers - package org.apache.xml.resolver.readers
Apache XML Commons Resolver Readers package.
org.apache.xml.resolver.tools - package org.apache.xml.resolver.tools
Apache XML Commons Resolver Tools package.
OVERRIDE - Static variable in class org.apache.xml.resolver.Catalog
The OVERRIDE Catalog Entry type.
overrideStack - Variable in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
 

P

PARSE_FAILED - Static variable in class org.apache.xml.resolver.CatalogException
XML but parse failed
parse(InputSource) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX Parser API.
parse(InputSource) - Method in class org.apache.xml.resolver.tools.ResolvingXMLFilter
SAX XMLReader API.
parse(String) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX Parser API.
parse(String) - Method in class org.apache.xml.resolver.tools.ResolvingXMLFilter
SAX XMLReader API.
parseAllCatalogs() - Method in class org.apache.xml.resolver.Catalog
Parse all subordinate catalogs.
parseCatalog(String) - Method in class org.apache.xml.resolver.Catalog
Parse a catalog file, augmenting internal data structures.
parseCatalog(String, InputStream) - Method in class org.apache.xml.resolver.Catalog
Parse a catalog file, augmenting internal data structures.
parseCatalog(URL) - Method in class org.apache.xml.resolver.Catalog
Parse a catalog document, augmenting internal data structures.
parseCatalogEntry(Catalog, Node) - Method in interface org.apache.xml.resolver.readers.DOMCatalogParser
Parse a DOM node as a catalog entry.
parseCatalogFile(String) - Method in class org.apache.xml.resolver.Catalog
Parse a single catalog file, augmenting internal data structures.
parsePendingCatalogs() - Method in class org.apache.xml.resolver.Catalog
Parse all of the pending catalogs.
parserClass - Variable in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX Parser Class
parserFactory - Variable in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX Parser Factory
preferPublic() - Method in class org.apache.xml.resolver.CatalogManager
Deprecated. No longer static; use get/set methods.
processingInstruction(String, String) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX processingInstruction method.
processingInstruction(String, String) - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The SAX processingInstruction method does nothing.
processingInstruction(String, String) - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
processingInstruction(String, String) - Method in class org.apache.xml.resolver.readers.XCatalogReader
The SAX processingInstruction method does nothing.
processingInstruction(String, String) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX DocumentHandler API.
processingInstruction(String, String) - Method in class org.apache.xml.resolver.tools.ResolvingXMLFilter
SAX ContentHandler API.
PUBLIC - Static variable in class org.apache.xml.resolver.Catalog
The PUBLIC Catalog Entry type.
PublicId - class org.apache.xml.resolver.helpers.PublicId.
Static methods for dealing with public identifiers.
PublicId() - Constructor for class org.apache.xml.resolver.helpers.PublicId
 

Q

queryAllowOasisXMLCatalogPI() - Method in class org.apache.xml.resolver.CatalogManager
Obtain the oasisXMLCatalogPI setting from the properties.
queryCatalogClassName() - Method in class org.apache.xml.resolver.CatalogManager
Obtain the Catalog class name setting from the properties.
queryResolver(String, String, String, String) - Method in class org.apache.xml.resolver.Resolver
Query an external RFC2483 resolver.

R

readCatalog(Catalog, InputStream) - Method in class org.apache.xml.resolver.readers.TextCatalogReader
 
readCatalog(Catalog, InputStream) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
Parse an XML Catalog stream.
readCatalog(Catalog, InputStream) - Method in class org.apache.xml.resolver.readers.TR9401CatalogReader
Start parsing an OASIS TR9401 Open Catalog file.
readCatalog(Catalog, InputStream) - Method in interface org.apache.xml.resolver.readers.CatalogReader
Read a catalog from an input stream.
readCatalog(Catalog, InputStream) - Method in class org.apache.xml.resolver.readers.DOMCatalogReader
Read a catalog from an input stream.
readCatalog(Catalog, String) - Method in class org.apache.xml.resolver.readers.TextCatalogReader
Start parsing a text catalog file.
readCatalog(Catalog, String) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
Parse an XML Catalog file.
readCatalog(Catalog, String) - Method in interface org.apache.xml.resolver.readers.CatalogReader
Read a catalog from a file.
readCatalog(Catalog, String) - Method in class org.apache.xml.resolver.readers.DOMCatalogReader
Read the catalog behind the specified URL.
readerArr - Variable in class org.apache.xml.resolver.Catalog
A vector of CatalogReaders.
readerMap - Variable in class org.apache.xml.resolver.Catalog
A hash of CatalogReaders.
relativeCatalogs() - Method in class org.apache.xml.resolver.CatalogManager
Deprecated. No longer static; use get/set methods.
resolve(String, String) - Method in class org.apache.xml.resolver.helpers.BootstrapResolver
Transformer resolve API.
resolve(String, String) - Method in class org.apache.xml.resolver.tools.CatalogResolver
JAXP URIResolver API
resolveAllSystem(String) - Method in class org.apache.xml.resolver.Resolver
Return the applicable SYSTEM system identifiers.
resolveAllSystemReverse(String) - Method in class org.apache.xml.resolver.Resolver
Find the URNs for a given system identifier in all catalogs.
resolveDoctype(String, String, String) - Method in class org.apache.xml.resolver.Catalog
Return the applicable DOCTYPE system identifier.
resolveDocument() - Method in class org.apache.xml.resolver.Catalog
Return the applicable DOCUMENT entry.
resolveEntity(String, String) - Method in class org.apache.xml.resolver.helpers.BootstrapResolver
SAX resolveEntity API.
resolveEntity(String, String) - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
resolveEntity(String, String) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. Implements the resolveEntity method for the SAX interface, using an underlying CatalogResolver to do the real work.
resolveEntity(String, String) - Method in class org.apache.xml.resolver.tools.ResolvingXMLFilter
Implements the resolveEntity method for the SAX interface, using an underlying CatalogResolver to do the real work.
resolveEntity(String, String) - Method in class org.apache.xml.resolver.tools.CatalogResolver
Implements the resolveEntity method for the SAX interface.
resolveEntity(String, String, String) - Method in class org.apache.xml.resolver.Catalog
Return the applicable ENTITY system identifier.
resolveExternalPublic(String, String) - Method in class org.apache.xml.resolver.Resolver
Query an external RFC2483 resolver for a public identifier.
resolveExternalSystem(String, String) - Method in class org.apache.xml.resolver.Resolver
Query an external RFC2483 resolver for a system identifier.
resolveLocalPublic(int, String, String, String) - Method in class org.apache.xml.resolver.Catalog
Return the applicable PUBLIC or SYSTEM identifier.
resolveLocalSystem(String) - Method in class org.apache.xml.resolver.Catalog
Return the applicable SYSTEM system identifier in this catalog.
resolveLocalURI(String) - Method in class org.apache.xml.resolver.Catalog
Return the applicable URI in this catalog.
resolveNotation(String, String, String) - Method in class org.apache.xml.resolver.Catalog
Return the applicable NOTATION system identifier.
resolvePublic(String, String) - Method in class org.apache.xml.resolver.Catalog
Return the applicable PUBLIC or SYSTEM identifier.
resolvePublic(String, String) - Method in class org.apache.xml.resolver.Resolver
Return the applicable PUBLIC or SYSTEM identifier, resorting to external resolvers if necessary.
resolver - class org.apache.xml.resolver.apps.resolver.
A simple command-line resolver.
Resolver - class org.apache.xml.resolver.Resolver.
An extension to OASIS Open Catalog files, this class supports suffix-based matching and an external RFC2483 resolver.
RESOLVER - Static variable in class org.apache.xml.resolver.Resolver
The RESOLVER Catalog Entry type.
resolver() - Constructor for class org.apache.xml.resolver.apps.resolver
 
Resolver() - Constructor for class org.apache.xml.resolver.Resolver
 
resolveSubordinateCatalogs(int, String, String, String) - Method in class org.apache.xml.resolver.Catalog
Search the subordinate catalogs, in order, looking for a match.
resolveSystem(String) - Method in class org.apache.xml.resolver.Catalog
Return the applicable SYSTEM system identifier.
resolveSystem(String) - Method in class org.apache.xml.resolver.Resolver
Return the applicable SYSTEM system identifier, resorting to external RESOLVERs if necessary.
resolveSystemReverse(String) - Method in class org.apache.xml.resolver.Resolver
Find the URN for a given system identifier.
resolveURI(String) - Method in class org.apache.xml.resolver.Catalog
Return the applicable URI.
resolveURI(String) - Method in class org.apache.xml.resolver.Resolver
Return the applicable URI.
ResolvingParser - class org.apache.xml.resolver.tools.ResolvingParser.
Deprecated. This interface has been replaced by the ResolvingXMLReader for SAX2.
ResolvingParser() - Constructor for class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. Constructor.
ResolvingParser(CatalogManager) - Constructor for class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. Constructor.
ResolvingXMLFilter - class org.apache.xml.resolver.tools.ResolvingXMLFilter.
A SAX XMLFilter that performs catalog-based entity resolution.
ResolvingXMLFilter() - Constructor for class org.apache.xml.resolver.tools.ResolvingXMLFilter
Construct an empty XML Filter with no parent.
ResolvingXMLFilter(CatalogManager) - Constructor for class org.apache.xml.resolver.tools.ResolvingXMLFilter
Construct an XML filter with the specified parent.
ResolvingXMLFilter(XMLReader) - Constructor for class org.apache.xml.resolver.tools.ResolvingXMLFilter
Construct an XML filter with the specified parent.
ResolvingXMLFilter(XMLReader, CatalogManager) - Constructor for class org.apache.xml.resolver.tools.ResolvingXMLFilter
Construct an XML filter with the specified parent.
ResolvingXMLReader - class org.apache.xml.resolver.tools.ResolvingXMLReader.
A SAX XMLReader that performs catalog-based entity resolution.
ResolvingXMLReader() - Constructor for class org.apache.xml.resolver.tools.ResolvingXMLReader
Construct a new reader from the JAXP factory.
ResolvingXMLReader(CatalogManager) - Constructor for class org.apache.xml.resolver.tools.ResolvingXMLReader
Construct a new reader from the JAXP factory.
REWRITE_SYSTEM - Static variable in class org.apache.xml.resolver.Catalog
The REWRITE_SYSTEM Catalog Entry type.
REWRITE_URI - Static variable in class org.apache.xml.resolver.Catalog
The REWRITE_URI Catalog Entry type.

S

SAXCatalogParser - interface org.apache.xml.resolver.readers.SAXCatalogParser.
The SAXCatalogParser interface.
SAXCatalogReader - class org.apache.xml.resolver.readers.SAXCatalogReader.
A SAX-based CatalogReader.
SAXCatalogReader() - Constructor for class org.apache.xml.resolver.readers.SAXCatalogReader
The constructor
SAXCatalogReader(SAXParserFactory) - Constructor for class org.apache.xml.resolver.readers.SAXCatalogReader
The constructor
SAXCatalogReader(String) - Constructor for class org.apache.xml.resolver.readers.SAXCatalogReader
The constructor
SAXParserHandler - class org.apache.xml.resolver.readers.SAXParserHandler.
An entity-resolving DefaultHandler.
SAXParserHandler() - Constructor for class org.apache.xml.resolver.readers.SAXParserHandler
 
setAllowOasisXMLCatalogPI(boolean) - Method in class org.apache.xml.resolver.CatalogManager
Set the XML Catalog PI setting
setBootstrapResolver(BootstrapResolver) - Method in class org.apache.xml.resolver.CatalogManager
Set the bootstrap resolver.
setCaseSensitive(boolean) - Method in class org.apache.xml.resolver.readers.TextCatalogReader
 
setCatalog(Catalog) - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
Set the current catalog.
setCatalog(Catalog) - Method in interface org.apache.xml.resolver.readers.SAXCatalogParser
Set the Catalog for which parsing is being performed.
setCatalog(Catalog) - Method in class org.apache.xml.resolver.readers.XCatalogReader
Set the current catalog.
setCatalogClassName(String) - Method in class org.apache.xml.resolver.CatalogManager
Set the Catalog class name.
setCatalogFiles(String) - Method in class org.apache.xml.resolver.CatalogManager
Set the list of catalog files.
setCatalogManager(CatalogManager) - Method in class org.apache.xml.resolver.Catalog
Establish the CatalogManager used by this catalog.
setCatalogParser(String, String, String) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
Set the SAXCatalogParser class for the given namespace/root element type.
setCatalogParser(String, String, String) - Method in class org.apache.xml.resolver.readers.DOMCatalogReader
Add a new parser to the reader.
setClassLoader(ClassLoader) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
Set the class loader to use when loading class by reflection.
setContentHandler(ContentHandler) - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
setDebug(int) - Method in class org.apache.xml.resolver.helpers.Debug
Set the debug level for future messages.
setDocumentHandler(DocumentHandler) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX Parser API.
setDocumentLocator(Locator) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX setDocumentLocator method.
setDocumentLocator(Locator) - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The SAX setDocumentLocator method does nothing.
setDocumentLocator(Locator) - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
setDocumentLocator(Locator) - Method in class org.apache.xml.resolver.readers.XCatalogReader
The SAX setDocumentLocator method does nothing.
setDocumentLocator(Locator) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX DocumentHandler API.
setDTDHandler(DTDHandler) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX Parser API.
setEntityResolver(EntityResolver) - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
setEntityResolver(EntityResolver) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX Parser API.
setEntryArg(int, String) - Method in class org.apache.xml.resolver.CatalogEntry
Set an entry argument.
setErrorHandler(ErrorHandler) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX Parser API.
setIgnoreMissingProperties(boolean) - Method in class org.apache.xml.resolver.CatalogManager
How should missing properties be handled?
setLocale(Locale) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX Parser API.
setMaxMessages(int) - Method in class org.apache.xml.resolver.apps.XParseError
Set the number of messages to display
setParserClass(String) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
Set the XML SAX Parser Class
setParserFactory(SAXParserFactory) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
Set the XML SAX Parser Factory.
setPreferPublic(boolean) - Method in class org.apache.xml.resolver.CatalogManager
Set the prefer public setting.
setRelativeCatalogs(boolean) - Method in class org.apache.xml.resolver.CatalogManager
Set the relativeCatalogs setting.
setupReaders() - Method in class org.apache.xml.resolver.Catalog
Setup readers.
setupReaders() - Method in class org.apache.xml.resolver.Resolver
Setup readers.
setUseStaticCatalog(boolean) - Method in class org.apache.xml.resolver.CatalogManager
Set the use static catalog setting.
setVerbosity(int) - Method in class org.apache.xml.resolver.CatalogManager
Set the current verbosity.
SGMLDECL - Static variable in class org.apache.xml.resolver.Catalog
The SGMLDECL Catalog Entry type.
skippedEntity(String) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX skippedentity method.
skippedEntity(String) - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The SAX skippedEntity method does nothing.
skippedEntity(String) - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
skippedEntity(String) - Method in class org.apache.xml.resolver.readers.XCatalogReader
The SAX skippedEntity method does nothing.
stack - Variable in class org.apache.xml.resolver.readers.TextCatalogReader
Character lookahead stack.
startDocument() - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX startDocument method.
startDocument() - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The SAX startDocument
startDocument() - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
startDocument() - Method in class org.apache.xml.resolver.readers.XCatalogReader
The SAX startDocument method does nothing.
startDocument() - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX DocumentHandler API.
startElement(String, AttributeList) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX startElement method.
startElement(String, AttributeList) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX DocumentHandler API.
startElement(String, String, String, Attributes) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX2 startElement method.
startElement(String, String, String, Attributes) - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The SAX startElement method recognizes elements from the plain catalog format and instantiates CatalogEntry objects for them.
startElement(String, String, String, Attributes) - Method in class org.apache.xml.resolver.readers.ExtendedXMLCatalogReader
The SAX startElement method recognizes elements from the plain catalog format and instantiates CatalogEntry objects for them.
startElement(String, String, String, Attributes) - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
startElement(String, String, String, Attributes) - Method in class org.apache.xml.resolver.readers.XCatalogReader
The SAX startElement method recognizes elements from the plain catalog format and instantiates CatalogEntry objects for them.
startElement(String, String, String, Attributes) - Method in class org.apache.xml.resolver.tools.ResolvingXMLFilter
SAX ContentHandler API.
startPrefixMapping(String, String) - Method in class org.apache.xml.resolver.readers.SAXCatalogReader
The SAX startPrefixMapping method.
startPrefixMapping(String, String) - Method in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The SAX startPrefixMapping method does nothing.
startPrefixMapping(String, String) - Method in class org.apache.xml.resolver.readers.SAXParserHandler
 
startPrefixMapping(String, String) - Method in class org.apache.xml.resolver.readers.XCatalogReader
The SAX startPrefixMapping method does nothing.
staticCatalog() - Method in class org.apache.xml.resolver.CatalogManager
Deprecated. No longer static; use get/set methods.
suppressExplanation - Static variable in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. Suppress explanatory message?
suppressExplanation - Static variable in class org.apache.xml.resolver.tools.ResolvingXMLFilter
Suppress explanatory message?
SYSTEM - Static variable in class org.apache.xml.resolver.Catalog
The SYSTEM Catalog Entry type.
SYSTEM_SUFFIX - Static variable in class org.apache.xml.resolver.Catalog
The SYSTEM_SUFFIX Catalog Entry type.
SYSTEMREVERSE - Static variable in class org.apache.xml.resolver.Resolver
The SYSTEMREVERSE Catalog Entry type.
SYSTEMSUFFIX - Static variable in class org.apache.xml.resolver.Resolver
The SYSTEMSUFFIX Catalog Entry type.

T

TextCatalogReader - class org.apache.xml.resolver.readers.TextCatalogReader.
Parses plain text Catalog files.
TextCatalogReader() - Constructor for class org.apache.xml.resolver.readers.TextCatalogReader
Construct a CatalogReader object.
tokenStack - Variable in class org.apache.xml.resolver.readers.TextCatalogReader
Token stack.
top - Variable in class org.apache.xml.resolver.readers.TextCatalogReader
The current position on the lookahead stack
toString() - Method in class org.apache.xml.resolver.CatalogException
Override toString to pick up any embedded exception.
TR9401CatalogReader - class org.apache.xml.resolver.readers.TR9401CatalogReader.
Parses OASIS Open Catalog files.
TR9401CatalogReader() - Constructor for class org.apache.xml.resolver.readers.TR9401CatalogReader
 
tr9401NamespaceName - Static variable in class org.apache.xml.resolver.readers.OASISXMLCatalogReader
The namespace name of OASIS ERTC TR9401 catalog extension

U

UNENDED_COMMENT - Static variable in class org.apache.xml.resolver.CatalogException
Text catalog ended in mid-comment
UNKNOWN_FORMAT - Static variable in class org.apache.xml.resolver.CatalogException
Unknown XML format
unknownEntry(Vector) - Method in class org.apache.xml.resolver.Catalog
Handle unknown CatalogEntry types.
UNPARSEABLE - Static variable in class org.apache.xml.resolver.CatalogException
Unparseable XML catalog (not XML)
unparsedEntityDecl(String, String, String, String) - Method in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. SAX DTDHandler API.
unparsedEntityDecl(String, String, String, String) - Method in class org.apache.xml.resolver.tools.ResolvingXMLFilter
SAX DTDHandler API.
URI - Static variable in class org.apache.xml.resolver.Catalog
The URI Catalog Entry type.
URI_SUFFIX - Static variable in class org.apache.xml.resolver.Catalog
The URI_SUFFIX Catalog Entry type.
URISUFFIX - Static variable in class org.apache.xml.resolver.Resolver
The URISUFFIX Catalog Entry type.
usage() - Static method in class org.apache.xml.resolver.apps.resolver
 

V

validating - Static variable in class org.apache.xml.resolver.tools.ResolvingParser
Deprecated. Make the parser validating?
validating - Static variable in class org.apache.xml.resolver.tools.ResolvingXMLReader
Make the parser validating?
validating - Variable in class org.apache.xml.resolver.tools.CatalogResolver
Make the parser validating?
verbosity() - Method in class org.apache.xml.resolver.CatalogManager
Deprecated. No longer static; use get/set methods.
Version - class org.apache.xml.resolver.Version.
Administrative class to keep track of the version number of xml-commons external sources releases.
Version() - Constructor for class org.apache.xml.resolver.Version
 

W

warning(SAXParseException) - Method in class org.apache.xml.resolver.apps.XParseError
SAX2 API
WRAPPER - Static variable in class org.apache.xml.resolver.CatalogException
A wrapper around another exception

X

xCatalogPubId - Static variable in class org.apache.xml.resolver.helpers.BootstrapResolver
Public identifier for legacy Apache XCatalog files.
XCatalogReader - class org.apache.xml.resolver.readers.XCatalogReader.
Parse "XCatalog" XML Catalog files, this is the XML Catalog format developed by John Cowan and supported by Apache.
XCatalogReader() - Constructor for class org.apache.xml.resolver.readers.XCatalogReader
Default constructor
XCatalogReader(SAXParserFactory, Catalog) - Constructor for class org.apache.xml.resolver.readers.XCatalogReader
Constructor allowing for providing custom SAX parser factory
xmlCatalogPubId - Static variable in class org.apache.xml.resolver.helpers.BootstrapResolver
Public identifier for OASIS XML Catalog files.
xmlCatalogRNG - Static variable in class org.apache.xml.resolver.helpers.BootstrapResolver
URI of the RELAX NG Grammar for OASIS XML Catalog files.
xmlCatalogSysId - Static variable in class org.apache.xml.resolver.helpers.BootstrapResolver
System identifier for OASIS XML Catalog files.
xmlCatalogXSD - Static variable in class org.apache.xml.resolver.helpers.BootstrapResolver
URI of the W3C XML Schema for OASIS XML Catalog files.
xparse - class org.apache.xml.resolver.apps.xparse.
Deprecated. This interface has been replaced by the ResolvingXMLReader for SAX2.
xparse() - Constructor for class org.apache.xml.resolver.apps.xparse
Deprecated.  
XParseError - class org.apache.xml.resolver.apps.XParseError.
An ErrorHandler for xparse.
XParseError(boolean, boolean) - Constructor for class org.apache.xml.resolver.apps.XParseError
Constructor
xread - class org.apache.xml.resolver.apps.xread.
A simple command-line XML parsing application.
xread() - Constructor for class org.apache.xml.resolver.apps.xread
 

A B C D E F G I L M N O P Q R S T U V W X

Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/index.html100644 0 0 1622 10530407252 20072 0ustar 0 0 xml-commons-resolver API <H2> Frame Alert</H2> <P> This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. <BR> Link to <A HREF="overview-summary.html">Non-frame version.</A> xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/Catalog.html100644 0 0 232724 10530407252 25057 0ustar 0 0 xml-commons-resolver API: Class Catalog

org.apache.xml.resolver
Class Catalog

java.lang.Object
  |
  +--org.apache.xml.resolver.Catalog
Direct Known Subclasses:
Resolver

public class Catalog
extends java.lang.Object

Represents OASIS Open Catalog files.

This class implements the semantics of OASIS Open Catalog files (defined by OASIS Technical Resolution 9401:1997 (Amendment 2 to TR 9401)).

The primary purpose of the Catalog is to associate resources in the document with local system identifiers. Some entities (document types, XML entities, and notations) have names and all of them can have either public or system identifiers or both. (In XML, only a notation can have a public identifier without a system identifier, but the methods implemented in this class obey the Catalog semantics from the SGML days when system identifiers were optional.)

The system identifiers returned by the resolution methods in this class are valid, i.e. usable by, and in fact constructed by, the java.net.URL class. Unfortunately, this class seems to behave in somewhat non-standard ways and the system identifiers returned may not be directly usable in a browser or filesystem context.

This class recognizes all of the Catalog entries defined in TR9401:1997:

Note that BASE entries are treated as described by RFC2396. In particular, this has the counter-intuitive property that after a BASE entry identifing "http://example.com/a/b/c" as the base URI, the relative URI "foo" is resolved to the absolute URI "http://example.com/a/b/foo". You must provide the trailing slash if you do not want the final component of the path to be discarded as a filename would in a URI for a resource: "http://example.com/a/b/c/".

Note that subordinate catalogs (all catalogs except the first, including CATALOG and DELEGATE* catalogs) are only loaded if and when they are required.

This class relies on classes which implement the CatalogReader interface to actually load catalog files. This allows the catalog semantics to be implemented for TR9401 text-based catalogs, XML catalogs, or any number of other storage formats.

Additional catalogs may also be loaded with the parseCatalog(java.lang.String) method.

Change Log:

2.0

Rewrite to use CatalogReaders.

1.1

Allow quoted components in xml.catalog.files so that URLs containing colons can be used on Unix. The string passed to xml.catalog.files can now have the form:

 unquoted-path-with-no-sep-chars:"double-quoted path with or without sep chars":'single-quoted path with or without sep chars'
 

(Where ":" is the separater character in this example.)

If an unquoted path contains an embedded double or single quote character, no special processig is performed on that character. No path can contain separater characters, double, and single quotes simultaneously.

Fix bug in calculation of BASE entries: if a catalog contains multiple BASE entries, each is relative to the preceding base, not the default base URI of the catalog.

1.0.1

Fixed a bug in the calculation of the list of subordinate catalogs. This bug caused an infinite loop where parsing would alternately process two catalogs indefinitely.

Version:
1.0

Derived from public domain code originally published by Arbortext, Inc.

Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
CatalogReader, CatalogEntry

Field Summary
protected  java.net.URL base
          The base URI for relative system identifiers in the catalog.
static int BASE
          The BASE Catalog Entry type.
static int CATALOG
          The CATALOG Catalog Entry type.
protected  java.net.URL catalogCwd
          The base URI of the Catalog file currently being parsed.
protected  java.util.Vector catalogEntries
          The catalog entries currently known to the system.
protected  java.util.Vector catalogFiles
          A vector of catalog files to be loaded.
protected  CatalogManager catalogManager
          The catalog manager in use for this instance.
protected  java.util.Vector catalogs
          A vector of Catalogs.
protected  boolean default_override
          The default initial override setting.
static int DELEGATE_PUBLIC
          The DELEGATE_PUBLIC Catalog Entry type.
static int DELEGATE_SYSTEM
          The DELEGATE_SYSTEM Catalog Entry type.
static int DELEGATE_URI
          The DELEGATE_URI Catalog Entry type.
static int DOCTYPE
          The DOCTYPE Catalog Entry type.
static int DOCUMENT
          The DOCUMENT Catalog Entry type.
static int DTDDECL
          The DTDDECL Catalog Entry type.
static int ENTITY
          The ENTITY Catalog Entry type.
static int LINKTYPE
          The LINKTYPE Catalog Entry type.
protected  java.util.Vector localCatalogFiles
          A vector of catalog files constructed during processing of CATALOG entries in the current catalog.
protected  java.util.Vector localDelegate
          A vector of DELEGATE* Catalog entries constructed during processing of the Catalog.
static int NOTATION
          The NOTATION Catalog Entry type.
static int OVERRIDE
          The OVERRIDE Catalog Entry type.
static int PUBLIC
          The PUBLIC Catalog Entry type.
protected  java.util.Vector readerArr
          A vector of CatalogReaders.
protected  java.util.Hashtable readerMap
          A hash of CatalogReaders.
static int REWRITE_SYSTEM
          The REWRITE_SYSTEM Catalog Entry type.
static int REWRITE_URI
          The REWRITE_URI Catalog Entry type.
static int SGMLDECL
          The SGMLDECL Catalog Entry type.
static int SYSTEM
          The SYSTEM Catalog Entry type.
static int SYSTEM_SUFFIX
          The SYSTEM_SUFFIX Catalog Entry type.
static int URI
          The URI Catalog Entry type.
static int URI_SUFFIX
          The URI_SUFFIX Catalog Entry type.
 
Constructor Summary
Catalog()
          Constructs an empty Catalog.
Catalog(CatalogManager manager)
          Constructs an empty Catalog with a specific CatalogManager.
 
Method Summary
protected  void addDelegate(CatalogEntry entry)
          Add to the current list of delegated catalogs.
 void addEntry(CatalogEntry entry)
          Cleanup and process a Catalog entry.
 void addReader(java.lang.String mimeType, CatalogReader reader)
          Add a new CatalogReader to the Catalog.
protected  void copyReaders(Catalog newCatalog)
          Copies the reader list from the current Catalog to a new Catalog.
protected  java.lang.String encodedByte(int b)
          Perform %-encoding on a single byte.
protected  java.lang.String fixSlashes(java.lang.String sysid)
          Replace backslashes with forward slashes.
 CatalogManager getCatalogManager()
          Return the CatalogManager used by this catalog.
 java.lang.String getCurrentBase()
          Returns the current base URI.
 java.lang.String getDefaultOverride()
          Returns the default override setting associated with this catalog.
 void loadSystemCatalogs()
          Load the system catalog files.
protected  java.lang.String makeAbsolute(java.lang.String sysid)
          Construct an absolute URI from a relative one, using the current base URI.
protected  Catalog newCatalog()
          Create a new Catalog object.
protected  java.lang.String normalizeURI(java.lang.String uriref)
          Perform character normalization on a URI reference.
 void parseAllCatalogs()
          Parse all subordinate catalogs.
 void parseCatalog(java.lang.String fileName)
          Parse a catalog file, augmenting internal data structures.
 void parseCatalog(java.lang.String mimeType, java.io.InputStream is)
          Parse a catalog file, augmenting internal data structures.
 void parseCatalog(java.net.URL aUrl)
          Parse a catalog document, augmenting internal data structures.
protected  void parseCatalogFile(java.lang.String fileName)
          Parse a single catalog file, augmenting internal data structures.
protected  void parsePendingCatalogs()
          Parse all of the pending catalogs.
 java.lang.String resolveDoctype(java.lang.String entityName, java.lang.String publicId, java.lang.String systemId)
          Return the applicable DOCTYPE system identifier.
 java.lang.String resolveDocument()
          Return the applicable DOCUMENT entry.
 java.lang.String resolveEntity(java.lang.String entityName, java.lang.String publicId, java.lang.String systemId)
          Return the applicable ENTITY system identifier.
protected  java.lang.String resolveLocalPublic(int entityType, java.lang.String entityName, java.lang.String publicId, java.lang.String systemId)
          Return the applicable PUBLIC or SYSTEM identifier.
protected  java.lang.String resolveLocalSystem(java.lang.String systemId)
          Return the applicable SYSTEM system identifier in this catalog.
protected  java.lang.String resolveLocalURI(java.lang.String uri)
          Return the applicable URI in this catalog.
 java.lang.String resolveNotation(java.lang.String notationName, java.lang.String publicId, java.lang.String systemId)
          Return the applicable NOTATION system identifier.
 java.lang.String resolvePublic(java.lang.String publicId, java.lang.String systemId)
          Return the applicable PUBLIC or SYSTEM identifier.
protected  java.lang.String resolveSubordinateCatalogs(int entityType, java.lang.String entityName, java.lang.String publicId, java.lang.String systemId)
          Search the subordinate catalogs, in order, looking for a match.
 java.lang.String resolveSystem(java.lang.String systemId)
          Return the applicable SYSTEM system identifier.
 java.lang.String resolveURI(java.lang.String uri)
          Return the applicable URI.
 void setCatalogManager(CatalogManager manager)
          Establish the CatalogManager used by this catalog.
 void setupReaders()
          Setup readers.
 void unknownEntry(java.util.Vector strings)
          Handle unknown CatalogEntry types.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

BASE

public static final int BASE
The BASE Catalog Entry type.

CATALOG

public static final int CATALOG
The CATALOG Catalog Entry type.

DOCUMENT

public static final int DOCUMENT
The DOCUMENT Catalog Entry type.

OVERRIDE

public static final int OVERRIDE
The OVERRIDE Catalog Entry type.

SGMLDECL

public static final int SGMLDECL
The SGMLDECL Catalog Entry type.

DELEGATE_PUBLIC

public static final int DELEGATE_PUBLIC
The DELEGATE_PUBLIC Catalog Entry type.

DELEGATE_SYSTEM

public static final int DELEGATE_SYSTEM
The DELEGATE_SYSTEM Catalog Entry type.

DELEGATE_URI

public static final int DELEGATE_URI
The DELEGATE_URI Catalog Entry type.

DOCTYPE

public static final int DOCTYPE
The DOCTYPE Catalog Entry type.

DTDDECL

public static final int DTDDECL
The DTDDECL Catalog Entry type.

ENTITY

public static final int ENTITY
The ENTITY Catalog Entry type.

LINKTYPE

public static final int LINKTYPE
The LINKTYPE Catalog Entry type.

NOTATION

public static final int NOTATION
The NOTATION Catalog Entry type.

PUBLIC

public static final int PUBLIC
The PUBLIC Catalog Entry type.

SYSTEM

public static final int SYSTEM
The SYSTEM Catalog Entry type.

URI

public static final int URI
The URI Catalog Entry type.

REWRITE_SYSTEM

public static final int REWRITE_SYSTEM
The REWRITE_SYSTEM Catalog Entry type.

REWRITE_URI

public static final int REWRITE_URI
The REWRITE_URI Catalog Entry type.

SYSTEM_SUFFIX

public static final int SYSTEM_SUFFIX
The SYSTEM_SUFFIX Catalog Entry type.

URI_SUFFIX

public static final int URI_SUFFIX
The URI_SUFFIX Catalog Entry type.

base

protected java.net.URL base
The base URI for relative system identifiers in the catalog. This may be changed by BASE entries in the catalog.

catalogCwd

protected java.net.URL catalogCwd
The base URI of the Catalog file currently being parsed.

catalogEntries

protected java.util.Vector catalogEntries
The catalog entries currently known to the system.

default_override

protected boolean default_override
The default initial override setting.

catalogManager

protected CatalogManager catalogManager
The catalog manager in use for this instance.

catalogFiles

protected java.util.Vector catalogFiles
A vector of catalog files to be loaded.

This list is initially established by loadSystemCatalogs when it parses the system catalog list, but CATALOG entries may contribute to it during the course of parsing.

See Also:
loadSystemCatalogs(), localCatalogFiles

localCatalogFiles

protected java.util.Vector localCatalogFiles
A vector of catalog files constructed during processing of CATALOG entries in the current catalog.

This two-level system is actually necessary to correctly implement the semantics of the CATALOG entry. If one catalog file includes another with a CATALOG entry, the included catalog logically occurs at the end of the including catalog, and after any preceding CATALOG entries. In other words, the CATALOG entry cannot insert anything into the middle of a catalog file.

When processing reaches the end of each catalog files, any elements on this vector are added to the front of the catalogFiles vector.

See Also:
catalogFiles

catalogs

protected java.util.Vector catalogs
A vector of Catalogs.

The semantics of Catalog resolution are such that each catalog is effectively a list of Catalogs (in other words, a recursive list of Catalog instances).

Catalogs that are processed as the result of CATALOG or DELEGATE* entries are subordinate to the catalog that contained them, but they may in turn have subordinate catalogs.

Catalogs are only loaded when they are needed, so this vector initially contains a list of Catalog filenames (URLs). If, during processing, one of these catalogs has to be loaded, the resulting Catalog object is placed in the vector, effectively caching it for the next query.


localDelegate

protected java.util.Vector localDelegate
A vector of DELEGATE* Catalog entries constructed during processing of the Catalog.

This two-level system has two purposes; first, it allows us to sort the DELEGATE* entries by the length of the partial public identifier so that a linear search encounters them in the correct order and second, it puts them all at the end of the Catalog.

When processing reaches the end of each catalog file, any elements on this vector are added to the end of the catalogEntries vector. This assures that matching PUBLIC keywords are encountered before DELEGATE* entries.


readerMap

protected java.util.Hashtable readerMap
A hash of CatalogReaders.

This hash maps MIME types to elements in the readerArr vector. This allows the Catalog to quickly locate the reader for a particular MIME type.


readerArr

protected java.util.Vector readerArr
A vector of CatalogReaders.

This vector contains all of the readers in the order that they were added. In the event that a catalog is read from a file, where the MIME type is unknown, each reader is attempted in turn until one succeeds.

Constructor Detail

Catalog

public Catalog()
Constructs an empty Catalog.

The constructor interrogates the relevant system properties using the default (static) CatalogManager and initializes the catalog data structures.


Catalog

public Catalog(CatalogManager manager)
Constructs an empty Catalog with a specific CatalogManager.

The constructor interrogates the relevant system properties using the specified Catalog Manager and initializes the catalog data structures.

Method Detail

getCatalogManager

public CatalogManager getCatalogManager()
Return the CatalogManager used by this catalog.

setCatalogManager

public void setCatalogManager(CatalogManager manager)
Establish the CatalogManager used by this catalog.

setupReaders

public void setupReaders()
Setup readers.

addReader

public void addReader(java.lang.String mimeType,
                      CatalogReader reader)
Add a new CatalogReader to the Catalog.

This method allows you to add a new CatalogReader to the catalog. The reader will be associated with the specified mimeType. You can only have one reader per mimeType.

In the absence of a mimeType (e.g., when reading a catalog directly from a file on the local system), the readers are attempted in the order that you add them to the Catalog.

Note that subordinate catalogs (created by CATALOG or DELEGATE* entries) get a copy of the set of readers present in the primary catalog when they are created. Readers added subsequently will not be available. For this reason, it is best to add all of the readers before the first call to parse a catalog.

Parameters:
mimeType - The MIME type associated with this reader.
reader - The CatalogReader to use.

copyReaders

protected void copyReaders(Catalog newCatalog)
Copies the reader list from the current Catalog to a new Catalog.

This method is used internally when constructing a new catalog. It copies the current reader associations over to the new catalog.

Parameters:
newCatalog - The new Catalog.

newCatalog

protected Catalog newCatalog()
Create a new Catalog object.

This method constructs a new instance of the running Catalog class (which might be a subtype of org.apache.xml.resolver.Catalog). All new catalogs are managed by the same CatalogManager.

N.B. All Catalog subtypes should call newCatalog() to construct a new Catalog. Do not simply use "new Subclass()" since that will confuse future subclasses.


getCurrentBase

public java.lang.String getCurrentBase()
Returns the current base URI.

getDefaultOverride

public java.lang.String getDefaultOverride()
Returns the default override setting associated with this catalog.

All catalog files loaded by this catalog will have the initial override setting specified by this default.


loadSystemCatalogs

public void loadSystemCatalogs()
                        throws java.net.MalformedURLException,
                               java.io.IOException
Load the system catalog files.

The method adds all of the catalogs specified in the xml.catalog.files property to the Catalog list.

Throws:
java.net.MalformedURLException - One of the system catalogs is identified with a filename that is not a valid URL.
java.io.IOException - One of the system catalogs cannot be read.

parseCatalog

public void parseCatalog(java.lang.String fileName)
                  throws java.net.MalformedURLException,
                         java.io.IOException
Parse a catalog file, augmenting internal data structures.
Parameters:
fileName - The filename of the catalog file to process
Throws:
java.net.MalformedURLException - The fileName cannot be turned into a valid URL.
java.io.IOException - Error reading catalog file.

parseCatalog

public void parseCatalog(java.lang.String mimeType,
                         java.io.InputStream is)
                  throws java.io.IOException,
                         CatalogException
Parse a catalog file, augmenting internal data structures.

Catalogs retrieved over the net may have an associated MIME type. The MIME type can be used to select an appropriate reader.

Parameters:
mimeType - The MIME type of the catalog file.
is - The InputStream from which the catalog should be read
Throws:
CatalogException - Failed to load catalog mimeType.
java.io.IOException - Error reading catalog file.

parseCatalog

public void parseCatalog(java.net.URL aUrl)
                  throws java.io.IOException
Parse a catalog document, augmenting internal data structures.

This method supports catalog files stored in jar files: e.g., jar:file:///path/to/filename.jar!/path/to/catalog.xml". That URI doesn't survive transmogrification through the URI processing that the parseCatalog(String) performs and passing it as an input stream doesn't set the base URI appropriately.

Written by Stefan Wachter (2002-09-26)

Parameters:
aUrl - The URL of the catalog document to process
Throws:
java.io.IOException - Error reading catalog file.

parsePendingCatalogs

protected void parsePendingCatalogs()
                             throws java.net.MalformedURLException,
                                    java.io.IOException
Parse all of the pending catalogs.

Catalogs may refer to other catalogs, this method parses all of the currently pending catalog files.


parseCatalogFile

protected void parseCatalogFile(java.lang.String fileName)
                         throws java.net.MalformedURLException,
                                java.io.IOException,
                                CatalogException
Parse a single catalog file, augmenting internal data structures.
Parameters:
fileName - The filename of the catalog file to process
Throws:
java.net.MalformedURLException - The fileName cannot be turned into a valid URL.
java.io.IOException - Error reading catalog file.

addEntry

public void addEntry(CatalogEntry entry)
Cleanup and process a Catalog entry.

This method processes each Catalog entry, changing mapped relative system identifiers into absolute ones (based on the current base URI), and maintaining other information about the current catalog.

Parameters:
entry - The CatalogEntry to process.

unknownEntry

public void unknownEntry(java.util.Vector strings)
Handle unknown CatalogEntry types.

This method exists to allow subclasses to deal with unknown entry types.


parseAllCatalogs

public void parseAllCatalogs()
                      throws java.net.MalformedURLException,
                             java.io.IOException
Parse all subordinate catalogs.

This method recursively parses all of the subordinate catalogs. If this method does not throw an exception, you can be confident that no subsequent call to any resolve*() method will either, with two possible exceptions:

  1. Delegated catalogs are re-parsed each time they are needed (because a variable list of them may be needed in each case, depending on the length of the matching partial public identifier).

    But they are parsed by this method, so as long as they don't change or disappear while the program is running, they shouldn't generate errors later if they don't generate errors now.

  2. If you add new catalogs with parseCatalog, they won't be loaded until they are needed or until you call parseAllCatalogs again.

On the other hand, if you don't call this method, you may successfully parse documents without having to load all possible catalogs.

Throws:
java.net.MalformedURLException - The filename (URL) for a subordinate or delegated catalog is not a valid URL.
java.io.IOException - Error reading some subordinate or delegated catalog file.

resolveDoctype

public java.lang.String resolveDoctype(java.lang.String entityName,
                                       java.lang.String publicId,
                                       java.lang.String systemId)
                                throws java.net.MalformedURLException,
                                       java.io.IOException
Return the applicable DOCTYPE system identifier.
Parameters:
entityName - The name of the entity (element) for which a doctype is required.
publicId - The nominal public identifier for the doctype (as provided in the source document).
systemId - The nominal system identifier for the doctype (as provided in the source document).
Returns:
The system identifier to use for the doctype.
Throws:
java.net.MalformedURLException - The formal system identifier of a subordinate catalog cannot be turned into a valid URL.
java.io.IOException - Error reading subordinate catalog file.

resolveDocument

public java.lang.String resolveDocument()
                                 throws java.net.MalformedURLException,
                                        java.io.IOException
Return the applicable DOCUMENT entry.
Returns:
The system identifier to use for the doctype.
Throws:
java.net.MalformedURLException - The formal system identifier of a subordinate catalog cannot be turned into a valid URL.
java.io.IOException - Error reading subordinate catalog file.

resolveEntity

public java.lang.String resolveEntity(java.lang.String entityName,
                                      java.lang.String publicId,
                                      java.lang.String systemId)
                               throws java.net.MalformedURLException,
                                      java.io.IOException
Return the applicable ENTITY system identifier.
Parameters:
entityName - The name of the entity for which a system identifier is required.
publicId - The nominal public identifier for the entity (as provided in the source document).
systemId - The nominal system identifier for the entity (as provided in the source document).
Returns:
The system identifier to use for the entity.
Throws:
java.net.MalformedURLException - The formal system identifier of a subordinate catalog cannot be turned into a valid URL.
java.io.IOException - Error reading subordinate catalog file.

resolveNotation

public java.lang.String resolveNotation(java.lang.String notationName,
                                        java.lang.String publicId,
                                        java.lang.String systemId)
                                 throws java.net.MalformedURLException,
                                        java.io.IOException
Return the applicable NOTATION system identifier.
Parameters:
notationName - The name of the notation for which a doctype is required.
publicId - The nominal public identifier for the notation (as provided in the source document).
systemId - The nominal system identifier for the notation (as provided in the source document).
Returns:
The system identifier to use for the notation.
Throws:
java.net.MalformedURLException - The formal system identifier of a subordinate catalog cannot be turned into a valid URL.
java.io.IOException - Error reading subordinate catalog file.

resolvePublic

public java.lang.String resolvePublic(java.lang.String publicId,
                                      java.lang.String systemId)
                               throws java.net.MalformedURLException,
                                      java.io.IOException
Return the applicable PUBLIC or SYSTEM identifier.

This method searches the Catalog and returns the system identifier specified for the given system or public identifiers. If no appropriate PUBLIC or SYSTEM entry is found in the Catalog, null is returned.

Parameters:
publicId - The public identifier to locate in the catalog. Public identifiers are normalized before comparison.
systemId - The nominal system identifier for the entity in question (as provided in the source document).
Returns:
The system identifier to use. Note that the nominal system identifier is not returned if a match is not found in the catalog, instead null is returned to indicate that no match was found.
Throws:
java.net.MalformedURLException - The formal system identifier of a subordinate catalog cannot be turned into a valid URL.
java.io.IOException - Error reading subordinate catalog file.

resolveLocalPublic

protected java.lang.String resolveLocalPublic(int entityType,
                                              java.lang.String entityName,
                                              java.lang.String publicId,
                                              java.lang.String systemId)
                                       throws java.net.MalformedURLException,
                                              java.io.IOException
Return the applicable PUBLIC or SYSTEM identifier.

This method searches the Catalog and returns the system identifier specified for the given system or public identifiers. If no appropriate PUBLIC or SYSTEM entry is found in the Catalog, delegated Catalogs are interrogated.

There are four possible cases:

  • If the system identifier provided matches a SYSTEM entry in the current catalog, the SYSTEM entry is returned.
  • If the system identifier is not null, the PUBLIC entries that were encountered when OVERRIDE YES was in effect are interrogated and the first matching entry is returned.
  • If the system identifier is null, then all of the PUBLIC entries are interrogated and the first matching entry is returned. This may not be the same as the preceding case, if some PUBLIC entries are encountered when OVERRIDE NO is in effect. In XML, the only place where a public identifier may occur without a system identifier is in a notation declaration.
  • Finally, if the public identifier matches one of the partial public identifiers specified in a DELEGATE* entry in the Catalog, the delegated catalog is interrogated. The first time that the delegated catalog is required, it will be retrieved and parsed. It is subsequently cached.
Parameters:
entityType - The CatalogEntry type for which this query is being conducted. This is necessary in order to do the approprate query on a delegated catalog.
entityName - The name of the entity being searched for, if appropriate.
publicId - The public identifier of the entity in question.
systemId - The nominal system identifier for the entity in question (as provided in the source document).
Returns:
The system identifier to use. Note that the nominal system identifier is not returned if a match is not found in the catalog, instead null is returned to indicate that no match was found.
Throws:
java.net.MalformedURLException - The formal system identifier of a delegated catalog cannot be turned into a valid URL.
java.io.IOException - Error reading delegated catalog file.

resolveSystem

public java.lang.String resolveSystem(java.lang.String systemId)
                               throws java.net.MalformedURLException,
                                      java.io.IOException
Return the applicable SYSTEM system identifier.

If a SYSTEM entry exists in the Catalog for the system ID specified, return the mapped value.

On Windows-based operating systems, the comparison between the system identifier provided and the SYSTEM entries in the Catalog is case-insensitive.

Parameters:
systemId - The system ID to locate in the catalog.
Returns:
The resolved system identifier.
Throws:
java.net.MalformedURLException - The formal system identifier of a subordinate catalog cannot be turned into a valid URL.
java.io.IOException - Error reading subordinate catalog file.

resolveLocalSystem

protected java.lang.String resolveLocalSystem(java.lang.String systemId)
                                       throws java.net.MalformedURLException,
                                              java.io.IOException
Return the applicable SYSTEM system identifier in this catalog.

If a SYSTEM entry exists in the catalog file for the system ID specified, return the mapped value.

Parameters:
systemId - The system ID to locate in the catalog
Returns:
The mapped system identifier or null

resolveURI

public java.lang.String resolveURI(java.lang.String uri)
                            throws java.net.MalformedURLException,
                                   java.io.IOException
Return the applicable URI.

If a URI entry exists in the Catalog for the URI specified, return the mapped value.

URI comparison is case sensitive.

Parameters:
uri - The URI to locate in the catalog.
Returns:
The resolved URI.
Throws:
java.net.MalformedURLException - The system identifier of a subordinate catalog cannot be turned into a valid URL.
java.io.IOException - Error reading subordinate catalog file.

resolveLocalURI

protected java.lang.String resolveLocalURI(java.lang.String uri)
                                    throws java.net.MalformedURLException,
                                           java.io.IOException
Return the applicable URI in this catalog.

If a URI entry exists in the catalog file for the URI specified, return the mapped value.

Parameters:
uri - The URI to locate in the catalog
Returns:
The mapped URI or null

resolveSubordinateCatalogs

protected java.lang.String resolveSubordinateCatalogs(int entityType,
                                                      java.lang.String entityName,
                                                      java.lang.String publicId,
                                                      java.lang.String systemId)
                                               throws java.net.MalformedURLException,
                                                      java.io.IOException
Search the subordinate catalogs, in order, looking for a match.

This method searches the Catalog and returns the system identifier specified for the given entity type with the given name, public, and system identifiers. In some contexts, these may be null.

Parameters:
entityType - The CatalogEntry type for which this query is being conducted. This is necessary in order to do the approprate query on a subordinate catalog.
entityName - The name of the entity being searched for, if appropriate.
publicId - The public identifier of the entity in question (as provided in the source document).
systemId - The nominal system identifier for the entity in question (as provided in the source document). This parameter is overloaded for the URI entry type.
Returns:
The system identifier to use. Note that the nominal system identifier is not returned if a match is not found in the catalog, instead null is returned to indicate that no match was found.
Throws:
java.net.MalformedURLException - The formal system identifier of a delegated catalog cannot be turned into a valid URL.
java.io.IOException - Error reading delegated catalog file.

fixSlashes

protected java.lang.String fixSlashes(java.lang.String sysid)
Replace backslashes with forward slashes. (URLs always use forward slashes.)
Parameters:
sysid - The input system identifier.
Returns:
The same system identifier with backslashes turned into forward slashes.

makeAbsolute

protected java.lang.String makeAbsolute(java.lang.String sysid)
Construct an absolute URI from a relative one, using the current base URI.
Parameters:
sysid - The (possibly relative) system identifier
Returns:
The system identifier made absolute with respect to the current base.

normalizeURI

protected java.lang.String normalizeURI(java.lang.String uriref)
Perform character normalization on a URI reference.
Parameters:
uriref - The URI reference
Returns:
The normalized URI reference.

encodedByte

protected java.lang.String encodedByte(int b)
Perform %-encoding on a single byte.
Parameters:
b - The 8-bit integer that represents th byte. (Bytes are signed but encoding needs to look at the bytes unsigned.)
Returns:
The %-encoded string for the byte in question.

addDelegate

protected void addDelegate(CatalogEntry entry)
Add to the current list of delegated catalogs.

This method always constructs the localDelegate vector so that it is ordered by length of partial public identifier.

Parameters:
entry - The DELEGATE catalog entry


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/CatalogEntry.html100644 0 0 54113 10530407252 26053 0ustar 0 0 xml-commons-resolver API: Class CatalogEntry

org.apache.xml.resolver
Class CatalogEntry

java.lang.Object
  |
  +--org.apache.xml.resolver.CatalogEntry

public class CatalogEntry
extends java.lang.Object

Represents a Catalog entry.

Instances of this class represent individual entries in a Catalog.

Each catalog entry has a unique name and is associated with an arbitrary number of arguments (all strings). For example, the TR9401 catalog entry "PUBLIC" has two arguments, a public identifier and a system identifier. Each entry has a unique numeric type, assigned automatically when the entry type is created.

The number and type of catalog entries is maintained statically. Catalog classes, or their subclasses, can add new entry types, but all Catalog objects share the same global pool of types.

Initially there are no valid entries.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog

Field Summary
protected  java.util.Vector args
          The arguments associated with this entry
protected static java.util.Vector entryArgs
          The entryTypes vector maps catalog entry types to the number of arguments they're required to have.
protected  int entryType
          The entry type of this entry
protected static java.util.Hashtable entryTypes
          The entryTypes vector maps catalog entry names (e.g., 'BASE' or 'SYSTEM') to their type (1, 2, etc.).
protected static int nextEntry
          The nextEntry is the ordinal number of the next entry type.
 
Constructor Summary
CatalogEntry()
          Null constructor; something for subclasses to call.
CatalogEntry(int type, java.util.Vector args)
          Construct a catalog entry of the specified type.
CatalogEntry(java.lang.String name, java.util.Vector args)
          Construct a catalog entry of the specified type.
 
Method Summary
static int addEntryType(java.lang.String name, int numArgs)
          Adds a new catalog entry type.
 java.lang.String getEntryArg(int argNum)
          Get an entry argument.
static int getEntryArgCount(int type)
          Find out how many arguments an entry is required to have.
static int getEntryArgCount(java.lang.String name)
          Find out how many arguments an entry is required to have.
 int getEntryType()
          Get the entry type.
static int getEntryType(java.lang.String name)
          Lookup an entry type
 void setEntryArg(int argNum, java.lang.String newspec)
          Set an entry argument.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

nextEntry

protected static int nextEntry
The nextEntry is the ordinal number of the next entry type.

entryTypes

protected static java.util.Hashtable entryTypes
The entryTypes vector maps catalog entry names (e.g., 'BASE' or 'SYSTEM') to their type (1, 2, etc.). Names are case sensitive.

entryArgs

protected static java.util.Vector entryArgs
The entryTypes vector maps catalog entry types to the number of arguments they're required to have.

entryType

protected int entryType
The entry type of this entry

args

protected java.util.Vector args
The arguments associated with this entry
Constructor Detail

CatalogEntry

public CatalogEntry()
Null constructor; something for subclasses to call.

CatalogEntry

public CatalogEntry(java.lang.String name,
                    java.util.Vector args)
             throws CatalogException
Construct a catalog entry of the specified type.
Parameters:
name - The name of the entry type
args - A String Vector of arguments
Throws:
InvalidCatalogEntryTypeException - if no such entry type exists.
InvalidCatalogEntryException - if the wrong number of arguments is passed.

CatalogEntry

public CatalogEntry(int type,
                    java.util.Vector args)
             throws CatalogException
Construct a catalog entry of the specified type.
Parameters:
type - The entry type
args - A String Vector of arguments
Throws:
InvalidCatalogEntryTypeException - if no such entry type exists.
InvalidCatalogEntryException - if the wrong number of arguments is passed.
Method Detail

addEntryType

public static int addEntryType(java.lang.String name,
                               int numArgs)
Adds a new catalog entry type.
Parameters:
name - The name of the catalog entry type. This must be unique among all types and is case-sensitive. (Adding a duplicate name effectively replaces the old type with the new type.)
numArgs - The number of arguments that this entry type is required to have. There is no provision for variable numbers of arguments.
Returns:
The type for the new entry.

getEntryType

public static int getEntryType(java.lang.String name)
                        throws CatalogException
Lookup an entry type
Parameters:
name - The name of the catalog entry type.
Returns:
The type of the catalog entry with the specified name.
Throws:
InvalidCatalogEntryTypeException - if no entry has the specified name.

getEntryArgCount

public static int getEntryArgCount(java.lang.String name)
                            throws CatalogException
Find out how many arguments an entry is required to have.
Parameters:
name - The name of the catalog entry type.
Returns:
The number of arguments that entry type is required to have.
Throws:
InvalidCatalogEntryTypeException - if no entry has the specified name.

getEntryArgCount

public static int getEntryArgCount(int type)
                            throws CatalogException
Find out how many arguments an entry is required to have.
Parameters:
type - A valid catalog entry type.
Returns:
The number of arguments that entry type is required to have.
Throws:
InvalidCatalogEntryTypeException - if the type is invalid.

getEntryType

public int getEntryType()
Get the entry type.
Returns:
The entry type of the CatalogEntry

getEntryArg

public java.lang.String getEntryArg(int argNum)
Get an entry argument.
Parameters:
argNum - The argument number (arguments are numbered from 0).
Returns:
The specified argument or null if an invalid argNum is provided.

setEntryArg

public void setEntryArg(int argNum,
                        java.lang.String newspec)
                 throws java.lang.ArrayIndexOutOfBoundsException
Set an entry argument.

Catalogs sometimes need to adjust the catlog entry parameters, for example to make a relative URI absolute with respect to the current base URI. But in general, this function should only be called shortly after object creation to do some sort of cleanup. Catalog entries should not mutate over time.

Parameters:
argNum - The argument number (arguments are numbered from 0).
Throws:
java.lang.ArrayIndexOutOfBoundsException - if an invalid argument number is provided.


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/CatalogException.html100644 0 0 47533 10530407252 26720 0ustar 0 0 xml-commons-resolver API: Class CatalogException

org.apache.xml.resolver
Class CatalogException

java.lang.Object
  |
  +--java.lang.Throwable
        |
        +--java.lang.Exception
              |
              +--org.apache.xml.resolver.CatalogException
All Implemented Interfaces:
java.io.Serializable

public class CatalogException
extends java.lang.Exception

Signal Catalog exception.

This exception is thrown if an error occurs loading a catalog file.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog, Serialized Form

Field Summary
static int INVALID_ENTRY
          An invalid entry
static int INVALID_ENTRY_TYPE
          An invalid entry type
static int NO_XML_PARSER
          Could not instantiate an XML parser
static int PARSE_FAILED
          XML but parse failed
static int UNENDED_COMMENT
          Text catalog ended in mid-comment
static int UNKNOWN_FORMAT
          Unknown XML format
static int UNPARSEABLE
          Unparseable XML catalog (not XML)
static int WRAPPER
          A wrapper around another exception
 
Constructor Summary
CatalogException(java.lang.Exception e)
          Create a new CatalogException wrapping an existing exception.
CatalogException(int type)
          Create a new CatalogException.
CatalogException(int type, java.lang.String message)
          Create a new CatalogException.
CatalogException(java.lang.String message, java.lang.Exception e)
          Create a new CatalogException from an existing exception.
 
Method Summary
 java.lang.Exception getException()
          Return the embedded exception, if any.
 int getExceptionType()
          Return the exception type
 java.lang.String getMessage()
          Return a detail message for this exception.
 java.lang.String toString()
          Override toString to pick up any embedded exception.
 
Methods inherited from class java.lang.Throwable
fillInStackTrace, getLocalizedMessage, printStackTrace, printStackTrace, printStackTrace
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

WRAPPER

public static final int WRAPPER
A wrapper around another exception

INVALID_ENTRY

public static final int INVALID_ENTRY
An invalid entry

INVALID_ENTRY_TYPE

public static final int INVALID_ENTRY_TYPE
An invalid entry type

NO_XML_PARSER

public static final int NO_XML_PARSER
Could not instantiate an XML parser

UNKNOWN_FORMAT

public static final int UNKNOWN_FORMAT
Unknown XML format

UNPARSEABLE

public static final int UNPARSEABLE
Unparseable XML catalog (not XML)

PARSE_FAILED

public static final int PARSE_FAILED
XML but parse failed

UNENDED_COMMENT

public static final int UNENDED_COMMENT
Text catalog ended in mid-comment
Constructor Detail

CatalogException

public CatalogException(int type,
                        java.lang.String message)
Create a new CatalogException.
Parameters:
type - The exception type
message - The error or warning message.

CatalogException

public CatalogException(int type)
Create a new CatalogException.
Parameters:
type - The exception type

CatalogException

public CatalogException(java.lang.Exception e)
Create a new CatalogException wrapping an existing exception.

The existing exception will be embedded in the new one, and its message will become the default message for the CatalogException.

Parameters:
e - The exception to be wrapped in a CatalogException.

CatalogException

public CatalogException(java.lang.String message,
                        java.lang.Exception e)
Create a new CatalogException from an existing exception.

The existing exception will be embedded in the new one, but the new exception will have its own message.

Parameters:
message - The detail message.
e - The exception to be wrapped in a CatalogException.
Method Detail

getMessage

public java.lang.String getMessage()
Return a detail message for this exception.

If there is an embedded exception, and if the CatalogException has no detail message of its own, this method will return the detail message from the embedded exception.

Overrides:
getMessage in class java.lang.Throwable
Returns:
The error or warning message.

getException

public java.lang.Exception getException()
Return the embedded exception, if any.
Returns:
The embedded exception, or null if there is none.

getExceptionType

public int getExceptionType()
Return the exception type
Returns:
The exception type

toString

public java.lang.String toString()
Override toString to pick up any embedded exception.
Overrides:
toString in class java.lang.Throwable
Returns:
A string representation of this exception.


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/CatalogManager.html100644 0 0 106212 10530407252 26342 0ustar 0 0 xml-commons-resolver API: Class CatalogManager

org.apache.xml.resolver
Class CatalogManager

java.lang.Object
  |
  +--org.apache.xml.resolver.CatalogManager

public class CatalogManager
extends java.lang.Object

CatalogManager provides an interface to the catalog properties.

Properties can come from two places: from system properties or from a CatalogManager.properties file. This class provides a transparent interface to both, with system properties preferred over property file values.

The following table summarizes the properties:

System Property CatalogManager.properties
Property
Description
xml.catalog.ignoreMissing   If true, a missing CatalogManager.properties file or missing properties within that file will not generate warning messages. See also the ignoreMissingProperties method.
xml.catalog.files catalogs The semicolon-delimited list of catalog files.
  relative-catalogs If false, relative catalog URIs are made absolute with respect to the base URI of the CatalogManager.properties file. This setting only applies to catalog URIs obtained from the catalogs property in the CatalogManager.properties file
xml.catalog.verbosity verbosity If non-zero, the Catalog classes will print informative and debugging messages. The higher the number, the more messages.
xml.catalog.prefer prefer Which identifier is preferred, "public" or "system"?
xml.catalog.staticCatalog static-catalog Should a single catalog be constructed for all parsing, or should a different catalog be created for each parser?
xml.catalog.allowPI allow-oasis-xml-catalog-pi If the source document contains "oasis-xml-catalog" processing instructions, should they be used?
xml.catalog.className catalog-class-name If you're using the convenience classes org.apache.xml.resolver.tools.*), this setting allows you to specify an alternate class name to use for the underlying catalog.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog

Field Summary
 Debug debug
          The manager's debug object.
 
Constructor Summary
CatalogManager()
          Constructor.
CatalogManager(java.lang.String propertyFile)
          Constructor that specifies an explicit property file.
 
Method Summary
 boolean allowOasisXMLCatalogPI()
          Deprecated. No longer static; use get/set methods.
 java.lang.String catalogClassName()
          Deprecated. No longer static; use get/set methods.
 java.util.Vector catalogFiles()
          Deprecated. No longer static; use get/set methods.
 boolean getAllowOasisXMLCatalogPI()
          Get the current XML Catalog PI setting.
 BootstrapResolver getBootstrapResolver()
          Get the bootstrap resolver.
 Catalog getCatalog()
          Get a catalog instance.
 java.lang.String getCatalogClassName()
          Get the current Catalog class name.
 java.util.Vector getCatalogFiles()
          Return the current list of catalog files.
 boolean getIgnoreMissingProperties()
          How are missing properties handled?
 boolean getPreferPublic()
          Return the current prefer public setting.
 Catalog getPrivateCatalog()
          Get a new catalog instance.
 boolean getRelativeCatalogs()
          Get the relativeCatalogs setting.
static CatalogManager getStaticManager()
          Allow access to the static CatalogManager
 boolean getUseStaticCatalog()
          Get the current use static catalog setting.
 int getVerbosity()
          What is the current verbosity?
 void ignoreMissingProperties(boolean ignore)
          Deprecated. No longer static; use get/set methods.
 boolean preferPublic()
          Deprecated. No longer static; use get/set methods.
 boolean queryAllowOasisXMLCatalogPI()
          Obtain the oasisXMLCatalogPI setting from the properties.
 java.lang.String queryCatalogClassName()
          Obtain the Catalog class name setting from the properties.
 boolean relativeCatalogs()
          Deprecated. No longer static; use get/set methods.
 void setAllowOasisXMLCatalogPI(boolean allowPI)
          Set the XML Catalog PI setting
 void setBootstrapResolver(BootstrapResolver resolver)
          Set the bootstrap resolver.
 void setCatalogClassName(java.lang.String className)
          Set the Catalog class name.
 void setCatalogFiles(java.lang.String fileList)
          Set the list of catalog files.
 void setIgnoreMissingProperties(boolean ignore)
          How should missing properties be handled?
 void setPreferPublic(boolean preferPublic)
          Set the prefer public setting.
 void setRelativeCatalogs(boolean relative)
          Set the relativeCatalogs setting.
 void setUseStaticCatalog(boolean useStatic)
          Set the use static catalog setting.
 void setVerbosity(int verbosity)
          Set the current verbosity.
 boolean staticCatalog()
          Deprecated. No longer static; use get/set methods.
 int verbosity()
          Deprecated. No longer static; use get/set methods.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

debug

public Debug debug
The manager's debug object. Used for printing debugging messages.

This field is public so that objects that have access to this CatalogManager can use this debug object.

Constructor Detail

CatalogManager

public CatalogManager()
Constructor.

CatalogManager

public CatalogManager(java.lang.String propertyFile)
Constructor that specifies an explicit property file.
Method Detail

setBootstrapResolver

public void setBootstrapResolver(BootstrapResolver resolver)
Set the bootstrap resolver.

getBootstrapResolver

public BootstrapResolver getBootstrapResolver()
Get the bootstrap resolver.

getStaticManager

public static CatalogManager getStaticManager()
Allow access to the static CatalogManager

getIgnoreMissingProperties

public boolean getIgnoreMissingProperties()
How are missing properties handled?

If true, missing or unreadable property files will not be reported. Otherwise, a message will be sent to System.err.


setIgnoreMissingProperties

public void setIgnoreMissingProperties(boolean ignore)
How should missing properties be handled?

If ignore is true, missing or unreadable property files will not be reported. Otherwise, a message will be sent to System.err.


ignoreMissingProperties

public void ignoreMissingProperties(boolean ignore)
Deprecated. No longer static; use get/set methods.

How are missing properties handled?

If ignore is true, missing or unreadable property files will not be reported. Otherwise, a message will be sent to System.err.


getVerbosity

public int getVerbosity()
What is the current verbosity?

setVerbosity

public void setVerbosity(int verbosity)
Set the current verbosity.

verbosity

public int verbosity()
Deprecated. No longer static; use get/set methods.

What is the current verbosity?

getRelativeCatalogs

public boolean getRelativeCatalogs()
Get the relativeCatalogs setting.

This property is used when the catalogFiles property is interrogated. If true, then relative catalog entry file names are returned. If false, relative catalog entry file names are made absolute with respect to the properties file before returning them.

This property only applies when the catalog files come from a properties file. If they come from a system property or the default list, they are never considered relative. (What would they be relative to?)

In the properties, a value of 'yes', 'true', or '1' is considered true, anything else is false.

Returns:
The relativeCatalogs setting from the propertyFile or the defaultRelativeCatalogs.

setRelativeCatalogs

public void setRelativeCatalogs(boolean relative)
Set the relativeCatalogs setting.
See Also:
getRelativeCatalogs()

relativeCatalogs

public boolean relativeCatalogs()
Deprecated. No longer static; use get/set methods.

Get the relativeCatalogs setting.

getCatalogFiles

public java.util.Vector getCatalogFiles()
Return the current list of catalog files.
Returns:
A vector of the catalog file names or null if no catalogs are available in the properties.

setCatalogFiles

public void setCatalogFiles(java.lang.String fileList)
Set the list of catalog files.

catalogFiles

public java.util.Vector catalogFiles()
Deprecated. No longer static; use get/set methods.

Return the current list of catalog files.
Returns:
A vector of the catalog file names or null if no catalogs are available in the properties.

getPreferPublic

public boolean getPreferPublic()
Return the current prefer public setting.
Returns:
True if public identifiers are preferred.

setPreferPublic

public void setPreferPublic(boolean preferPublic)
Set the prefer public setting.

preferPublic

public boolean preferPublic()
Deprecated. No longer static; use get/set methods.

Return the current prefer public setting.
Returns:
True if public identifiers are preferred.

getUseStaticCatalog

public boolean getUseStaticCatalog()
Get the current use static catalog setting.

setUseStaticCatalog

public void setUseStaticCatalog(boolean useStatic)
Set the use static catalog setting.

staticCatalog

public boolean staticCatalog()
Deprecated. No longer static; use get/set methods.

Get the current use static catalog setting.

getPrivateCatalog

public Catalog getPrivateCatalog()
Get a new catalog instance. This method always returns a new instance of the underlying catalog class.

getCatalog

public Catalog getCatalog()
Get a catalog instance. If this manager uses static catalogs, the same static catalog will always be returned. Otherwise a new catalog will be returned.

queryAllowOasisXMLCatalogPI

public boolean queryAllowOasisXMLCatalogPI()

Obtain the oasisXMLCatalogPI setting from the properties.

In the properties, a value of 'yes', 'true', or '1' is considered true, anything else is false.

Returns:
The oasisXMLCatalogPI setting from the propertyFile or the defaultOasisXMLCatalogPI.

getAllowOasisXMLCatalogPI

public boolean getAllowOasisXMLCatalogPI()
Get the current XML Catalog PI setting.

setAllowOasisXMLCatalogPI

public void setAllowOasisXMLCatalogPI(boolean allowPI)
Set the XML Catalog PI setting

allowOasisXMLCatalogPI

public boolean allowOasisXMLCatalogPI()
Deprecated. No longer static; use get/set methods.

Get the current XML Catalog PI setting.

queryCatalogClassName

public java.lang.String queryCatalogClassName()
Obtain the Catalog class name setting from the properties.

getCatalogClassName

public java.lang.String getCatalogClassName()
Get the current Catalog class name.

setCatalogClassName

public void setCatalogClassName(java.lang.String className)
Set the Catalog class name.

catalogClassName

public java.lang.String catalogClassName()
Deprecated. No longer static; use get/set methods.

Get the current Catalog class name.


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/Resolver.html100644 0 0 105554 10530407252 25306 0ustar 0 0 xml-commons-resolver API: Class Resolver

org.apache.xml.resolver
Class Resolver

java.lang.Object
  |
  +--org.apache.xml.resolver.Catalog
        |
        +--org.apache.xml.resolver.Resolver

public class Resolver
extends Catalog

An extension to OASIS Open Catalog files, this class supports suffix-based matching and an external RFC2483 resolver.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog

Field Summary
static int RESOLVER
          The RESOLVER Catalog Entry type.
static int SYSTEMREVERSE
          The SYSTEMREVERSE Catalog Entry type.
static int SYSTEMSUFFIX
          The SYSTEMSUFFIX Catalog Entry type.
static int URISUFFIX
          The URISUFFIX Catalog Entry type.
 
Fields inherited from class org.apache.xml.resolver.Catalog
base, BASE, CATALOG, catalogCwd, catalogEntries, catalogFiles, catalogManager, catalogs, default_override, DELEGATE_PUBLIC, DELEGATE_SYSTEM, DELEGATE_URI, DOCTYPE, DOCUMENT, DTDDECL, ENTITY, LINKTYPE, localCatalogFiles, localDelegate, NOTATION, OVERRIDE, PUBLIC, readerArr, readerMap, REWRITE_SYSTEM, REWRITE_URI, SGMLDECL, SYSTEM, SYSTEM_SUFFIX, URI, URI_SUFFIX
 
Constructor Summary
Resolver()
           
 
Method Summary
 void addEntry(CatalogEntry entry)
          Cleanup and process a Catalog entry.
protected  Resolver queryResolver(java.lang.String resolver, java.lang.String command, java.lang.String arg1, java.lang.String arg2)
          Query an external RFC2483 resolver.
 java.util.Vector resolveAllSystem(java.lang.String systemId)
          Return the applicable SYSTEM system identifiers.
 java.util.Vector resolveAllSystemReverse(java.lang.String systemId)
          Find the URNs for a given system identifier in all catalogs.
protected  java.lang.String resolveExternalPublic(java.lang.String publicId, java.lang.String resolver)
          Query an external RFC2483 resolver for a public identifier.
protected  java.lang.String resolveExternalSystem(java.lang.String systemId, java.lang.String resolver)
          Query an external RFC2483 resolver for a system identifier.
 java.lang.String resolvePublic(java.lang.String publicId, java.lang.String systemId)
          Return the applicable PUBLIC or SYSTEM identifier, resorting to external resolvers if necessary.
 java.lang.String resolveSystem(java.lang.String systemId)
          Return the applicable SYSTEM system identifier, resorting to external RESOLVERs if necessary.
 java.lang.String resolveSystemReverse(java.lang.String systemId)
          Find the URN for a given system identifier.
 java.lang.String resolveURI(java.lang.String uri)
          Return the applicable URI.
 void setupReaders()
          Setup readers.
 
Methods inherited from class org.apache.xml.resolver.Catalog
addDelegate, addReader, copyReaders, encodedByte, fixSlashes, getCatalogManager, getCurrentBase, getDefaultOverride, loadSystemCatalogs, makeAbsolute, newCatalog, normalizeURI, parseAllCatalogs, parseCatalog, parseCatalog, parseCatalog, parseCatalogFile, parsePendingCatalogs, resolveDoctype, resolveDocument, resolveEntity, resolveLocalPublic, resolveLocalSystem, resolveLocalURI, resolveNotation, resolveSubordinateCatalogs, setCatalogManager, unknownEntry
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

URISUFFIX

public static final int URISUFFIX
The URISUFFIX Catalog Entry type.

URI suffix entries match URIs that end in a specified suffix.


SYSTEMSUFFIX

public static final int SYSTEMSUFFIX
The SYSTEMSUFFIX Catalog Entry type.

System suffix entries match system identifiers that end in a specified suffix.


RESOLVER

public static final int RESOLVER
The RESOLVER Catalog Entry type.

A hook for providing support for web-based backup resolvers.


SYSTEMREVERSE

public static final int SYSTEMREVERSE
The SYSTEMREVERSE Catalog Entry type.

This is a bit of a hack. There's no actual SYSTEMREVERSE entry, but this entry type is used to indicate that a reverse lookup is being performed. (This allows the Resolver to implement RFC2483 I2N and I2NS.)

Constructor Detail

Resolver

public Resolver()
Method Detail

setupReaders

public void setupReaders()
Setup readers.
Overrides:
setupReaders in class Catalog

addEntry

public void addEntry(CatalogEntry entry)
Cleanup and process a Catalog entry.

This method processes each Catalog entry, changing mapped relative system identifiers into absolute ones (based on the current base URI), and maintaining other information about the current catalog.

Overrides:
addEntry in class Catalog
Parameters:
entry - The CatalogEntry to process.

resolveURI

public java.lang.String resolveURI(java.lang.String uri)
                            throws java.net.MalformedURLException,
                                   java.io.IOException
Return the applicable URI.

If a URI entry exists in the Catalog for the URI specified, return the mapped value.

In the Resolver (as opposed to the Catalog) class, if the URI isn't found by the usual algorithm, URISUFFIX entries are considered.

URI comparison is case sensitive.

Overrides:
resolveURI in class Catalog
Parameters:
uri - The URI to locate in the catalog.
Returns:
The resolved URI.
Throws:
java.net.MalformedURLException - The system identifier of a subordinate catalog cannot be turned into a valid URL.
java.io.IOException - Error reading subordinate catalog file.

resolveSystem

public java.lang.String resolveSystem(java.lang.String systemId)
                               throws java.net.MalformedURLException,
                                      java.io.IOException
Return the applicable SYSTEM system identifier, resorting to external RESOLVERs if necessary.

If a SYSTEM entry exists in the Catalog for the system ID specified, return the mapped value.

In the Resolver (as opposed to the Catalog) class, if the URI isn't found by the usual algorithm, SYSTEMSUFFIX entries are considered.

On Windows-based operating systems, the comparison between the system identifier provided and the SYSTEM entries in the Catalog is case-insensitive.

Overrides:
resolveSystem in class Catalog
Parameters:
systemId - The system ID to locate in the catalog.
Returns:
The system identifier to use for systemId.
Throws:
java.net.MalformedURLException - The formal system identifier of a subordinate catalog cannot be turned into a valid URL.
java.io.IOException - Error reading subordinate catalog file.

resolvePublic

public java.lang.String resolvePublic(java.lang.String publicId,
                                      java.lang.String systemId)
                               throws java.net.MalformedURLException,
                                      java.io.IOException
Return the applicable PUBLIC or SYSTEM identifier, resorting to external resolvers if necessary.

This method searches the Catalog and returns the system identifier specified for the given system or public identifiers. If no appropriate PUBLIC or SYSTEM entry is found in the Catalog, null is returned.

Note that a system or public identifier in the current catalog (or subordinate catalogs) will be used in preference to an external resolver. Further, if a systemId is present, the external resolver(s) will be queried for that before the publicId.

Overrides:
resolvePublic in class Catalog
Parameters:
publicId - The public identifier to locate in the catalog. Public identifiers are normalized before comparison.
systemId - The nominal system identifier for the entity in question (as provided in the source document).
Returns:
The system identifier to use. Note that the nominal system identifier is not returned if a match is not found in the catalog, instead null is returned to indicate that no match was found.
Throws:
java.net.MalformedURLException - The formal system identifier of a subordinate catalog cannot be turned into a valid URL.
java.io.IOException - Error reading subordinate catalog file.

resolveExternalSystem

protected java.lang.String resolveExternalSystem(java.lang.String systemId,
                                                 java.lang.String resolver)
                                          throws java.net.MalformedURLException,
                                                 java.io.IOException
Query an external RFC2483 resolver for a system identifier.
Parameters:
systemId - The system ID to locate.
resolver - The name of the resolver to use.
Returns:
The system identifier to use for the systemId.

resolveExternalPublic

protected java.lang.String resolveExternalPublic(java.lang.String publicId,
                                                 java.lang.String resolver)
                                          throws java.net.MalformedURLException,
                                                 java.io.IOException
Query an external RFC2483 resolver for a public identifier.
Parameters:
publicId - The system ID to locate.
resolver - The name of the resolver to use.
Returns:
The system identifier to use for the systemId.

queryResolver

protected Resolver queryResolver(java.lang.String resolver,
                                 java.lang.String command,
                                 java.lang.String arg1,
                                 java.lang.String arg2)
Query an external RFC2483 resolver.
Parameters:
resolver - The URL of the RFC2483 resolver.
command - The command to send the resolver.
arg1 - The first argument to the resolver.
arg2 - The second argument to the resolver, usually null.
Returns:
The Resolver constructed.

resolveAllSystemReverse

public java.util.Vector resolveAllSystemReverse(java.lang.String systemId)
                                         throws java.net.MalformedURLException,
                                                java.io.IOException
Find the URNs for a given system identifier in all catalogs.
Parameters:
systemId - The system ID to locate.
Returns:
A vector of URNs that map to the systemId.

resolveSystemReverse

public java.lang.String resolveSystemReverse(java.lang.String systemId)
                                      throws java.net.MalformedURLException,
                                             java.io.IOException
Find the URN for a given system identifier.
Parameters:
systemId - The system ID to locate.
Returns:
A (single) URN that maps to the systemId.

resolveAllSystem

public java.util.Vector resolveAllSystem(java.lang.String systemId)
                                  throws java.net.MalformedURLException,
                                         java.io.IOException
Return the applicable SYSTEM system identifiers.

If one or more SYSTEM entries exists in the Catalog for the system ID specified, return the mapped values.

The caller is responsible for doing any necessary normalization of the system identifier before calling this method. For example, a relative system identifier in a document might be converted to an absolute system identifier before attempting to resolve it.

Note that this function will force all subordinate catalogs to be loaded.

On Windows-based operating systems, the comparison between the system identifier provided and the SYSTEM entries in the Catalog is case-insensitive.

Parameters:
systemId - The system ID to locate in the catalog.
Returns:
The system identifier to use for the notation.
Throws:
java.net.MalformedURLException - The formal system identifier of a subordinate catalog cannot be turned into a valid URL.
java.io.IOException - Error reading subordinate catalog file.


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/Version.html100644 0 0 26061 10530407252 25105 0ustar 0 0 xml-commons-resolver API: Class Version

org.apache.xml.resolver
Class Version

java.lang.Object
  |
  +--org.apache.xml.resolver.Version

public class Version
extends java.lang.Object

Administrative class to keep track of the version number of xml-commons external sources releases. See xml-commons/java/resolver.xml for filtering on 1.0, etc.


Constructor Summary
Version()
           
 
Method Summary
static java.lang.String getProduct()
          Get just the product name.
static java.lang.String getVersion()
          Get the version string for xml-commons-resolver.
static java.lang.String getVersionNum()
          Get just the version number v.r.
static void main(java.lang.String[] argv)
          Print the release version to the command line.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Version

public Version()
Method Detail

getVersion

public static java.lang.String getVersion()
Get the version string for xml-commons-resolver. Version String formatted like: "XmlResolver v.r".
Returns:
String denoting our current version

getProduct

public static java.lang.String getProduct()
Get just the product name.
Returns:
String denoting our product name

getVersionNum

public static java.lang.String getVersionNum()
Get just the version number v.r.
Returns:
String denoting our current version number

main

public static void main(java.lang.String[] argv)
Print the release version to the command line.
Parameters:
argv - command line arguments, unused.


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/XParseError.html100644 0 0 34134 10530407252 26637 0ustar 0 0 xml-commons-resolver API: Class XParseError

org.apache.xml.resolver.apps
Class XParseError

java.lang.Object
  |
  +--org.apache.xml.resolver.apps.XParseError
All Implemented Interfaces:
org.xml.sax.ErrorHandler

public class XParseError
extends java.lang.Object
implements org.xml.sax.ErrorHandler

An ErrorHandler for xparse.

This class is just the error handler for xparse.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
xparse

Constructor Summary
XParseError(boolean errors, boolean warnings)
          Constructor
 
Method Summary
 void error(org.xml.sax.SAXParseException exception)
          SAX2 API
 void fatalError(org.xml.sax.SAXParseException exception)
          SAX2 API
 int getErrorCount()
          Return the error count
 int getFatalCount()
          Return the fatal error count
 int getMaxMessages()
          Return the number of messages to display
 int getWarningCount()
          Return the warning count
 void setMaxMessages(int max)
          Set the number of messages to display
 void warning(org.xml.sax.SAXParseException exception)
          SAX2 API
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XParseError

public XParseError(boolean errors,
                   boolean warnings)
Constructor
Method Detail

getErrorCount

public int getErrorCount()
Return the error count

getFatalCount

public int getFatalCount()
Return the fatal error count

getWarningCount

public int getWarningCount()
Return the warning count

getMaxMessages

public int getMaxMessages()
Return the number of messages to display

setMaxMessages

public void setMaxMessages(int max)
Set the number of messages to display

error

public void error(org.xml.sax.SAXParseException exception)
SAX2 API
Specified by:
error in interface org.xml.sax.ErrorHandler

fatalError

public void fatalError(org.xml.sax.SAXParseException exception)
SAX2 API
Specified by:
fatalError in interface org.xml.sax.ErrorHandler

warning

public void warning(org.xml.sax.SAXParseException exception)
SAX2 API
Specified by:
warning in interface org.xml.sax.ErrorHandler


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/class-use/XParseError.html100644 0 0 12073 10530407252 30534 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.apps.XParseError

Uses of Class
org.apache.xml.resolver.apps.XParseError

No usage of org.apache.xml.resolver.apps.XParseError



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/class-use/resolver.html100644 0 0 12046 10530407252 30161 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.apps.resolver

Uses of Class
org.apache.xml.resolver.apps.resolver

No usage of org.apache.xml.resolver.apps.resolver



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/class-use/xparse.html100644 0 0 12030 10530407252 27613 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.apps.xparse

Uses of Class
org.apache.xml.resolver.apps.xparse

No usage of org.apache.xml.resolver.apps.xparse



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/class-use/xread.html100644 0 0 12021 10530407252 27414 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.apps.xread

Uses of Class
org.apache.xml.resolver.apps.xread

No usage of org.apache.xml.resolver.apps.xread



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/package-frame.html100644 0 0 2012 10530407252 27054 0ustar 0 0 xml-commons-resolver API: Package org.apache.xml.resolver.apps org.apache.xml.resolver.apps
Classes 
resolver
xparse
XParseError
xread
xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/package-summary.html100644 0 0 15117 10530407252 27511 0ustar 0 0 xml-commons-resolver API: Package org.apache.xml.resolver.apps

Package org.apache.xml.resolver.apps

Apache XML Commons Resolver Applications package.

See:
          Description

Class Summary
resolver A simple command-line resolver.
xparse Deprecated. This interface has been replaced by the ResolvingXMLReader for SAX2.
XParseError An ErrorHandler for xparse.
xread A simple command-line XML parsing application.
 

Package org.apache.xml.resolver.apps Description

Apache XML Commons Resolver Applications package.

This package provides a few simple command-line tools for exploring the facilities of the resolver.



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/package-tree.html100644 0 0 13460 10530407252 26752 0ustar 0 0 xml-commons-resolver API: org.apache.xml.resolver.apps Class Hierarchy

Hierarchy For Package org.apache.xml.resolver.apps

Package Hierarchies:
All Packages

Class Hierarchy



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/package-use.html100644 0 0 11476 10530407252 26614 0ustar 0 0 xml-commons-resolver API: Uses of Package org.apache.xml.resolver.apps

Uses of Package
org.apache.xml.resolver.apps

No usage of org.apache.xml.resolver.apps



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/resolver.html100644 0 0 25037 10530407252 26266 0ustar 0 0 xml-commons-resolver API: Class resolver

org.apache.xml.resolver.apps
Class resolver

java.lang.Object
  |
  +--org.apache.xml.resolver.apps.resolver

public class resolver
extends java.lang.Object

A simple command-line resolver.

This class implements a simple command-line resolver. It takes some parameters and passes them through the resolver, printing the result.

Usage: resolver [options] keyword

Where options are:

-c catalogfile
Load a particular catalog file.
-n name
Sets the name.
-p publicId
Sets the public identifier.
-s systemId
Sets the system identifier.
-a
Absolute system URI.
-u uri
Sets the URI.
-d integer
Set the debug level.

And keyword is one of: doctype, document, entity, notation, public, system, or uri.

The process ends with error-level 1, if there errors.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
ResolvingParser

Constructor Summary
resolver()
           
 
Method Summary
static void main(java.lang.String[] args)
          The main entry point
static void usage()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

resolver

public resolver()
Method Detail

main

public static void main(java.lang.String[] args)
                 throws java.io.FileNotFoundException,
                        java.io.IOException
The main entry point

usage

public static void usage()


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/xparse.html100644 0 0 25063 10530407252 25726 0ustar 0 0 xml-commons-resolver API: Class xparse

org.apache.xml.resolver.apps
Class xparse

java.lang.Object
  |
  +--org.apache.xml.resolver.apps.xparse

Deprecated. This interface has been replaced by the ResolvingXMLReader for SAX2.

public class xparse
extends java.lang.Object

A simple command-line XML parsing application.

This class implements a simple command-line XML Parser. It's just a little wrapper around the JAXP Parser with support for catalogs.

Usage: xparse [options] document.xml

Where:

-c catalogfile
Load a particular catalog file.
-w
Perform a well-formed parse, not a validating parse.
-v (the default)
Perform a validating parse.
-n
Perform a namespace-ignorant parse.
-N (the default)
Perform a namespace-aware parse.
-d integer
Set the debug level. Warnings are shown if the debug level is > 2.
-E integer
Set the maximum number of errors to display.

The process ends with error-level 1, if there errors.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
ResolvingParser

Constructor Summary
xparse()
          Deprecated.  
 
Method Summary
static void main(java.lang.String[] args)
          Deprecated. The main entry point
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

xparse

public xparse()
Deprecated. 
Method Detail

main

public static void main(java.lang.String[] args)
                 throws java.io.FileNotFoundException,
                        java.io.IOException
Deprecated. 
The main entry point


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/apps/xread.html100644 0 0 24225 10530407252 25526 0ustar 0 0 xml-commons-resolver API: Class xread

org.apache.xml.resolver.apps
Class xread

java.lang.Object
  |
  +--org.apache.xml.resolver.apps.xread

public class xread
extends java.lang.Object

A simple command-line XML parsing application.

This class implements a simple command-line XML Parser. It's just a little wrapper around the JAXP XMLReader with support for catalogs.

Usage: xread [options] document.xml

Where:

-c catalogfile
Load a particular catalog file.
-w
Perform a well-formed parse, not a validating parse.
-v (the default)
Perform a validating parse.
-s
Enable W3C XML Schema validation.
-n
Perform a namespace-ignorant parse.
-N (the default)
Perform a namespace-aware parse.
-d integer
Set the debug level. Warnings are shown if the debug level is > 2.
-E integer
Set the maximum number of errors to display.

The process ends with error-level 1, if there errors.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
ResolvingXMLReader

Constructor Summary
xread()
           
 
Method Summary
static void main(java.lang.String[] args)
          The main entry point
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

xread

public xread()
Method Detail

main

public static void main(java.lang.String[] args)
                 throws java.io.FileNotFoundException,
                        java.io.IOException
The main entry point


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/class-use/Catalog.html100644 0 0 60516 10530407252 26734 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.Catalog

Uses of Class
org.apache.xml.resolver.Catalog

Packages that use Catalog
org.apache.xml.resolver Apache XML Commons Resolver package. 
org.apache.xml.resolver.readers Apache XML Commons Resolver Readers package. 
org.apache.xml.resolver.tools Apache XML Commons Resolver Tools package. 
 

Uses of Catalog in org.apache.xml.resolver
 

Subclasses of Catalog in org.apache.xml.resolver
 class Resolver
          An extension to OASIS Open Catalog files, this class supports suffix-based matching and an external RFC2483 resolver.
 

Methods in org.apache.xml.resolver that return Catalog
protected  Catalog Catalog.newCatalog()
          Create a new Catalog object.
 Catalog CatalogManager.getPrivateCatalog()
          Get a new catalog instance.
 Catalog CatalogManager.getCatalog()
          Get a catalog instance.
 

Methods in org.apache.xml.resolver with parameters of type Catalog
protected  void Catalog.copyReaders(Catalog newCatalog)
          Copies the reader list from the current Catalog to a new Catalog.
 

Uses of Catalog in org.apache.xml.resolver.readers
 

Fields in org.apache.xml.resolver.readers declared as Catalog
protected  Catalog OASISXMLCatalogReader.catalog
          The catalog object needs to be stored by the object so that SAX callbacks can use it.
protected  Catalog XCatalogReader.catalog
          The catalog object needs to be stored by the object so that SAX callbacks can use it.
 

Methods in org.apache.xml.resolver.readers that return Catalog
 Catalog OASISXMLCatalogReader.getCatalog()
          Get the current catalog.
 Catalog XCatalogReader.getCatalog()
          Get the current catalog.
 

Methods in org.apache.xml.resolver.readers with parameters of type Catalog
 void TextCatalogReader.readCatalog(Catalog catalog, java.lang.String fileUrl)
          Start parsing a text catalog file.
 void TextCatalogReader.readCatalog(Catalog catalog, java.io.InputStream is)
           
 void SAXCatalogReader.readCatalog(Catalog catalog, java.lang.String fileUrl)
          Parse an XML Catalog file.
 void SAXCatalogReader.readCatalog(Catalog catalog, java.io.InputStream is)
          Parse an XML Catalog stream.
 void OASISXMLCatalogReader.setCatalog(Catalog catalog)
          Set the current catalog.
 void SAXCatalogParser.setCatalog(Catalog catalog)
          Set the Catalog for which parsing is being performed.
 void DOMCatalogParser.parseCatalogEntry(Catalog catalog, org.w3c.dom.Node node)
          Parse a DOM node as a catalog entry.
 void TR9401CatalogReader.readCatalog(Catalog catalog, java.io.InputStream is)
          Start parsing an OASIS TR9401 Open Catalog file.
 void XCatalogReader.setCatalog(Catalog catalog)
          Set the current catalog.
 void CatalogReader.readCatalog(Catalog catalog, java.lang.String fileUrl)
          Read a catalog from a file.
 void CatalogReader.readCatalog(Catalog catalog, java.io.InputStream is)
          Read a catalog from an input stream.
 void DOMCatalogReader.readCatalog(Catalog catalog, java.io.InputStream is)
          Read a catalog from an input stream.
 void DOMCatalogReader.readCatalog(Catalog catalog, java.lang.String fileUrl)
          Read the catalog behind the specified URL.
 

Constructors in org.apache.xml.resolver.readers with parameters of type Catalog
OASISXMLCatalogReader(javax.xml.parsers.SAXParserFactory parserFactory, Catalog catalog)
          Constructor allowing for providing custom SAX parser factory
XCatalogReader(javax.xml.parsers.SAXParserFactory parserFactory, Catalog catalog)
          Constructor allowing for providing custom SAX parser factory
 

Uses of Catalog in org.apache.xml.resolver.tools
 

Methods in org.apache.xml.resolver.tools that return Catalog
 Catalog ResolvingParser.getCatalog()
          Deprecated. Return the Catalog being used.
 Catalog ResolvingXMLFilter.getCatalog()
          Provide accessto the underlying Catalog.
 Catalog CatalogResolver.getCatalog()
          Return the underlying catalog
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/class-use/CatalogEntry.html100644 0 0 17436 10530407252 27761 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.CatalogEntry

Uses of Class
org.apache.xml.resolver.CatalogEntry

Packages that use CatalogEntry
org.apache.xml.resolver Apache XML Commons Resolver package. 
 

Uses of CatalogEntry in org.apache.xml.resolver
 

Methods in org.apache.xml.resolver with parameters of type CatalogEntry
 void Catalog.addEntry(CatalogEntry entry)
          Cleanup and process a Catalog entry.
protected  void Catalog.addDelegate(CatalogEntry entry)
          Add to the current list of delegated catalogs.
 void Resolver.addEntry(CatalogEntry entry)
          Cleanup and process a Catalog entry.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/class-use/CatalogException.html100644 0 0 35325 10530407252 30613 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.CatalogException

Uses of Class
org.apache.xml.resolver.CatalogException

Packages that use CatalogException
org.apache.xml.resolver Apache XML Commons Resolver package. 
org.apache.xml.resolver.readers Apache XML Commons Resolver Readers package. 
 

Uses of CatalogException in org.apache.xml.resolver
 

Methods in org.apache.xml.resolver that throw CatalogException
static int CatalogEntry.getEntryType(java.lang.String name)
          Lookup an entry type
static int CatalogEntry.getEntryArgCount(java.lang.String name)
          Find out how many arguments an entry is required to have.
static int CatalogEntry.getEntryArgCount(int type)
          Find out how many arguments an entry is required to have.
 void Catalog.parseCatalog(java.lang.String mimeType, java.io.InputStream is)
          Parse a catalog file, augmenting internal data structures.
protected  void Catalog.parseCatalogFile(java.lang.String fileName)
          Parse a single catalog file, augmenting internal data structures.
 

Constructors in org.apache.xml.resolver that throw CatalogException
CatalogEntry(java.lang.String name, java.util.Vector args)
          Construct a catalog entry of the specified type.
CatalogEntry(int type, java.util.Vector args)
          Construct a catalog entry of the specified type.
 

Uses of CatalogException in org.apache.xml.resolver.readers
 

Methods in org.apache.xml.resolver.readers that throw CatalogException
protected  java.lang.String TextCatalogReader.nextToken()
          Return the next token in the catalog file.
 void SAXCatalogReader.readCatalog(Catalog catalog, java.lang.String fileUrl)
          Parse an XML Catalog file.
 void SAXCatalogReader.readCatalog(Catalog catalog, java.io.InputStream is)
          Parse an XML Catalog stream.
 void CatalogReader.readCatalog(Catalog catalog, java.lang.String fileUrl)
          Read a catalog from a file.
 void CatalogReader.readCatalog(Catalog catalog, java.io.InputStream is)
          Read a catalog from an input stream.
 void DOMCatalogReader.readCatalog(Catalog catalog, java.io.InputStream is)
          Read a catalog from an input stream.
 void DOMCatalogReader.readCatalog(Catalog catalog, java.lang.String fileUrl)
          Read the catalog behind the specified URL.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/class-use/CatalogManager.html100644 0 0 32252 10530407252 30223 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.CatalogManager

Uses of Class
org.apache.xml.resolver.CatalogManager

Packages that use CatalogManager
org.apache.xml.resolver Apache XML Commons Resolver package. 
org.apache.xml.resolver.tools Apache XML Commons Resolver Tools package. 
 

Uses of CatalogManager in org.apache.xml.resolver
 

Fields in org.apache.xml.resolver declared as CatalogManager
protected  CatalogManager Catalog.catalogManager
          The catalog manager in use for this instance.
 

Methods in org.apache.xml.resolver that return CatalogManager
 CatalogManager Catalog.getCatalogManager()
          Return the CatalogManager used by this catalog.
static CatalogManager CatalogManager.getStaticManager()
          Allow access to the static CatalogManager
 

Methods in org.apache.xml.resolver with parameters of type CatalogManager
 void Catalog.setCatalogManager(CatalogManager manager)
          Establish the CatalogManager used by this catalog.
 

Constructors in org.apache.xml.resolver with parameters of type CatalogManager
Catalog(CatalogManager manager)
          Constructs an empty Catalog with a specific CatalogManager.
 

Uses of CatalogManager in org.apache.xml.resolver.tools
 

Constructors in org.apache.xml.resolver.tools with parameters of type CatalogManager
ResolvingParser(CatalogManager manager)
          Deprecated. Constructor.
ResolvingXMLFilter(CatalogManager manager)
          Construct an XML filter with the specified parent.
ResolvingXMLFilter(org.xml.sax.XMLReader parent, CatalogManager manager)
          Construct an XML filter with the specified parent.
ResolvingXMLReader(CatalogManager manager)
          Construct a new reader from the JAXP factory.
CatalogResolver(CatalogManager manager)
          Constructor
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/class-use/Resolver.html100644 0 0 15573 10530407252 27166 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.Resolver

Uses of Class
org.apache.xml.resolver.Resolver

Packages that use Resolver
org.apache.xml.resolver Apache XML Commons Resolver package. 
 

Uses of Resolver in org.apache.xml.resolver
 

Methods in org.apache.xml.resolver that return Resolver
protected  Resolver Resolver.queryResolver(java.lang.String resolver, java.lang.String command, java.lang.String arg1, java.lang.String arg2)
          Query an external RFC2483 resolver.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/class-use/Version.html100644 0 0 11731 10530407252 27002 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.Version

Uses of Class
org.apache.xml.resolver.Version

No usage of org.apache.xml.resolver.Version



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/BootstrapResolver.html100644 0 0 35615 10530407252 30626 0ustar 0 0 xml-commons-resolver API: Class BootstrapResolver

org.apache.xml.resolver.helpers
Class BootstrapResolver

java.lang.Object
  |
  +--org.apache.xml.resolver.helpers.BootstrapResolver
All Implemented Interfaces:
org.xml.sax.EntityResolver, javax.xml.transform.URIResolver

public class BootstrapResolver
extends java.lang.Object
implements org.xml.sax.EntityResolver, javax.xml.transform.URIResolver

A simple bootstrapping resolver.

This class is used as the entity resolver when reading XML Catalogs. It searches for the OASIS XML Catalog DTD, Relax NG Grammar and W3C XML Schema as resources (e.g., in the resolver jar file).

If you have your own DTDs or schemas, you can extend this class and set the BootstrapResolver in your CatalogManager.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
CatalogManager

Field Summary
static java.lang.String xCatalogPubId
          Public identifier for legacy Apache XCatalog files.
static java.lang.String xmlCatalogPubId
          Public identifier for OASIS XML Catalog files.
static java.lang.String xmlCatalogRNG
          URI of the RELAX NG Grammar for OASIS XML Catalog files.
static java.lang.String xmlCatalogSysId
          System identifier for OASIS XML Catalog files.
static java.lang.String xmlCatalogXSD
          URI of the W3C XML Schema for OASIS XML Catalog files.
 
Constructor Summary
BootstrapResolver()
          Constructor.
 
Method Summary
 javax.xml.transform.Source resolve(java.lang.String href, java.lang.String base)
          Transformer resolve API.
 org.xml.sax.InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId)
          SAX resolveEntity API.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

xmlCatalogXSD

public static final java.lang.String xmlCatalogXSD
URI of the W3C XML Schema for OASIS XML Catalog files.

xmlCatalogRNG

public static final java.lang.String xmlCatalogRNG
URI of the RELAX NG Grammar for OASIS XML Catalog files.

xmlCatalogPubId

public static final java.lang.String xmlCatalogPubId
Public identifier for OASIS XML Catalog files.

xmlCatalogSysId

public static final java.lang.String xmlCatalogSysId
System identifier for OASIS XML Catalog files.

xCatalogPubId

public static final java.lang.String xCatalogPubId
Public identifier for legacy Apache XCatalog files. There is no official system identifier for XCatalog files.
Constructor Detail

BootstrapResolver

public BootstrapResolver()
Constructor.
Method Detail

resolveEntity

public org.xml.sax.InputSource resolveEntity(java.lang.String publicId,
                                             java.lang.String systemId)
SAX resolveEntity API.
Specified by:
resolveEntity in interface org.xml.sax.EntityResolver

resolve

public javax.xml.transform.Source resolve(java.lang.String href,
                                          java.lang.String base)
                                   throws javax.xml.transform.TransformerException
Transformer resolve API.
Specified by:
resolve in interface javax.xml.transform.URIResolver


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/Debug.html100644 0 0 34732 10530407252 26154 0ustar 0 0 xml-commons-resolver API: Class Debug

org.apache.xml.resolver.helpers
Class Debug

java.lang.Object
  |
  +--org.apache.xml.resolver.helpers.Debug

public class Debug
extends java.lang.Object

Static debugging/messaging class for Catalogs.

This class defines a set of static methods that can be called to produce debugging messages. Messages have an associated "debug level" and messages below the current setting are not displayed.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM

Field Summary
protected  int debug
          The internal debug level.
 
Constructor Summary
Debug()
          Constructor
 
Method Summary
 int getDebug()
          Get the current debug level.
 void message(int level, java.lang.String message)
          Print debug message (if the debug level is high enough).
 void message(int level, java.lang.String message, java.lang.String spec)
          Print debug message (if the debug level is high enough).
 void message(int level, java.lang.String message, java.lang.String spec1, java.lang.String spec2)
          Print debug message (if the debug level is high enough).
 void setDebug(int newDebug)
          Set the debug level for future messages.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

debug

protected int debug
The internal debug level.
Constructor Detail

Debug

public Debug()
Constructor
Method Detail

setDebug

public void setDebug(int newDebug)
Set the debug level for future messages.

getDebug

public int getDebug()
Get the current debug level.

message

public void message(int level,
                    java.lang.String message)
Print debug message (if the debug level is high enough).

Prints "the message"

Parameters:
level - The debug level of this message. This message will only be displayed if the current debug level is at least equal to this value.
message - The text of the message.

message

public void message(int level,
                    java.lang.String message,
                    java.lang.String spec)
Print debug message (if the debug level is high enough).

Prints "the message: spec"

Parameters:
level - The debug level of this message. This message will only be displayed if the current debug level is at least equal to this value.
message - The text of the message.
spec - An argument to the message.

message

public void message(int level,
                    java.lang.String message,
                    java.lang.String spec1,
                    java.lang.String spec2)
Print debug message (if the debug level is high enough).

Prints "the message: spec1" and "spec2" indented on the next line.

Parameters:
level - The debug level of this message. This message will only be displayed if the current debug level is at least equal to this value.
message - The text of the message.
spec1 - An argument to the message.
spec2 - Another argument to the message.


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/FileURL.html100644 0 0 25101 10530407252 26356 0ustar 0 0 xml-commons-resolver API: Class FileURL

org.apache.xml.resolver.helpers
Class FileURL

java.lang.Object
  |
  +--org.apache.xml.resolver.helpers.FileURL

public abstract class FileURL
extends java.lang.Object

Static method for dealing with file: URLs.

This class defines a static method that can be used to construct an appropriate file: URL from parts. It's defined here so that it can be reused throught the resolver.

(Yes, I'd rather have called this class FileURI, but given that a jave.net.URL is returned, it seemed...even more confusing.)

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM

Constructor Summary
protected FileURL()
           
 
Method Summary
static java.net.URL makeURL(java.lang.String pathname)
          Construct a file: URL for a path name.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FileURL

protected FileURL()
Method Detail

makeURL

public static java.net.URL makeURL(java.lang.String pathname)
                            throws java.net.MalformedURLException
Construct a file: URL for a path name.

URLs in the file: scheme can be constructed for paths on the local file system. Several possibilities need to be considered:

  • If the path does not begin with a slash, then it is assumed to reside in the users current working directory (System.getProperty("user.dir")).
  • On Windows machines, the current working directory uses backslashes (\\, instead of /).
  • If the current working directory is "/", don't add an extra slash before the base name.

This method is declared static so that other classes can use it directly.

Parameters:
pathname - The path name component for which to construct a URL.
Returns:
The appropriate file: URL.
Throws:
java.net.MalformedURLException - if the pathname can't be turned into a proper URL.


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/Namespaces.html100644 0 0 31365 10530407252 27204 0ustar 0 0 xml-commons-resolver API: Class Namespaces

org.apache.xml.resolver.helpers
Class Namespaces

java.lang.Object
  |
  +--org.apache.xml.resolver.helpers.Namespaces

public class Namespaces
extends java.lang.Object

Static Namespace query methods.

This class defines a set of static methods that can be called to analyze the namespace properties of DOM nodes.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM

Constructor Summary
Namespaces()
           
 
Method Summary
static java.lang.String getLocalName(org.w3c.dom.Element element)
          Returns the "localname" part of a QName, which is the whole name if it has no prefix.
static java.lang.String getNamespaceURI(org.w3c.dom.Element element)
          Returns the namespace URI for the namespace to which the element belongs.
static java.lang.String getNamespaceURI(org.w3c.dom.Node node, java.lang.String prefix)
          Returns the namespace URI for the specified prefix at the specified context node.
static java.lang.String getPrefix(org.w3c.dom.Element element)
          Returns the "prefix" part of a QName or the empty string (not null) if the name has no prefix.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Namespaces

public Namespaces()
Method Detail

getPrefix

public static java.lang.String getPrefix(org.w3c.dom.Element element)
Returns the "prefix" part of a QName or the empty string (not null) if the name has no prefix.
Parameters:
element - The QName of an element.
Returns:
The prefix part of the element name.

getLocalName

public static java.lang.String getLocalName(org.w3c.dom.Element element)
Returns the "localname" part of a QName, which is the whole name if it has no prefix.
Parameters:
element - The QName of an element.
Returns:
The local part of a QName.

getNamespaceURI

public static java.lang.String getNamespaceURI(org.w3c.dom.Node node,
                                               java.lang.String prefix)
Returns the namespace URI for the specified prefix at the specified context node.
Parameters:
node - The context node.
prefix - The prefix.
Returns:
The namespace URI associated with the prefix, or null if no namespace declaration exists for the prefix.

getNamespaceURI

public static java.lang.String getNamespaceURI(org.w3c.dom.Element element)
Returns the namespace URI for the namespace to which the element belongs.
Parameters:
element - The element.
Returns:
The namespace URI associated with the namespace of the element, or null if no namespace declaration exists for it.


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/PublicId.html100644 0 0 27305 10530407252 26617 0ustar 0 0 xml-commons-resolver API: Class PublicId

org.apache.xml.resolver.helpers
Class PublicId

java.lang.Object
  |
  +--org.apache.xml.resolver.helpers.PublicId

public abstract class PublicId
extends java.lang.Object

Static methods for dealing with public identifiers.

This class defines a set of static methods that can be called to handle public identifiers.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM

Constructor Summary
protected PublicId()
           
 
Method Summary
static java.lang.String decodeURN(java.lang.String urn)
          Decode a "publicid" URN into a public identifier.
static java.lang.String encodeURN(java.lang.String publicId)
          Encode a public identifier as a "publicid" URN.
static java.lang.String normalize(java.lang.String publicId)
          Normalize a public identifier.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PublicId

protected PublicId()
Method Detail

normalize

public static java.lang.String normalize(java.lang.String publicId)
Normalize a public identifier.

Public identifiers must be normalized according to the following rules before comparisons between them can be made:

  • Whitespace characters are normalized to spaces (e.g., line feeds, tabs, etc. become spaces).
  • Leading and trailing whitespace is removed.
  • Multiple internal whitespaces are normalized to a single space.

This method is declared static so that other classes can use it directly.

Parameters:
publicId - The unnormalized public identifier.
Returns:
The normalized identifier.

encodeURN

public static java.lang.String encodeURN(java.lang.String publicId)
Encode a public identifier as a "publicid" URN.

This method is declared static so that other classes can use it directly.

Parameters:
publicId - The unnormalized public identifier.
Returns:
The normalized identifier.

decodeURN

public static java.lang.String decodeURN(java.lang.String urn)
Decode a "publicid" URN into a public identifier.

This method is declared static so that other classes can use it directly.

Parameters:
urn - The urn:publicid: URN
Returns:
The normalized identifier.


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 153 10530407253 10251 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/class-use/BootstrapResolver.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/class-use/BootstrapResolve100644 0 0 17611 10530407252 31374 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.helpers.BootstrapResolver

Uses of Class
org.apache.xml.resolver.helpers.BootstrapResolver

Packages that use BootstrapResolver
org.apache.xml.resolver Apache XML Commons Resolver package. 
 

Uses of BootstrapResolver in org.apache.xml.resolver
 

Methods in org.apache.xml.resolver that return BootstrapResolver
 BootstrapResolver CatalogManager.getBootstrapResolver()
          Get the bootstrap resolver.
 

Methods in org.apache.xml.resolver with parameters of type BootstrapResolver
 void CatalogManager.setBootstrapResolver(BootstrapResolver resolver)
          Set the bootstrap resolver.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/class-use/Debug.html100644 0 0 20361 10530407252 30044 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.helpers.Debug

Uses of Class
org.apache.xml.resolver.helpers.Debug

Packages that use Debug
org.apache.xml.resolver Apache XML Commons Resolver package. 
org.apache.xml.resolver.readers Apache XML Commons Resolver Readers package. 
 

Uses of Debug in org.apache.xml.resolver
 

Fields in org.apache.xml.resolver declared as Debug
 Debug CatalogManager.debug
          The manager's debug object.
 

Uses of Debug in org.apache.xml.resolver.readers
 

Fields in org.apache.xml.resolver.readers declared as Debug
protected  Debug SAXCatalogReader.debug
          The debug class to use for this reader.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/class-use/FileURL.html100644 0 0 12056 10530407252 30262 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.helpers.FileURL

Uses of Class
org.apache.xml.resolver.helpers.FileURL

No usage of org.apache.xml.resolver.helpers.FileURL



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/class-use/Namespaces.html100644 0 0 12103 10530407252 31070 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.helpers.Namespaces

Uses of Class
org.apache.xml.resolver.helpers.Namespaces

No usage of org.apache.xml.resolver.helpers.Namespaces



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/class-use/PublicId.html100644 0 0 12065 10530407252 30513 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.helpers.PublicId

Uses of Class
org.apache.xml.resolver.helpers.PublicId

No usage of org.apache.xml.resolver.helpers.PublicId



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/package-frame.html100644 0 0 2145 10530407252 27562 0ustar 0 0 xml-commons-resolver API: Package org.apache.xml.resolver.helpers org.apache.xml.resolver.helpers
Classes 
BootstrapResolver
Debug
FileURL
Namespaces
PublicId
xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/package-summary.html100644 0 0 15201 10530407252 30202 0ustar 0 0 xml-commons-resolver API: Package org.apache.xml.resolver.helpers

Package org.apache.xml.resolver.helpers

Apache XML Commons Resolver Helpers package.

See:
          Description

Class Summary
BootstrapResolver A simple bootstrapping resolver.
Debug Static debugging/messaging class for Catalogs.
FileURL Static method for dealing with file: URLs.
Namespaces Static Namespace query methods.
PublicId Static methods for dealing with public identifiers.
 

Package org.apache.xml.resolver.helpers Description

Apache XML Commons Resolver Helpers package.

This package provides a collection of static helper functions used across a number of different classes.



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/package-tree.html100644 0 0 14037 10530407252 27452 0ustar 0 0 xml-commons-resolver API: org.apache.xml.resolver.helpers Class Hierarchy

Hierarchy For Package org.apache.xml.resolver.helpers

Package Hierarchies:
All Packages

Class Hierarchy



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/helpers/package-use.html100644 0 0 16546 10530407252 27316 0ustar 0 0 xml-commons-resolver API: Uses of Package org.apache.xml.resolver.helpers

Uses of Package
org.apache.xml.resolver.helpers

Packages that use org.apache.xml.resolver.helpers
org.apache.xml.resolver Apache XML Commons Resolver package. 
org.apache.xml.resolver.readers Apache XML Commons Resolver Readers package. 
 

Classes in org.apache.xml.resolver.helpers used by org.apache.xml.resolver
BootstrapResolver
          A simple bootstrapping resolver.
Debug
          Static debugging/messaging class for Catalogs.
 

Classes in org.apache.xml.resolver.helpers used by org.apache.xml.resolver.readers
Debug
          Static debugging/messaging class for Catalogs.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/package-frame.html100644 0 0 2515 10530407252 26121 0ustar 0 0 xml-commons-resolver API: Package org.apache.xml.resolver org.apache.xml.resolver
Classes 
Catalog
CatalogEntry
CatalogManager
Resolver
Version
Exceptions 
CatalogException
xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/package-summary.html100644 0 0 17601 10530407252 26546 0ustar 0 0 xml-commons-resolver API: Package org.apache.xml.resolver

Package org.apache.xml.resolver

Apache XML Commons Resolver package.

See:
          Description

Class Summary
Catalog Represents OASIS Open Catalog files.
CatalogEntry Represents a Catalog entry.
CatalogManager CatalogManager provides an interface to the catalog properties.
Resolver An extension to OASIS Open Catalog files, this class supports suffix-based matching and an external RFC2483 resolver.
Version Administrative class to keep track of the version number of xml-commons external sources releases.
 

Exception Summary
CatalogException Signal Catalog exception.
 

Package org.apache.xml.resolver Description

Apache XML Commons Resolver package.

The classes in this package implement the full semantics of OASIS Technical Resolution 9401:1997 (Amendment 2 to TR 9401) catalogs. Also included are a framework of classes designed to read catalog files in a number of formats.

The principal classes in this package are:



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/package-tree.html100644 0 0 13673 10530407252 26015 0ustar 0 0 xml-commons-resolver API: org.apache.xml.resolver Class Hierarchy

Hierarchy For Package org.apache.xml.resolver

Package Hierarchies:
All Packages

Class Hierarchy



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/package-use.html100644 0 0 23327 10530407252 25647 0ustar 0 0 xml-commons-resolver API: Uses of Package org.apache.xml.resolver

Uses of Package
org.apache.xml.resolver

Packages that use org.apache.xml.resolver
org.apache.xml.resolver Apache XML Commons Resolver package. 
org.apache.xml.resolver.readers Apache XML Commons Resolver Readers package. 
org.apache.xml.resolver.tools Apache XML Commons Resolver Tools package. 
 

Classes in org.apache.xml.resolver used by org.apache.xml.resolver
Catalog
          Represents OASIS Open Catalog files.
CatalogEntry
          Represents a Catalog entry.
CatalogException
          Signal Catalog exception.
CatalogManager
          CatalogManager provides an interface to the catalog properties.
Resolver
          An extension to OASIS Open Catalog files, this class supports suffix-based matching and an external RFC2483 resolver.
 

Classes in org.apache.xml.resolver used by org.apache.xml.resolver.readers
Catalog
          Represents OASIS Open Catalog files.
CatalogException
          Signal Catalog exception.
 

Classes in org.apache.xml.resolver used by org.apache.xml.resolver.tools
Catalog
          Represents OASIS Open Catalog files.
CatalogManager
          CatalogManager provides an interface to the catalog properties.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/CatalogReader.html100644 0 0 25713 10530407253 27606 0ustar 0 0 xml-commons-resolver API: Interface CatalogReader

org.apache.xml.resolver.readers
Interface CatalogReader

All Known Implementing Classes:
SAXCatalogReader, TextCatalogReader, DOMCatalogReader

public interface CatalogReader

The CatalogReader interface.

The Catalog class requires that classes implement this interface in order to be used to read catalogs. Examples of CatalogReaders include the TextCatalogReader, the SAXCatalogReader, and the DOMCatalogReader.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog

Method Summary
 void readCatalog(Catalog catalog, java.io.InputStream is)
          Read a catalog from an input stream.
 void readCatalog(Catalog catalog, java.lang.String fileUrl)
          Read a catalog from a file.
 

Method Detail

readCatalog

public void readCatalog(Catalog catalog,
                        java.lang.String fileUrl)
                 throws java.net.MalformedURLException,
                        java.io.IOException,
                        CatalogException
Read a catalog from a file.

This class reads a catalog from a URL.

Parameters:
catalog - The catalog for which this reader is called.
fileUrl - The URL of a document to be read.
Throws:
java.net.MalformedURLException - if the specified URL cannot be turned into a URL object.
java.io.IOException - if the URL cannot be read.
UnknownCatalogFormatException - if the catalog format is not recognized.
UnparseableCatalogException - if the catalog cannot be parsed. (For example, if it is supposed to be XML and isn't well-formed.)

readCatalog

public void readCatalog(Catalog catalog,
                        java.io.InputStream is)
                 throws java.io.IOException,
                        CatalogException
Read a catalog from an input stream.

This class reads a catalog from an input stream.

Parameters:
catalog - The catalog for which this reader is called.
is - The input stream that is to be read.
Throws:
java.io.IOException - if the URL cannot be read.
UnknownCatalogFormatException - if the catalog format is not recognized.
UnparseableCatalogException - if the catalog cannot be parsed. (For example, if it is supposed to be XML and isn't well-formed.)


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/DOMCatalogParser.html100644 0 0 21274 10530407252 30175 0ustar 0 0 xml-commons-resolver API: Interface DOMCatalogParser

org.apache.xml.resolver.readers
Interface DOMCatalogParser


public interface DOMCatalogParser

The DOMCatalogParser interface.

This interface must be implemented in order for a class to participate as a parser for the DOMCatalogReader.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog, DOMCatalogReader

Method Summary
 void parseCatalogEntry(Catalog catalog, org.w3c.dom.Node node)
          Parse a DOM node as a catalog entry.
 

Method Detail

parseCatalogEntry

public void parseCatalogEntry(Catalog catalog,
                              org.w3c.dom.Node node)
Parse a DOM node as a catalog entry.

This method is expected to analyze the specified node and construct appropriate catalog entry(ies) from it.

Parameters:
catalog - The catalog for which this node is being considered.
node - The DOM Node from the catalog.


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/DOMCatalogReader.html100644 0 0 46112 10530407252 30141 0ustar 0 0 xml-commons-resolver API: Class DOMCatalogReader

org.apache.xml.resolver.readers
Class DOMCatalogReader

java.lang.Object
  |
  +--org.apache.xml.resolver.readers.DOMCatalogReader
All Implemented Interfaces:
CatalogReader

public class DOMCatalogReader
extends java.lang.Object
implements CatalogReader

A DOM-based CatalogReader.

This class is used to read XML Catalogs using the DOM. This reader has an advantage over the SAX-based reader that it can analyze the DOM tree rather than simply a series of SAX events. It has the disadvantage that it requires all of the code necessary to build and walk a DOM tree.

Since the choice of CatalogReaders (in the InputStream case) can only be made on the basis of MIME type, the following problem occurs: only one CatalogReader can exist for all XML mime types. In order to get around this problem, the DOMCatalogReader relies on a set of external CatalogParsers to actually build the catalog.

The selection of CatalogParsers is made on the basis of the QName of the root element of the document.

This class requires the Java API for XML Parsing.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog, CatalogReader, SAXCatalogReader, TextCatalogReader, DOMCatalogParser

Field Summary
protected  java.util.Hashtable namespaceMap
          Mapping table from QNames to CatalogParser classes.
 
Constructor Summary
DOMCatalogReader()
          Null constructor; something for subclasses to call.
 
Method Summary
 java.lang.String getCatalogParser(java.lang.String namespaceURI, java.lang.String rootElement)
          Get the name of the parser class for a given catalog type.
 void readCatalog(Catalog catalog, java.io.InputStream is)
          Read a catalog from an input stream.
 void readCatalog(Catalog catalog, java.lang.String fileUrl)
          Read the catalog behind the specified URL.
 void setCatalogParser(java.lang.String namespaceURI, java.lang.String rootElement, java.lang.String parserClass)
          Add a new parser to the reader.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

namespaceMap

protected java.util.Hashtable namespaceMap
Mapping table from QNames to CatalogParser classes.

Each key in this hash table has the form "elementname" or "{namespaceuri}elementname". The former is used if the namespace URI is null.

Constructor Detail

DOMCatalogReader

public DOMCatalogReader()
Null constructor; something for subclasses to call.
Method Detail

setCatalogParser

public void setCatalogParser(java.lang.String namespaceURI,
                             java.lang.String rootElement,
                             java.lang.String parserClass)
Add a new parser to the reader.

This method associates the specified parserClass with the namespaceURI/rootElement names specified.

Parameters:
namespaceURI - The namespace URI. Not the prefix.
rootElement - The name of the root element.
parserClass - The name of the parserClass to instantiate for this kind of catalog.

getCatalogParser

public java.lang.String getCatalogParser(java.lang.String namespaceURI,
                                         java.lang.String rootElement)
Get the name of the parser class for a given catalog type.

This method returns the parserClass associated with the namespaceURI/rootElement names specified.

Parameters:
namespaceURI - The namespace URI. Not the prefix.
rootElement - The name of the root element.
Returns:
The parser class.

readCatalog

public void readCatalog(Catalog catalog,
                        java.io.InputStream is)
                 throws java.io.IOException,
                        CatalogException
Read a catalog from an input stream.

This class reads a catalog from an input stream:

  • Based on the QName of the root element, it determines which parser to instantiate for this catalog.
  • It constructs a DOM Document from the catalog and
  • For each child of the root node, it calls the parser's parseCatalogEntry method. This method is expected to make appropriate calls back into the catalog to add entries for the entries in the catalog. It is free to do this in whatever manner is appropriate (perhaps using just the node passed in, perhaps wandering arbitrarily throughout the tree).
Specified by:
readCatalog in interface CatalogReader
Parameters:
catalog - The catalog for which this reader is called.
is - The input stream that is to be read.
Throws:
java.io.IOException - if the URL cannot be read.
UnknownCatalogFormatException - if the catalog format is not recognized.
UnparseableCatalogException - if the catalog cannot be parsed. (For example, if it is supposed to be XML and isn't well-formed or if the parser class cannot be instantiated.)

readCatalog

public void readCatalog(Catalog catalog,
                        java.lang.String fileUrl)
                 throws java.net.MalformedURLException,
                        java.io.IOException,
                        CatalogException
Read the catalog behind the specified URL.
Specified by:
readCatalog in interface CatalogReader
Parameters:
catalog - The catalog for which we are reading.
fileUrl - The URL of the document that should be read.
Throws:
java.net.MalformedURLException - if the specified URL cannot be turned into a URL object.
java.io.IOException - if the URL cannot be read.
UnknownCatalogFormatException - if the catalog format is not recognized.
UnparseableCatalogException - if the catalog cannot be parsed. (For example, if it is supposed to be XML and isn't well-formed.)
See Also:
readCatalog(Catalog, InputStream)


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 150 10530407253 10246 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/ExtendedXMLCatalogReader.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/ExtendedXMLCatalogReader.h100644 0 0 52615 10530407252 31133 0ustar 0 0 xml-commons-resolver API: Class ExtendedXMLCatalogReader

org.apache.xml.resolver.readers
Class ExtendedXMLCatalogReader

java.lang.Object
  |
  +--org.apache.xml.resolver.readers.SAXCatalogReader
        |
        +--org.apache.xml.resolver.readers.OASISXMLCatalogReader
              |
              +--org.apache.xml.resolver.readers.ExtendedXMLCatalogReader
All Implemented Interfaces:
CatalogReader, org.xml.sax.ContentHandler, org.xml.sax.DocumentHandler, SAXCatalogParser

public class ExtendedXMLCatalogReader
extends OASISXMLCatalogReader

Parse Extended OASIS Entity Resolution Technical Committee XML Catalog files.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog

Field Summary
static java.lang.String extendedNamespaceName
          The namespace name of extended catalog elements
 
Fields inherited from class org.apache.xml.resolver.readers.OASISXMLCatalogReader
baseURIStack, catalog, namespaceName, namespaceStack, overrideStack, tr9401NamespaceName
 
Fields inherited from class org.apache.xml.resolver.readers.SAXCatalogReader
debug, namespaceMap, parserClass, parserFactory
 
Constructor Summary
ExtendedXMLCatalogReader()
           
 
Method Summary
 void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName)
          The SAX endElement method does nothing.
 void startElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes atts)
          The SAX startElement method recognizes elements from the plain catalog format and instantiates CatalogEntry objects for them.
 
Methods inherited from class org.apache.xml.resolver.readers.OASISXMLCatalogReader
characters, checkAttributes, checkAttributes, endDocument, endPrefixMapping, getCatalog, ignorableWhitespace, inExtensionNamespace, processingInstruction, setCatalog, setDocumentLocator, skippedEntity, startDocument, startPrefixMapping
 
Methods inherited from class org.apache.xml.resolver.readers.SAXCatalogReader
endElement, getCatalogParser, getParserClass, getParserFactory, readCatalog, readCatalog, setCatalogParser, setClassLoader, setParserClass, setParserFactory, startElement
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.xml.sax.DocumentHandler
endElement, startElement
 

Field Detail

extendedNamespaceName

public static final java.lang.String extendedNamespaceName
The namespace name of extended catalog elements
Constructor Detail

ExtendedXMLCatalogReader

public ExtendedXMLCatalogReader()
Method Detail

startElement

public void startElement(java.lang.String namespaceURI,
                         java.lang.String localName,
                         java.lang.String qName,
                         org.xml.sax.Attributes atts)
                  throws org.xml.sax.SAXException
The SAX startElement method recognizes elements from the plain catalog format and instantiates CatalogEntry objects for them.
Overrides:
startElement in class OASISXMLCatalogReader
Parameters:
namespaceURI - The namespace name of the element.
localName - The local name of the element.
qName - The QName of the element.
atts - The list of attributes on the element.
See Also:
CatalogEntry

endElement

public void endElement(java.lang.String namespaceURI,
                       java.lang.String localName,
                       java.lang.String qName)
                throws org.xml.sax.SAXException
The SAX endElement method does nothing.
Overrides:
endElement in class OASISXMLCatalogReader


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 145 10530407253 10252 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/OASISXMLCatalogReader.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/OASISXMLCatalogReader.html100644 0 0 111772 10530407252 31006 0ustar 0 0 xml-commons-resolver API: Class OASISXMLCatalogReader

org.apache.xml.resolver.readers
Class OASISXMLCatalogReader

java.lang.Object
  |
  +--org.apache.xml.resolver.readers.SAXCatalogReader
        |
        +--org.apache.xml.resolver.readers.OASISXMLCatalogReader
All Implemented Interfaces:
CatalogReader, org.xml.sax.ContentHandler, org.xml.sax.DocumentHandler, SAXCatalogParser
Direct Known Subclasses:
ExtendedXMLCatalogReader

public class OASISXMLCatalogReader
extends SAXCatalogReader
implements SAXCatalogParser

Parse OASIS Entity Resolution Technical Committee XML Catalog files.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog

Field Summary
protected  java.util.Stack baseURIStack
           
protected  Catalog catalog
          The catalog object needs to be stored by the object so that SAX callbacks can use it.
static java.lang.String namespaceName
          The namespace name of OASIS ERTC catalogs
protected  java.util.Stack namespaceStack
           
protected  java.util.Stack overrideStack
           
static java.lang.String tr9401NamespaceName
          The namespace name of OASIS ERTC TR9401 catalog extension
 
Fields inherited from class org.apache.xml.resolver.readers.SAXCatalogReader
debug, namespaceMap, parserClass, parserFactory
 
Constructor Summary
OASISXMLCatalogReader()
          Default constructor
OASISXMLCatalogReader(javax.xml.parsers.SAXParserFactory parserFactory, Catalog catalog)
          Constructor allowing for providing custom SAX parser factory
 
Method Summary
 void characters(char[] ch, int start, int length)
          The SAX characters method does nothing.
 boolean checkAttributes(org.xml.sax.Attributes atts, java.lang.String attName)
           
 boolean checkAttributes(org.xml.sax.Attributes atts, java.lang.String attName1, java.lang.String attName2)
           
 void endDocument()
          The SAX endDocument method does nothing.
 void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName)
          The SAX endElement
 void endPrefixMapping(java.lang.String prefix)
          The SAX endPrefixMapping method does nothing.
 Catalog getCatalog()
          Get the current catalog.
 void ignorableWhitespace(char[] ch, int start, int length)
          The SAX ignorableWhitespace method does nothing.
protected  boolean inExtensionNamespace()
          Are we in an extension namespace?
 void processingInstruction(java.lang.String target, java.lang.String data)
          The SAX processingInstruction method does nothing.
 void setCatalog(Catalog catalog)
          Set the current catalog.
 void setDocumentLocator(org.xml.sax.Locator locator)
          The SAX setDocumentLocator method does nothing.
 void skippedEntity(java.lang.String name)
          The SAX skippedEntity method does nothing.
 void startDocument()
          The SAX startDocument
 void startElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes atts)
          The SAX startElement method recognizes elements from the plain catalog format and instantiates CatalogEntry objects for them.
 void startPrefixMapping(java.lang.String prefix, java.lang.String uri)
          The SAX startPrefixMapping method does nothing.
 
Methods inherited from class org.apache.xml.resolver.readers.SAXCatalogReader
endElement, getCatalogParser, getParserClass, getParserFactory, readCatalog, readCatalog, setCatalogParser, setClassLoader, setParserClass, setParserFactory, startElement
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.xml.sax.DocumentHandler
endElement, startElement
 

Field Detail

catalog

protected Catalog catalog
The catalog object needs to be stored by the object so that SAX callbacks can use it.

namespaceName

public static final java.lang.String namespaceName
The namespace name of OASIS ERTC catalogs

tr9401NamespaceName

public static final java.lang.String tr9401NamespaceName
The namespace name of OASIS ERTC TR9401 catalog extension

baseURIStack

protected java.util.Stack baseURIStack

overrideStack

protected java.util.Stack overrideStack

namespaceStack

protected java.util.Stack namespaceStack
Constructor Detail

OASISXMLCatalogReader

public OASISXMLCatalogReader()
Default constructor

OASISXMLCatalogReader

public OASISXMLCatalogReader(javax.xml.parsers.SAXParserFactory parserFactory,
                             Catalog catalog)
Constructor allowing for providing custom SAX parser factory
Method Detail

setCatalog

public void setCatalog(Catalog catalog)
Set the current catalog.
Specified by:
setCatalog in interface SAXCatalogParser

getCatalog

public Catalog getCatalog()
Get the current catalog.

inExtensionNamespace

protected boolean inExtensionNamespace()
Are we in an extension namespace?
Returns:
true if the current stack of open namespaces includes an extension namespace.

setDocumentLocator

public void setDocumentLocator(org.xml.sax.Locator locator)
The SAX setDocumentLocator method does nothing.
Specified by:
setDocumentLocator in interface org.xml.sax.ContentHandler
Overrides:
setDocumentLocator in class SAXCatalogReader

startDocument

public void startDocument()
                   throws org.xml.sax.SAXException
The SAX startDocument
Specified by:
startDocument in interface org.xml.sax.ContentHandler
Overrides:
startDocument in class SAXCatalogReader

endDocument

public void endDocument()
                 throws org.xml.sax.SAXException
The SAX endDocument method does nothing.
Specified by:
endDocument in interface org.xml.sax.ContentHandler
Overrides:
endDocument in class SAXCatalogReader

startElement

public void startElement(java.lang.String namespaceURI,
                         java.lang.String localName,
                         java.lang.String qName,
                         org.xml.sax.Attributes atts)
                  throws org.xml.sax.SAXException
The SAX startElement method recognizes elements from the plain catalog format and instantiates CatalogEntry objects for them.
Specified by:
startElement in interface org.xml.sax.ContentHandler
Overrides:
startElement in class SAXCatalogReader
Parameters:
namespaceURI - The namespace name of the element.
localName - The local name of the element.
qName - The QName of the element.
atts - The list of attributes on the element.
See Also:
CatalogEntry

checkAttributes

public boolean checkAttributes(org.xml.sax.Attributes atts,
                               java.lang.String attName)

checkAttributes

public boolean checkAttributes(org.xml.sax.Attributes atts,
                               java.lang.String attName1,
                               java.lang.String attName2)

endElement

public void endElement(java.lang.String namespaceURI,
                       java.lang.String localName,
                       java.lang.String qName)
                throws org.xml.sax.SAXException
The SAX endElement
Specified by:
endElement in interface org.xml.sax.ContentHandler
Overrides:
endElement in class SAXCatalogReader

characters

public void characters(char[] ch,
                       int start,
                       int length)
                throws org.xml.sax.SAXException
The SAX characters method does nothing.
Specified by:
characters in interface org.xml.sax.ContentHandler
Overrides:
characters in class SAXCatalogReader

ignorableWhitespace

public void ignorableWhitespace(char[] ch,
                                int start,
                                int length)
                         throws org.xml.sax.SAXException
The SAX ignorableWhitespace method does nothing.
Specified by:
ignorableWhitespace in interface org.xml.sax.ContentHandler
Overrides:
ignorableWhitespace in class SAXCatalogReader

processingInstruction

public void processingInstruction(java.lang.String target,
                                  java.lang.String data)
                           throws org.xml.sax.SAXException
The SAX processingInstruction method does nothing.
Specified by:
processingInstruction in interface org.xml.sax.ContentHandler
Overrides:
processingInstruction in class SAXCatalogReader

skippedEntity

public void skippedEntity(java.lang.String name)
                   throws org.xml.sax.SAXException
The SAX skippedEntity method does nothing.
Specified by:
skippedEntity in interface org.xml.sax.ContentHandler
Overrides:
skippedEntity in class SAXCatalogReader

startPrefixMapping

public void startPrefixMapping(java.lang.String prefix,
                               java.lang.String uri)
                        throws org.xml.sax.SAXException
The SAX startPrefixMapping method does nothing.
Specified by:
startPrefixMapping in interface org.xml.sax.ContentHandler
Overrides:
startPrefixMapping in class SAXCatalogReader

endPrefixMapping

public void endPrefixMapping(java.lang.String prefix)
                      throws org.xml.sax.SAXException
The SAX endPrefixMapping method does nothing.
Specified by:
endPrefixMapping in interface org.xml.sax.ContentHandler
Overrides:
endPrefixMapping in class SAXCatalogReader


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/SAXCatalogParser.html100644 0 0 23154 10530407252 30210 0ustar 0 0 xml-commons-resolver API: Interface SAXCatalogParser

org.apache.xml.resolver.readers
Interface SAXCatalogParser

All Superinterfaces:
org.xml.sax.ContentHandler, org.xml.sax.DocumentHandler
All Known Implementing Classes:
OASISXMLCatalogReader, XCatalogReader

public interface SAXCatalogParser
extends org.xml.sax.ContentHandler, org.xml.sax.DocumentHandler

The SAXCatalogParser interface.

This interface must be implemented in order for a class to participate as a parser for the SAXCatalogReader.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog, SAXCatalogReader

Method Summary
 void setCatalog(Catalog catalog)
          Set the Catalog for which parsing is being performed.
 
Methods inherited from interface org.xml.sax.ContentHandler
characters, endDocument, endElement, endPrefixMapping, ignorableWhitespace, processingInstruction, setDocumentLocator, skippedEntity, startDocument, startElement, startPrefixMapping
 
Methods inherited from interface org.xml.sax.DocumentHandler
characters, endDocument, endElement, ignorableWhitespace, processingInstruction, setDocumentLocator, startDocument, startElement
 

Method Detail

setCatalog

public void setCatalog(Catalog catalog)
Set the Catalog for which parsing is being performed.


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/SAXCatalogReader.html100644 0 0 111535 10530407252 30177 0ustar 0 0 xml-commons-resolver API: Class SAXCatalogReader

org.apache.xml.resolver.readers
Class SAXCatalogReader

java.lang.Object
  |
  +--org.apache.xml.resolver.readers.SAXCatalogReader
All Implemented Interfaces:
CatalogReader, org.xml.sax.ContentHandler, org.xml.sax.DocumentHandler
Direct Known Subclasses:
OASISXMLCatalogReader, XCatalogReader

public class SAXCatalogReader
extends java.lang.Object
implements CatalogReader, org.xml.sax.ContentHandler, org.xml.sax.DocumentHandler

A SAX-based CatalogReader.

This class is used to read XML Catalogs using the SAX. This reader has an advantage over the DOM-based reader in that it functions on the stream of SAX events. It has the disadvantage that it cannot look around in the tree.

Since the choice of CatalogReaders (in the InputStream case) can only be made on the basis of MIME type, the following problem occurs: only one CatalogReader can exist for all XML mime types. In order to get around this problem, the SAXCatalogReader relies on a set of external CatalogParsers to actually build the catalog.

The selection of CatalogParsers is made on the basis of the QName of the root element of the document.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog, CatalogReader, SAXCatalogReader, TextCatalogReader, DOMCatalogParser

Field Summary
protected  Debug debug
          The debug class to use for this reader.
protected  java.util.Hashtable namespaceMap
          Mapping table from QNames to CatalogParser classes.
protected  java.lang.String parserClass
          The SAX Parser Class
protected  javax.xml.parsers.SAXParserFactory parserFactory
          The SAX Parser Factory
 
Constructor Summary
SAXCatalogReader()
          The constructor
SAXCatalogReader(javax.xml.parsers.SAXParserFactory parserFactory)
          The constructor
SAXCatalogReader(java.lang.String parserClass)
          The constructor
 
Method Summary
 void characters(char[] ch, int start, int length)
          The SAX characters method.
 void endDocument()
          The SAX endDocument method.
 void endElement(java.lang.String name)
          The SAX endElement method.
 void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName)
          The SAX2 endElement method.
 void endPrefixMapping(java.lang.String prefix)
          The SAX endPrefixMapping method.
 java.lang.String getCatalogParser(java.lang.String namespaceURI, java.lang.String rootElement)
          Get the SAXCatalogParser class for the given namespace/root element type.
 java.lang.String getParserClass()
          Get the parser class currently in use.
 javax.xml.parsers.SAXParserFactory getParserFactory()
          Get the parser factory currently in use.
 void ignorableWhitespace(char[] ch, int start, int length)
          The SAX ignorableWhitespace method.
 void processingInstruction(java.lang.String target, java.lang.String data)
          The SAX processingInstruction method.
 void readCatalog(Catalog catalog, java.io.InputStream is)
          Parse an XML Catalog stream.
 void readCatalog(Catalog catalog, java.lang.String fileUrl)
          Parse an XML Catalog file.
 void setCatalogParser(java.lang.String namespaceURI, java.lang.String rootElement, java.lang.String parserClass)
          Set the SAXCatalogParser class for the given namespace/root element type.
 void setClassLoader(java.lang.ClassLoader loader)
          Set the class loader to use when loading class by reflection.
 void setDocumentLocator(org.xml.sax.Locator locator)
          The SAX setDocumentLocator method.
 void setParserClass(java.lang.String parserClass)
          Set the XML SAX Parser Class
 void setParserFactory(javax.xml.parsers.SAXParserFactory parserFactory)
          Set the XML SAX Parser Factory.
 void skippedEntity(java.lang.String name)
          The SAX skippedentity method.
 void startDocument()
          The SAX startDocument method.
 void startElement(java.lang.String name, org.xml.sax.AttributeList atts)
          The SAX startElement method.
 void startElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes atts)
          The SAX2 startElement method.
 void startPrefixMapping(java.lang.String prefix, java.lang.String uri)
          The SAX startPrefixMapping method.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

parserFactory

protected javax.xml.parsers.SAXParserFactory parserFactory
The SAX Parser Factory

parserClass

protected java.lang.String parserClass
The SAX Parser Class

namespaceMap

protected java.util.Hashtable namespaceMap
Mapping table from QNames to CatalogParser classes.

Each key in this hash table has the form "elementname" or "{namespaceuri}elementname". The former is used if the namespace URI is null.


debug

protected Debug debug
The debug class to use for this reader. This is a bit of a hack. Anyway, whenever we read for a catalog, we extract the debug object from the catalog's manager so that we can use it to print messages. In production, we don't really expect any messages so it doesn't really matter. But it's still a bit of a hack.
Constructor Detail

SAXCatalogReader

public SAXCatalogReader()
The constructor

SAXCatalogReader

public SAXCatalogReader(javax.xml.parsers.SAXParserFactory parserFactory)
The constructor

SAXCatalogReader

public SAXCatalogReader(java.lang.String parserClass)
The constructor
Method Detail

setParserFactory

public void setParserFactory(javax.xml.parsers.SAXParserFactory parserFactory)
Set the XML SAX Parser Factory.

setParserClass

public void setParserClass(java.lang.String parserClass)
Set the XML SAX Parser Class

getParserFactory

public javax.xml.parsers.SAXParserFactory getParserFactory()
Get the parser factory currently in use.

getParserClass

public java.lang.String getParserClass()
Get the parser class currently in use.

setClassLoader

public void setClassLoader(java.lang.ClassLoader loader)
Set the class loader to use when loading class by reflection. If not set, the the class loader used to load this class is used.

setCatalogParser

public void setCatalogParser(java.lang.String namespaceURI,
                             java.lang.String rootElement,
                             java.lang.String parserClass)
Set the SAXCatalogParser class for the given namespace/root element type.

getCatalogParser

public java.lang.String getCatalogParser(java.lang.String namespaceURI,
                                         java.lang.String rootElement)
Get the SAXCatalogParser class for the given namespace/root element type.

readCatalog

public void readCatalog(Catalog catalog,
                        java.lang.String fileUrl)
                 throws java.net.MalformedURLException,
                        java.io.IOException,
                        CatalogException
Parse an XML Catalog file.
Specified by:
readCatalog in interface CatalogReader
Parameters:
catalog - The catalog to which this catalog file belongs
fileUrl - The URL or filename of the catalog file to process
Throws:
java.net.MalformedURLException - Improper fileUrl
java.io.IOException - Error reading catalog file

readCatalog

public void readCatalog(Catalog catalog,
                        java.io.InputStream is)
                 throws java.io.IOException,
                        CatalogException
Parse an XML Catalog stream.
Specified by:
readCatalog in interface CatalogReader
Parameters:
catalog - The catalog to which this catalog file belongs
is - The input stream from which the catalog will be read
Throws:
java.net.MalformedURLException - Improper fileUrl
java.io.IOException - Error reading catalog file
CatalogException - A Catalog exception

setDocumentLocator

public void setDocumentLocator(org.xml.sax.Locator locator)
The SAX setDocumentLocator method. Does nothing.
Specified by:
setDocumentLocator in interface org.xml.sax.ContentHandler

startDocument

public void startDocument()
                   throws org.xml.sax.SAXException
The SAX startDocument method. Does nothing.
Specified by:
startDocument in interface org.xml.sax.ContentHandler

endDocument

public void endDocument()
                 throws org.xml.sax.SAXException
The SAX endDocument method. Does nothing.
Specified by:
endDocument in interface org.xml.sax.ContentHandler

startElement

public void startElement(java.lang.String name,
                         org.xml.sax.AttributeList atts)
                  throws org.xml.sax.SAXException
The SAX startElement method.

The catalog parser is selected based on the namespace of the first element encountered in the catalog.

Specified by:
startElement in interface org.xml.sax.DocumentHandler

startElement

public void startElement(java.lang.String namespaceURI,
                         java.lang.String localName,
                         java.lang.String qName,
                         org.xml.sax.Attributes atts)
                  throws org.xml.sax.SAXException
The SAX2 startElement method.

The catalog parser is selected based on the namespace of the first element encountered in the catalog.

Specified by:
startElement in interface org.xml.sax.ContentHandler

endElement

public void endElement(java.lang.String name)
                throws org.xml.sax.SAXException
The SAX endElement method. Does nothing.
Specified by:
endElement in interface org.xml.sax.DocumentHandler

endElement

public void endElement(java.lang.String namespaceURI,
                       java.lang.String localName,
                       java.lang.String qName)
                throws org.xml.sax.SAXException
The SAX2 endElement method. Does nothing.
Specified by:
endElement in interface org.xml.sax.ContentHandler

characters

public void characters(char[] ch,
                       int start,
                       int length)
                throws org.xml.sax.SAXException
The SAX characters method. Does nothing.
Specified by:
characters in interface org.xml.sax.ContentHandler

ignorableWhitespace

public void ignorableWhitespace(char[] ch,
                                int start,
                                int length)
                         throws org.xml.sax.SAXException
The SAX ignorableWhitespace method. Does nothing.
Specified by:
ignorableWhitespace in interface org.xml.sax.ContentHandler

processingInstruction

public void processingInstruction(java.lang.String target,
                                  java.lang.String data)
                           throws org.xml.sax.SAXException
The SAX processingInstruction method. Does nothing.
Specified by:
processingInstruction in interface org.xml.sax.ContentHandler

startPrefixMapping

public void startPrefixMapping(java.lang.String prefix,
                               java.lang.String uri)
                        throws org.xml.sax.SAXException
The SAX startPrefixMapping method. Does nothing.
Specified by:
startPrefixMapping in interface org.xml.sax.ContentHandler

endPrefixMapping

public void endPrefixMapping(java.lang.String prefix)
                      throws org.xml.sax.SAXException
The SAX endPrefixMapping method. Does nothing.
Specified by:
endPrefixMapping in interface org.xml.sax.ContentHandler

skippedEntity

public void skippedEntity(java.lang.String name)
                   throws org.xml.sax.SAXException
The SAX skippedentity method. Does nothing.
Specified by:
skippedEntity in interface org.xml.sax.ContentHandler


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/SAXParserHandler.html100644 0 0 52240 10530407252 30211 0ustar 0 0 xml-commons-resolver API: Class SAXParserHandler

org.apache.xml.resolver.readers
Class SAXParserHandler

java.lang.Object
  |
  +--org.xml.sax.helpers.DefaultHandler
        |
        +--org.apache.xml.resolver.readers.SAXParserHandler
All Implemented Interfaces:
org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler

public class SAXParserHandler
extends org.xml.sax.helpers.DefaultHandler

An entity-resolving DefaultHandler.

This class provides a SAXParser DefaultHandler that performs entity resolution.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM

Constructor Summary
SAXParserHandler()
           
 
Method Summary
 void characters(char[] ch, int start, int length)
           
 void endDocument()
           
 void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName)
           
 void endPrefixMapping(java.lang.String prefix)
           
 void ignorableWhitespace(char[] ch, int start, int length)
           
 void processingInstruction(java.lang.String target, java.lang.String data)
           
 org.xml.sax.InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId)
           
 void setContentHandler(org.xml.sax.ContentHandler ch)
           
 void setDocumentLocator(org.xml.sax.Locator locator)
           
 void setEntityResolver(org.xml.sax.EntityResolver er)
           
 void skippedEntity(java.lang.String name)
           
 void startDocument()
           
 void startElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes atts)
           
 void startPrefixMapping(java.lang.String prefix, java.lang.String uri)
           
 
Methods inherited from class org.xml.sax.helpers.DefaultHandler
error, fatalError, notationDecl, unparsedEntityDecl, warning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SAXParserHandler

public SAXParserHandler()
Method Detail

setEntityResolver

public void setEntityResolver(org.xml.sax.EntityResolver er)

setContentHandler

public void setContentHandler(org.xml.sax.ContentHandler ch)

resolveEntity

public org.xml.sax.InputSource resolveEntity(java.lang.String publicId,
                                             java.lang.String systemId)
                                      throws org.xml.sax.SAXException
Overrides:
resolveEntity in class org.xml.sax.helpers.DefaultHandler

characters

public void characters(char[] ch,
                       int start,
                       int length)
                throws org.xml.sax.SAXException
Overrides:
characters in class org.xml.sax.helpers.DefaultHandler

endDocument

public void endDocument()
                 throws org.xml.sax.SAXException
Overrides:
endDocument in class org.xml.sax.helpers.DefaultHandler

endElement

public void endElement(java.lang.String namespaceURI,
                       java.lang.String localName,
                       java.lang.String qName)
                throws org.xml.sax.SAXException
Overrides:
endElement in class org.xml.sax.helpers.DefaultHandler

endPrefixMapping

public void endPrefixMapping(java.lang.String prefix)
                      throws org.xml.sax.SAXException
Overrides:
endPrefixMapping in class org.xml.sax.helpers.DefaultHandler

ignorableWhitespace

public void ignorableWhitespace(char[] ch,
                                int start,
                                int length)
                         throws org.xml.sax.SAXException
Overrides:
ignorableWhitespace in class org.xml.sax.helpers.DefaultHandler

processingInstruction

public void processingInstruction(java.lang.String target,
                                  java.lang.String data)
                           throws org.xml.sax.SAXException
Overrides:
processingInstruction in class org.xml.sax.helpers.DefaultHandler

setDocumentLocator

public void setDocumentLocator(org.xml.sax.Locator locator)
Overrides:
setDocumentLocator in class org.xml.sax.helpers.DefaultHandler

skippedEntity

public void skippedEntity(java.lang.String name)
                   throws org.xml.sax.SAXException
Overrides:
skippedEntity in class org.xml.sax.helpers.DefaultHandler

startDocument

public void startDocument()
                   throws org.xml.sax.SAXException
Overrides:
startDocument in class org.xml.sax.helpers.DefaultHandler

startElement

public void startElement(java.lang.String namespaceURI,
                         java.lang.String localName,
                         java.lang.String qName,
                         org.xml.sax.Attributes atts)
                  throws org.xml.sax.SAXException
Overrides:
startElement in class org.xml.sax.helpers.DefaultHandler

startPrefixMapping

public void startPrefixMapping(java.lang.String prefix,
                               java.lang.String uri)
                        throws org.xml.sax.SAXException
Overrides:
startPrefixMapping in class org.xml.sax.helpers.DefaultHandler


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/TR9401CatalogReader.html100644 0 0 33523 10530407252 30367 0ustar 0 0 xml-commons-resolver API: Class TR9401CatalogReader

org.apache.xml.resolver.readers
Class TR9401CatalogReader

java.lang.Object
  |
  +--org.apache.xml.resolver.readers.TextCatalogReader
        |
        +--org.apache.xml.resolver.readers.TR9401CatalogReader
All Implemented Interfaces:
CatalogReader

public class TR9401CatalogReader
extends TextCatalogReader

Parses OASIS Open Catalog files.

This class reads OASIS Open Catalog files, returning a stream of tokens.

This code interrogates the following non-standard system properties:

xml.catalog.debug

Sets the debug level. A value of 0 is assumed if the property is not set or is not a number.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog

Fields inherited from class org.apache.xml.resolver.readers.TextCatalogReader
caseSensitive, catfile, stack, tokenStack, top
 
Constructor Summary
TR9401CatalogReader()
           
 
Method Summary
 void readCatalog(Catalog catalog, java.io.InputStream is)
          Start parsing an OASIS TR9401 Open Catalog file.
 
Methods inherited from class org.apache.xml.resolver.readers.TextCatalogReader
finalize, getCaseSensitive, nextChar, nextToken, readCatalog, setCaseSensitive
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TR9401CatalogReader

public TR9401CatalogReader()
Method Detail

readCatalog

public void readCatalog(Catalog catalog,
                        java.io.InputStream is)
                 throws java.net.MalformedURLException,
                        java.io.IOException
Start parsing an OASIS TR9401 Open Catalog file. The file is actually read and parsed as needed by nextEntry.

In a TR9401 Catalog the 'DELEGATE' entry delegates public identifiers. There is no delegate entry for system identifiers or URIs.

Overrides:
readCatalog in class TextCatalogReader
Parameters:
catalog - The Catalog to populate
is - The input stream from which to read the TR9401 Catalog
Throws:
java.net.MalformedURLException - Improper fileUrl
java.io.IOException - Error reading catalog file


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/TextCatalogReader.html100644 0 0 50642 10530407252 30451 0ustar 0 0 xml-commons-resolver API: Class TextCatalogReader

org.apache.xml.resolver.readers
Class TextCatalogReader

java.lang.Object
  |
  +--org.apache.xml.resolver.readers.TextCatalogReader
All Implemented Interfaces:
CatalogReader
Direct Known Subclasses:
TR9401CatalogReader

public class TextCatalogReader
extends java.lang.Object
implements CatalogReader

Parses plain text Catalog files.

This class reads plain text Open Catalog files.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog

Field Summary
protected  boolean caseSensitive
          Are keywords in the catalog case sensitive?
protected  java.io.InputStream catfile
          The input stream used to read the catalog
protected  int[] stack
          Character lookahead stack.
protected  java.util.Stack tokenStack
          Token stack.
protected  int top
          The current position on the lookahead stack
 
Constructor Summary
TextCatalogReader()
          Construct a CatalogReader object.
 
Method Summary
protected  void finalize()
          The destructor.
 boolean getCaseSensitive()
           
protected  int nextChar()
          Return the next logical character from the input stream.
protected  java.lang.String nextToken()
          Return the next token in the catalog file.
 void readCatalog(Catalog catalog, java.io.InputStream is)
          Read a catalog from an input stream.
 void readCatalog(Catalog catalog, java.lang.String fileUrl)
          Start parsing a text catalog file.
 void setCaseSensitive(boolean isCaseSensitive)
           
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

catfile

protected java.io.InputStream catfile
The input stream used to read the catalog

stack

protected int[] stack
Character lookahead stack. Reading a catalog sometimes requires up to two characters of lookahead.

tokenStack

protected java.util.Stack tokenStack
Token stack. Recognizing an unexpected catalog entry requires the ability to "push back" a token.

top

protected int top
The current position on the lookahead stack

caseSensitive

protected boolean caseSensitive
Are keywords in the catalog case sensitive?
Constructor Detail

TextCatalogReader

public TextCatalogReader()
Construct a CatalogReader object.
Method Detail

setCaseSensitive

public void setCaseSensitive(boolean isCaseSensitive)

getCaseSensitive

public boolean getCaseSensitive()

readCatalog

public void readCatalog(Catalog catalog,
                        java.lang.String fileUrl)
                 throws java.net.MalformedURLException,
                        java.io.IOException
Start parsing a text catalog file. The file is actually read and parsed as needed by nextEntry.

Specified by:
readCatalog in interface CatalogReader
Parameters:
fileUrl - The URL or filename of the catalog file to process
Throws:
java.net.MalformedURLException - Improper fileUrl
java.io.IOException - Error reading catalog file

readCatalog

public void readCatalog(Catalog catalog,
                        java.io.InputStream is)
                 throws java.net.MalformedURLException,
                        java.io.IOException
Description copied from interface: CatalogReader
Read a catalog from an input stream.

This class reads a catalog from an input stream.

Specified by:
readCatalog in interface CatalogReader
Following copied from interface: org.apache.xml.resolver.readers.CatalogReader
Parameters:
catalog - The catalog for which this reader is called.
is - The input stream that is to be read.
Throws:
java.io.IOException - if the URL cannot be read.
UnknownCatalogFormatException - if the catalog format is not recognized.
UnparseableCatalogException - if the catalog cannot be parsed. (For example, if it is supposed to be XML and isn't well-formed.)

finalize

protected void finalize()
The destructor.

Makes sure the catalog file is closed.

Overrides:
finalize in class java.lang.Object

nextToken

protected java.lang.String nextToken()
                              throws java.io.IOException,
                                     CatalogException
Return the next token in the catalog file.

FYI: This code does not throw any sort of exception for a file that contains an n

Returns:
The Catalog file token from the input stream.
Throws:
java.io.IOException - If an error occurs reading from the stream.

nextChar

protected int nextChar()
                throws java.io.IOException
Return the next logical character from the input stream.
Returns:
The next (logical) character from the input stream. The character may be buffered from a previous lookahead.
Throws:
java.io.IOException - If an error occurs reading from the stream.


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/XCatalogReader.html100644 0 0 76306 10530407252 27741 0ustar 0 0 xml-commons-resolver API: Class XCatalogReader

org.apache.xml.resolver.readers
Class XCatalogReader

java.lang.Object
  |
  +--org.apache.xml.resolver.readers.SAXCatalogReader
        |
        +--org.apache.xml.resolver.readers.XCatalogReader
All Implemented Interfaces:
CatalogReader, org.xml.sax.ContentHandler, org.xml.sax.DocumentHandler, SAXCatalogParser

public class XCatalogReader
extends SAXCatalogReader
implements SAXCatalogParser

Parse "XCatalog" XML Catalog files, this is the XML Catalog format developed by John Cowan and supported by Apache.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog

Field Summary
protected  Catalog catalog
          The catalog object needs to be stored by the object so that SAX callbacks can use it.
 
Fields inherited from class org.apache.xml.resolver.readers.SAXCatalogReader
debug, namespaceMap, parserClass, parserFactory
 
Constructor Summary
XCatalogReader()
          Default constructor
XCatalogReader(javax.xml.parsers.SAXParserFactory parserFactory, Catalog catalog)
          Constructor allowing for providing custom SAX parser factory
 
Method Summary
 void characters(char[] ch, int start, int length)
          The SAX characters method does nothing.
 void endDocument()
          The SAX endDocument method does nothing.
 void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName)
          The SAX endElement method does nothing.
 void endPrefixMapping(java.lang.String prefix)
          The SAX endPrefixMapping method does nothing.
 Catalog getCatalog()
          Get the current catalog.
 void ignorableWhitespace(char[] ch, int start, int length)
          The SAX ignorableWhitespace method does nothing.
 void processingInstruction(java.lang.String target, java.lang.String data)
          The SAX processingInstruction method does nothing.
 void setCatalog(Catalog catalog)
          Set the current catalog.
 void setDocumentLocator(org.xml.sax.Locator locator)
          The SAX setDocumentLocator method does nothing.
 void skippedEntity(java.lang.String name)
          The SAX skippedEntity method does nothing.
 void startDocument()
          The SAX startDocument method does nothing.
 void startElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes atts)
          The SAX startElement method recognizes elements from the plain catalog format and instantiates CatalogEntry objects for them.
 void startPrefixMapping(java.lang.String prefix, java.lang.String uri)
          The SAX startPrefixMapping method does nothing.
 
Methods inherited from class org.apache.xml.resolver.readers.SAXCatalogReader
endElement, getCatalogParser, getParserClass, getParserFactory, readCatalog, readCatalog, setCatalogParser, setClassLoader, setParserClass, setParserFactory, startElement
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.xml.sax.DocumentHandler
endElement, startElement
 

Field Detail

catalog

protected Catalog catalog
The catalog object needs to be stored by the object so that SAX callbacks can use it.
Constructor Detail

XCatalogReader

public XCatalogReader()
Default constructor

XCatalogReader

public XCatalogReader(javax.xml.parsers.SAXParserFactory parserFactory,
                      Catalog catalog)
Constructor allowing for providing custom SAX parser factory
Method Detail

setCatalog

public void setCatalog(Catalog catalog)
Set the current catalog.
Specified by:
setCatalog in interface SAXCatalogParser

getCatalog

public Catalog getCatalog()
Get the current catalog.

setDocumentLocator

public void setDocumentLocator(org.xml.sax.Locator locator)
The SAX setDocumentLocator method does nothing.
Specified by:
setDocumentLocator in interface org.xml.sax.ContentHandler
Overrides:
setDocumentLocator in class SAXCatalogReader

startDocument

public void startDocument()
                   throws org.xml.sax.SAXException
The SAX startDocument method does nothing.
Specified by:
startDocument in interface org.xml.sax.ContentHandler
Overrides:
startDocument in class SAXCatalogReader

endDocument

public void endDocument()
                 throws org.xml.sax.SAXException
The SAX endDocument method does nothing.
Specified by:
endDocument in interface org.xml.sax.ContentHandler
Overrides:
endDocument in class SAXCatalogReader

startElement

public void startElement(java.lang.String namespaceURI,
                         java.lang.String localName,
                         java.lang.String qName,
                         org.xml.sax.Attributes atts)
                  throws org.xml.sax.SAXException
The SAX startElement method recognizes elements from the plain catalog format and instantiates CatalogEntry objects for them.
Specified by:
startElement in interface org.xml.sax.ContentHandler
Overrides:
startElement in class SAXCatalogReader
Parameters:
namespaceURI - The namespace name of the element.
localName - The local name of the element.
qName - The QName of the element.
atts - The list of attributes on the element.
See Also:
CatalogEntry

endElement

public void endElement(java.lang.String namespaceURI,
                       java.lang.String localName,
                       java.lang.String qName)
                throws org.xml.sax.SAXException
The SAX endElement method does nothing.
Specified by:
endElement in interface org.xml.sax.ContentHandler
Overrides:
endElement in class SAXCatalogReader

characters

public void characters(char[] ch,
                       int start,
                       int length)
                throws org.xml.sax.SAXException
The SAX characters method does nothing.
Specified by:
characters in interface org.xml.sax.ContentHandler
Overrides:
characters in class SAXCatalogReader

ignorableWhitespace

public void ignorableWhitespace(char[] ch,
                                int start,
                                int length)
                         throws org.xml.sax.SAXException
The SAX ignorableWhitespace method does nothing.
Specified by:
ignorableWhitespace in interface org.xml.sax.ContentHandler
Overrides:
ignorableWhitespace in class SAXCatalogReader

processingInstruction

public void processingInstruction(java.lang.String target,
                                  java.lang.String data)
                           throws org.xml.sax.SAXException
The SAX processingInstruction method does nothing.
Specified by:
processingInstruction in interface org.xml.sax.ContentHandler
Overrides:
processingInstruction in class SAXCatalogReader

skippedEntity

public void skippedEntity(java.lang.String name)
                   throws org.xml.sax.SAXException
The SAX skippedEntity method does nothing.
Specified by:
skippedEntity in interface org.xml.sax.ContentHandler
Overrides:
skippedEntity in class SAXCatalogReader

startPrefixMapping

public void startPrefixMapping(java.lang.String prefix,
                               java.lang.String uri)
                        throws org.xml.sax.SAXException
The SAX startPrefixMapping method does nothing.
Specified by:
startPrefixMapping in interface org.xml.sax.ContentHandler
Overrides:
startPrefixMapping in class SAXCatalogReader

endPrefixMapping

public void endPrefixMapping(java.lang.String prefix)
                      throws org.xml.sax.SAXException
The SAX endPrefixMapping method does nothing.
Specified by:
endPrefixMapping in interface org.xml.sax.ContentHandler
Overrides:
endPrefixMapping in class SAXCatalogReader


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 147 10530407253 10254 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/CatalogReader.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/CatalogReader.ht100644 0 0 25551 10530407252 31153 0ustar 0 0 xml-commons-resolver API: Uses of Interface org.apache.xml.resolver.readers.CatalogReader

Uses of Interface
org.apache.xml.resolver.readers.CatalogReader

Packages that use CatalogReader
org.apache.xml.resolver Apache XML Commons Resolver package. 
org.apache.xml.resolver.readers Apache XML Commons Resolver Readers package. 
 

Uses of CatalogReader in org.apache.xml.resolver
 

Methods in org.apache.xml.resolver with parameters of type CatalogReader
 void Catalog.addReader(java.lang.String mimeType, CatalogReader reader)
          Add a new CatalogReader to the Catalog.
 

Uses of CatalogReader in org.apache.xml.resolver.readers
 

Classes in org.apache.xml.resolver.readers that implement CatalogReader
 class DOMCatalogReader
          A DOM-based CatalogReader.
 class ExtendedXMLCatalogReader
          Parse Extended OASIS Entity Resolution Technical Committee XML Catalog files.
 class OASISXMLCatalogReader
          Parse OASIS Entity Resolution Technical Committee XML Catalog files.
 class SAXCatalogReader
          A SAX-based CatalogReader.
 class TextCatalogReader
          Parses plain text Catalog files.
 class TR9401CatalogReader
          Parses OASIS Open Catalog files.
 class XCatalogReader
          Parse "XCatalog" XML Catalog files, this is the XML Catalog format developed by John Cowan and supported by Apache.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 152 10530407253 10250 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/DOMCatalogParser.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/DOMCatalogParser100644 0 0 12165 10530407252 31130 0ustar 0 0 xml-commons-resolver API: Uses of Interface org.apache.xml.resolver.readers.DOMCatalogParser

Uses of Interface
org.apache.xml.resolver.readers.DOMCatalogParser

No usage of org.apache.xml.resolver.readers.DOMCatalogParser



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 152 10530407253 10250 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/DOMCatalogReader.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/DOMCatalogReader100644 0 0 12155 10530407252 31075 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.readers.DOMCatalogReader

Uses of Class
org.apache.xml.resolver.readers.DOMCatalogReader

No usage of org.apache.xml.resolver.readers.DOMCatalogReader



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 162 10530407253 10251 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/ExtendedXMLCatalogReader.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/ExtendedXMLCatal100644 0 0 12245 10530407252 31126 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.readers.ExtendedXMLCatalogReader

Uses of Class
org.apache.xml.resolver.readers.ExtendedXMLCatalogReader

No usage of org.apache.xml.resolver.readers.ExtendedXMLCatalogReader



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 157 10530407253 10255 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/OASISXMLCatalogReader.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/OASISXMLCatalogR100644 0 0 15700 10530407252 30713 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.readers.OASISXMLCatalogReader

Uses of Class
org.apache.xml.resolver.readers.OASISXMLCatalogReader

Packages that use OASISXMLCatalogReader
org.apache.xml.resolver.readers Apache XML Commons Resolver Readers package. 
 

Uses of OASISXMLCatalogReader in org.apache.xml.resolver.readers
 

Subclasses of OASISXMLCatalogReader in org.apache.xml.resolver.readers
 class ExtendedXMLCatalogReader
          Parse Extended OASIS Entity Resolution Technical Committee XML Catalog files.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 152 10530407253 10250 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/SAXCatalogParser.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/SAXCatalogParser100644 0 0 17425 10530407252 31150 0ustar 0 0 xml-commons-resolver API: Uses of Interface org.apache.xml.resolver.readers.SAXCatalogParser

Uses of Interface
org.apache.xml.resolver.readers.SAXCatalogParser

Packages that use SAXCatalogParser
org.apache.xml.resolver.readers Apache XML Commons Resolver Readers package. 
 

Uses of SAXCatalogParser in org.apache.xml.resolver.readers
 

Classes in org.apache.xml.resolver.readers that implement SAXCatalogParser
 class ExtendedXMLCatalogReader
          Parse Extended OASIS Entity Resolution Technical Committee XML Catalog files.
 class OASISXMLCatalogReader
          Parse OASIS Entity Resolution Technical Committee XML Catalog files.
 class XCatalogReader
          Parse "XCatalog" XML Catalog files, this is the XML Catalog format developed by John Cowan and supported by Apache.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 152 10530407253 10250 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/SAXCatalogReader.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/SAXCatalogReader100644 0 0 17404 10530407252 31113 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.readers.SAXCatalogReader

Uses of Class
org.apache.xml.resolver.readers.SAXCatalogReader

Packages that use SAXCatalogReader
org.apache.xml.resolver.readers Apache XML Commons Resolver Readers package. 
 

Uses of SAXCatalogReader in org.apache.xml.resolver.readers
 

Subclasses of SAXCatalogReader in org.apache.xml.resolver.readers
 class ExtendedXMLCatalogReader
          Parse Extended OASIS Entity Resolution Technical Committee XML Catalog files.
 class OASISXMLCatalogReader
          Parse OASIS Entity Resolution Technical Committee XML Catalog files.
 class XCatalogReader
          Parse "XCatalog" XML Catalog files, this is the XML Catalog format developed by John Cowan and supported by Apache.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 152 10530407253 10250 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/SAXParserHandler.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/SAXParserHandler100644 0 0 12155 10530407252 31146 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.readers.SAXParserHandler

Uses of Class
org.apache.xml.resolver.readers.SAXParserHandler

No usage of org.apache.xml.resolver.readers.SAXParserHandler



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 155 10530407253 10253 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/TR9401CatalogReader.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/TR9401CatalogRea100644 0 0 12202 10530407252 30617 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.readers.TR9401CatalogReader

Uses of Class
org.apache.xml.resolver.readers.TR9401CatalogReader

No usage of org.apache.xml.resolver.readers.TR9401CatalogReader



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 153 10530407253 10251 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/TextCatalogReader.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/TextCatalogReade100644 0 0 15527 10530407252 31226 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.readers.TextCatalogReader

Uses of Class
org.apache.xml.resolver.readers.TextCatalogReader

Packages that use TextCatalogReader
org.apache.xml.resolver.readers Apache XML Commons Resolver Readers package. 
 

Uses of TextCatalogReader in org.apache.xml.resolver.readers
 

Subclasses of TextCatalogReader in org.apache.xml.resolver.readers
 class TR9401CatalogReader
          Parses OASIS Open Catalog files.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 150 10530407253 10246 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/XCatalogReader.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/class-use/XCatalogReader.h100644 0 0 12137 10530407252 31113 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.readers.XCatalogReader

Uses of Class
org.apache.xml.resolver.readers.XCatalogReader

No usage of org.apache.xml.resolver.readers.XCatalogReader



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/package-frame.html100644 0 0 3550 10530407252 27546 0ustar 0 0 xml-commons-resolver API: Package org.apache.xml.resolver.readers org.apache.xml.resolver.readers
Interfaces 
CatalogReader
DOMCatalogParser
SAXCatalogParser
Classes 
DOMCatalogReader
ExtendedXMLCatalogReader
OASISXMLCatalogReader
SAXCatalogReader
SAXParserHandler
TextCatalogReader
TR9401CatalogReader
XCatalogReader
xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/package-summary.html100644 0 0 20150 10530407252 30164 0ustar 0 0 xml-commons-resolver API: Package org.apache.xml.resolver.readers

Package org.apache.xml.resolver.readers

Apache XML Commons Resolver Readers package.

See:
          Description

Interface Summary
CatalogReader The CatalogReader interface.
DOMCatalogParser The DOMCatalogParser interface.
SAXCatalogParser The SAXCatalogParser interface.
 

Class Summary
DOMCatalogReader A DOM-based CatalogReader.
ExtendedXMLCatalogReader Parse Extended OASIS Entity Resolution Technical Committee XML Catalog files.
OASISXMLCatalogReader Parse OASIS Entity Resolution Technical Committee XML Catalog files.
SAXCatalogReader A SAX-based CatalogReader.
SAXParserHandler An entity-resolving DefaultHandler.
TextCatalogReader Parses plain text Catalog files.
TR9401CatalogReader Parses OASIS Open Catalog files.
XCatalogReader Parse "XCatalog" XML Catalog files, this is the XML Catalog format developed by John Cowan and supported by Apache.
 

Package org.apache.xml.resolver.readers Description

Apache XML Commons Resolver Readers package.

This package provides the set of classes that read catalog files and extract catalog entries from them.



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/package-tree.html100644 0 0 20651 10530407252 27434 0ustar 0 0 xml-commons-resolver API: org.apache.xml.resolver.readers Class Hierarchy

Hierarchy For Package org.apache.xml.resolver.readers

Package Hierarchies:
All Packages

Class Hierarchy

Interface Hierarchy



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/readers/package-use.html100644 0 0 20520 10530407252 27264 0ustar 0 0 xml-commons-resolver API: Uses of Package org.apache.xml.resolver.readers

Uses of Package
org.apache.xml.resolver.readers

Packages that use org.apache.xml.resolver.readers
org.apache.xml.resolver Apache XML Commons Resolver package. 
org.apache.xml.resolver.readers Apache XML Commons Resolver Readers package. 
 

Classes in org.apache.xml.resolver.readers used by org.apache.xml.resolver
CatalogReader
          The CatalogReader interface.
 

Classes in org.apache.xml.resolver.readers used by org.apache.xml.resolver.readers
CatalogReader
          The CatalogReader interface.
OASISXMLCatalogReader
          Parse OASIS Entity Resolution Technical Committee XML Catalog files.
SAXCatalogParser
          The SAXCatalogParser interface.
SAXCatalogReader
          A SAX-based CatalogReader.
TextCatalogReader
          Parses plain text Catalog files.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/CatalogResolver.html100644 0 0 42305 10530407252 27713 0ustar 0 0 xml-commons-resolver API: Class CatalogResolver

org.apache.xml.resolver.tools
Class CatalogResolver

java.lang.Object
  |
  +--org.apache.xml.resolver.tools.CatalogResolver
All Implemented Interfaces:
org.xml.sax.EntityResolver, javax.xml.transform.URIResolver

public class CatalogResolver
extends java.lang.Object
implements org.xml.sax.EntityResolver, javax.xml.transform.URIResolver

A SAX EntityResolver/JAXP URIResolver that uses catalogs.

This class implements both a SAX EntityResolver and a JAXP URIResolver.

This resolver understands OASIS TR9401 catalogs, XCatalogs, and the current working draft of the OASIS Entity Resolution Technical Committee specification.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
Catalog, EntityResolver, URIResolver

Field Summary
 boolean namespaceAware
          Make the parser Namespace aware?
 boolean validating
          Make the parser validating?
 
Constructor Summary
CatalogResolver()
          Constructor
CatalogResolver(boolean privateCatalog)
          Constructor
CatalogResolver(CatalogManager manager)
          Constructor
 
Method Summary
 Catalog getCatalog()
          Return the underlying catalog
 java.lang.String getResolvedEntity(java.lang.String publicId, java.lang.String systemId)
          Implements the guts of the resolveEntity method for the SAX interface.
 javax.xml.transform.Source resolve(java.lang.String href, java.lang.String base)
          JAXP URIResolver API
 org.xml.sax.InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId)
          Implements the resolveEntity method for the SAX interface.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

namespaceAware

public boolean namespaceAware
Make the parser Namespace aware?

validating

public boolean validating
Make the parser validating?
Constructor Detail

CatalogResolver

public CatalogResolver()
Constructor

CatalogResolver

public CatalogResolver(boolean privateCatalog)
Constructor

CatalogResolver

public CatalogResolver(CatalogManager manager)
Constructor
Method Detail

getCatalog

public Catalog getCatalog()
Return the underlying catalog

getResolvedEntity

public java.lang.String getResolvedEntity(java.lang.String publicId,
                                          java.lang.String systemId)
Implements the guts of the resolveEntity method for the SAX interface.

Presented with an optional public identifier and a system identifier, this function attempts to locate a mapping in the catalogs.

If such a mapping is found, it is returned. If no mapping is found, null is returned.

Parameters:
publicId - The public identifier for the entity in question. This may be null.
systemId - The system identifier for the entity in question. XML requires a system identifier on all external entities, so this value is always specified.
Returns:
The resolved identifier (a URI reference).

resolveEntity

public org.xml.sax.InputSource resolveEntity(java.lang.String publicId,
                                             java.lang.String systemId)
Implements the resolveEntity method for the SAX interface.

Presented with an optional public identifier and a system identifier, this function attempts to locate a mapping in the catalogs.

If such a mapping is found, the resolver attempts to open the mapped value as an InputSource and return it. Exceptions are ignored and null is returned if the mapped value cannot be opened as an input source.

If no mapping is found (or an error occurs attempting to open the mapped value as an input source), null is returned and the system will use the specified system identifier as if no entityResolver was specified.

Specified by:
resolveEntity in interface org.xml.sax.EntityResolver
Parameters:
publicId - The public identifier for the entity in question. This may be null.
systemId - The system identifier for the entity in question. XML requires a system identifier on all external entities, so this value is always specified.
Returns:
An InputSource for the mapped identifier, or null.

resolve

public javax.xml.transform.Source resolve(java.lang.String href,
                                          java.lang.String base)
                                   throws javax.xml.transform.TransformerException
JAXP URIResolver API
Specified by:
resolve in interface javax.xml.transform.URIResolver


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/ResolvingParser.html100644 0 0 76414 10530407252 27754 0ustar 0 0 xml-commons-resolver API: Class ResolvingParser

org.apache.xml.resolver.tools
Class ResolvingParser

java.lang.Object
  |
  +--org.apache.xml.resolver.tools.ResolvingParser
All Implemented Interfaces:
org.xml.sax.DocumentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.Parser

Deprecated. This interface has been replaced by the ResolvingXMLReader for SAX2.

public class ResolvingParser
extends java.lang.Object
implements org.xml.sax.Parser, org.xml.sax.DTDHandler, org.xml.sax.DocumentHandler, org.xml.sax.EntityResolver

A SAX Parser that performs catalog-based entity resolution.

This class implements a SAX Parser that performs entity resolution using the CatalogResolver. The actual, underlying parser is obtained from a SAXParserFactory.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
CatalogResolver, Parser

Field Summary
static boolean namespaceAware
          Deprecated. Make the parser Namespace aware?
static boolean suppressExplanation
          Deprecated. Suppress explanatory message?
static boolean validating
          Deprecated. Make the parser validating?
 
Constructor Summary
ResolvingParser()
          Deprecated. Constructor.
ResolvingParser(CatalogManager manager)
          Deprecated. Constructor.
 
Method Summary
 void characters(char[] ch, int start, int length)
          Deprecated. SAX DocumentHandler API.
 void endDocument()
          Deprecated. SAX DocumentHandler API.
 void endElement(java.lang.String name)
          Deprecated. SAX DocumentHandler API.
 Catalog getCatalog()
          Deprecated. Return the Catalog being used.
 void ignorableWhitespace(char[] ch, int start, int length)
          Deprecated. SAX DocumentHandler API.
 void notationDecl(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
          Deprecated. SAX DTDHandler API.
 void parse(org.xml.sax.InputSource input)
          Deprecated. SAX Parser API.
 void parse(java.lang.String systemId)
          Deprecated. SAX Parser API.
 void processingInstruction(java.lang.String target, java.lang.String pidata)
          Deprecated. SAX DocumentHandler API.
 org.xml.sax.InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId)
          Deprecated. Implements the resolveEntity method for the SAX interface, using an underlying CatalogResolver to do the real work.
 void setDocumentHandler(org.xml.sax.DocumentHandler handler)
          Deprecated. SAX Parser API.
 void setDocumentLocator(org.xml.sax.Locator locator)
          Deprecated. SAX DocumentHandler API.
 void setDTDHandler(org.xml.sax.DTDHandler handler)
          Deprecated. SAX Parser API.
 void setEntityResolver(org.xml.sax.EntityResolver resolver)
          Deprecated. SAX Parser API.
 void setErrorHandler(org.xml.sax.ErrorHandler handler)
          Deprecated. SAX Parser API.
 void setLocale(java.util.Locale locale)
          Deprecated. SAX Parser API.
 void startDocument()
          Deprecated. SAX DocumentHandler API.
 void startElement(java.lang.String name, org.xml.sax.AttributeList atts)
          Deprecated. SAX DocumentHandler API.
 void unparsedEntityDecl(java.lang.String name, java.lang.String publicId, java.lang.String systemId, java.lang.String notationName)
          Deprecated. SAX DTDHandler API.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

namespaceAware

public static boolean namespaceAware
Deprecated. 
Make the parser Namespace aware?

validating

public static boolean validating
Deprecated. 
Make the parser validating?

suppressExplanation

public static boolean suppressExplanation
Deprecated. 
Suppress explanatory message?
See Also:
parse(InputSource)
Constructor Detail

ResolvingParser

public ResolvingParser()
Deprecated. 
Constructor.

ResolvingParser

public ResolvingParser(CatalogManager manager)
Deprecated. 
Constructor.
Method Detail

getCatalog

public Catalog getCatalog()
Deprecated. 
Return the Catalog being used.

parse

public void parse(org.xml.sax.InputSource input)
           throws java.io.IOException,
                  org.xml.sax.SAXException
Deprecated. 
SAX Parser API.

Note that the JAXP 1.1ea2 parser crashes with an InternalError if it encounters a system identifier that appears to be a relative URI that begins with a slash. For example, the declaration:

 <!DOCTYPE book SYSTEM "/path/to/dtd/on/my/system/docbookx.dtd">
 

would cause such an error. As a convenience, this method catches that error and prints an explanation. (Unfortunately, it's not possible to identify the particular system identifier that causes the problem.)

The underlying error is forwarded after printing the explanatory message. The message is only every printed once and if suppressExplanation is set to false before parsing, it will never be printed.

Specified by:
parse in interface org.xml.sax.Parser

parse

public void parse(java.lang.String systemId)
           throws java.io.IOException,
                  org.xml.sax.SAXException
Deprecated. 
SAX Parser API.
Specified by:
parse in interface org.xml.sax.Parser
See Also:
parse(InputSource)

setDocumentHandler

public void setDocumentHandler(org.xml.sax.DocumentHandler handler)
Deprecated. 
SAX Parser API.
Specified by:
setDocumentHandler in interface org.xml.sax.Parser

setDTDHandler

public void setDTDHandler(org.xml.sax.DTDHandler handler)
Deprecated. 
SAX Parser API.
Specified by:
setDTDHandler in interface org.xml.sax.Parser

setEntityResolver

public void setEntityResolver(org.xml.sax.EntityResolver resolver)
Deprecated. 
SAX Parser API.

The purpose of this class is to implement an entity resolver. Attempting to set a different one is pointless (and ignored).

Specified by:
setEntityResolver in interface org.xml.sax.Parser

setErrorHandler

public void setErrorHandler(org.xml.sax.ErrorHandler handler)
Deprecated. 
SAX Parser API.
Specified by:
setErrorHandler in interface org.xml.sax.Parser

setLocale

public void setLocale(java.util.Locale locale)
               throws org.xml.sax.SAXException
Deprecated. 
SAX Parser API.
Specified by:
setLocale in interface org.xml.sax.Parser

characters

public void characters(char[] ch,
                       int start,
                       int length)
                throws org.xml.sax.SAXException
Deprecated. 
SAX DocumentHandler API.
Specified by:
characters in interface org.xml.sax.DocumentHandler

endDocument

public void endDocument()
                 throws org.xml.sax.SAXException
Deprecated. 
SAX DocumentHandler API.
Specified by:
endDocument in interface org.xml.sax.DocumentHandler

endElement

public void endElement(java.lang.String name)
                throws org.xml.sax.SAXException
Deprecated. 
SAX DocumentHandler API.
Specified by:
endElement in interface org.xml.sax.DocumentHandler

ignorableWhitespace

public void ignorableWhitespace(char[] ch,
                                int start,
                                int length)
                         throws org.xml.sax.SAXException
Deprecated. 
SAX DocumentHandler API.
Specified by:
ignorableWhitespace in interface org.xml.sax.DocumentHandler

processingInstruction

public void processingInstruction(java.lang.String target,
                                  java.lang.String pidata)
                           throws org.xml.sax.SAXException
Deprecated. 
SAX DocumentHandler API.
Specified by:
processingInstruction in interface org.xml.sax.DocumentHandler

setDocumentLocator

public void setDocumentLocator(org.xml.sax.Locator locator)
Deprecated. 
SAX DocumentHandler API.
Specified by:
setDocumentLocator in interface org.xml.sax.DocumentHandler

startDocument

public void startDocument()
                   throws org.xml.sax.SAXException
Deprecated. 
SAX DocumentHandler API.
Specified by:
startDocument in interface org.xml.sax.DocumentHandler

startElement

public void startElement(java.lang.String name,
                         org.xml.sax.AttributeList atts)
                  throws org.xml.sax.SAXException
Deprecated. 
SAX DocumentHandler API.
Specified by:
startElement in interface org.xml.sax.DocumentHandler

notationDecl

public void notationDecl(java.lang.String name,
                         java.lang.String publicId,
                         java.lang.String systemId)
                  throws org.xml.sax.SAXException
Deprecated. 
SAX DTDHandler API.
Specified by:
notationDecl in interface org.xml.sax.DTDHandler

unparsedEntityDecl

public void unparsedEntityDecl(java.lang.String name,
                               java.lang.String publicId,
                               java.lang.String systemId,
                               java.lang.String notationName)
                        throws org.xml.sax.SAXException
Deprecated. 
SAX DTDHandler API.
Specified by:
unparsedEntityDecl in interface org.xml.sax.DTDHandler

resolveEntity

public org.xml.sax.InputSource resolveEntity(java.lang.String publicId,
                                             java.lang.String systemId)
Deprecated. 
Implements the resolveEntity method for the SAX interface, using an underlying CatalogResolver to do the real work.
Specified by:
resolveEntity in interface org.xml.sax.EntityResolver


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/ResolvingXMLFilter.html100644 0 0 56717 10530407252 30332 0ustar 0 0 xml-commons-resolver API: Class ResolvingXMLFilter

org.apache.xml.resolver.tools
Class ResolvingXMLFilter

java.lang.Object
  |
  +--org.xml.sax.helpers.XMLFilterImpl
        |
        +--org.apache.xml.resolver.tools.ResolvingXMLFilter
All Implemented Interfaces:
org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler, org.xml.sax.XMLFilter, org.xml.sax.XMLReader
Direct Known Subclasses:
ResolvingXMLReader

public class ResolvingXMLFilter
extends org.xml.sax.helpers.XMLFilterImpl

A SAX XMLFilter that performs catalog-based entity resolution.

This class implements a SAX XMLFilter that performs entity resolution using the CatalogResolver. The actual, underlying parser is obtained from a SAXParserFactory.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
CatalogResolver, XMLFilter

Field Summary
static boolean suppressExplanation
          Suppress explanatory message?
 
Constructor Summary
ResolvingXMLFilter()
          Construct an empty XML Filter with no parent.
ResolvingXMLFilter(CatalogManager manager)
          Construct an XML filter with the specified parent.
ResolvingXMLFilter(org.xml.sax.XMLReader parent)
          Construct an XML filter with the specified parent.
ResolvingXMLFilter(org.xml.sax.XMLReader parent, CatalogManager manager)
          Construct an XML filter with the specified parent.
 
Method Summary
 Catalog getCatalog()
          Provide accessto the underlying Catalog.
 void notationDecl(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
          SAX DTDHandler API.
 void parse(org.xml.sax.InputSource input)
          SAX XMLReader API.
 void parse(java.lang.String systemId)
          SAX XMLReader API.
 void processingInstruction(java.lang.String target, java.lang.String pidata)
          SAX ContentHandler API.
 org.xml.sax.InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId)
          Implements the resolveEntity method for the SAX interface, using an underlying CatalogResolver to do the real work.
 void startElement(java.lang.String uri, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes atts)
          SAX ContentHandler API.
 void unparsedEntityDecl(java.lang.String name, java.lang.String publicId, java.lang.String systemId, java.lang.String notationName)
          SAX DTDHandler API.
 
Methods inherited from class org.xml.sax.helpers.XMLFilterImpl
characters, endDocument, endElement, endPrefixMapping, error, fatalError, getContentHandler, getDTDHandler, getEntityResolver, getErrorHandler, getFeature, getParent, getProperty, ignorableWhitespace, setContentHandler, setDocumentLocator, setDTDHandler, setEntityResolver, setErrorHandler, setFeature, setParent, setProperty, skippedEntity, startDocument, startPrefixMapping, warning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

suppressExplanation

public static boolean suppressExplanation
Suppress explanatory message?
See Also:
parse(InputSource)
Constructor Detail

ResolvingXMLFilter

public ResolvingXMLFilter()
Construct an empty XML Filter with no parent.

ResolvingXMLFilter

public ResolvingXMLFilter(org.xml.sax.XMLReader parent)
Construct an XML filter with the specified parent.

ResolvingXMLFilter

public ResolvingXMLFilter(CatalogManager manager)
Construct an XML filter with the specified parent.

ResolvingXMLFilter

public ResolvingXMLFilter(org.xml.sax.XMLReader parent,
                          CatalogManager manager)
Construct an XML filter with the specified parent.
Method Detail

getCatalog

public Catalog getCatalog()
Provide accessto the underlying Catalog.

parse

public void parse(org.xml.sax.InputSource input)
           throws java.io.IOException,
                  org.xml.sax.SAXException
SAX XMLReader API.

Note that the JAXP 1.1ea2 parser crashes with an InternalError if it encounters a system identifier that appears to be a relative URI that begins with a slash. For example, the declaration:

 <!DOCTYPE book SYSTEM "/path/to/dtd/on/my/system/docbookx.dtd">
 

would cause such an error. As a convenience, this method catches that error and prints an explanation. (Unfortunately, it's not possible to identify the particular system identifier that causes the problem.)

The underlying error is forwarded after printing the explanatory message. The message is only every printed once and if suppressExplanation is set to false before parsing, it will never be printed.

Overrides:
parse in class org.xml.sax.helpers.XMLFilterImpl

parse

public void parse(java.lang.String systemId)
           throws java.io.IOException,
                  org.xml.sax.SAXException
SAX XMLReader API.
Overrides:
parse in class org.xml.sax.helpers.XMLFilterImpl
See Also:
parse(InputSource)

resolveEntity

public org.xml.sax.InputSource resolveEntity(java.lang.String publicId,
                                             java.lang.String systemId)
Implements the resolveEntity method for the SAX interface, using an underlying CatalogResolver to do the real work.
Overrides:
resolveEntity in class org.xml.sax.helpers.XMLFilterImpl

notationDecl

public void notationDecl(java.lang.String name,
                         java.lang.String publicId,
                         java.lang.String systemId)
                  throws org.xml.sax.SAXException
SAX DTDHandler API.

Captured here only to detect the end of the prolog so that we can ignore subsequent oasis-xml-catalog PIs. Otherwise the events are just passed through.

Overrides:
notationDecl in class org.xml.sax.helpers.XMLFilterImpl

unparsedEntityDecl

public void unparsedEntityDecl(java.lang.String name,
                               java.lang.String publicId,
                               java.lang.String systemId,
                               java.lang.String notationName)
                        throws org.xml.sax.SAXException
SAX DTDHandler API.

Captured here only to detect the end of the prolog so that we can ignore subsequent oasis-xml-catalog PIs. Otherwise the events are just passed through.

Overrides:
unparsedEntityDecl in class org.xml.sax.helpers.XMLFilterImpl

startElement

public void startElement(java.lang.String uri,
                         java.lang.String localName,
                         java.lang.String qName,
                         org.xml.sax.Attributes atts)
                  throws org.xml.sax.SAXException
SAX ContentHandler API.

Captured here only to detect the end of the prolog so that we can ignore subsequent oasis-xml-catalog PIs. Otherwise the events are just passed through.

Overrides:
startElement in class org.xml.sax.helpers.XMLFilterImpl

processingInstruction

public void processingInstruction(java.lang.String target,
                                  java.lang.String pidata)
                           throws org.xml.sax.SAXException
SAX ContentHandler API.

Detect and use the oasis-xml-catalog PI if it occurs.

Overrides:
processingInstruction in class org.xml.sax.helpers.XMLFilterImpl


Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/ResolvingXMLReader.html100644 0 0 35743 10530407252 30303 0ustar 0 0 xml-commons-resolver API: Class ResolvingXMLReader

org.apache.xml.resolver.tools
Class ResolvingXMLReader

java.lang.Object
  |
  +--org.xml.sax.helpers.XMLFilterImpl
        |
        +--org.apache.xml.resolver.tools.ResolvingXMLFilter
              |
              +--org.apache.xml.resolver.tools.ResolvingXMLReader
All Implemented Interfaces:
org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler, org.xml.sax.XMLFilter, org.xml.sax.XMLReader

public class ResolvingXMLReader
extends ResolvingXMLFilter

A SAX XMLReader that performs catalog-based entity resolution.

This class implements a SAX XMLReader that performs entity resolution using the CatalogResolver. The actual, underlying parser is obtained from a SAXParserFactory.

Version:
1.0
Author:
Norman Walsh Norman.Walsh@Sun.COM
See Also:
CatalogResolver, XMLReader

Field Summary
static boolean namespaceAware
          Make the parser Namespace aware?
static boolean validating
          Make the parser validating?
 
Fields inherited from class org.apache.xml.resolver.tools.ResolvingXMLFilter
suppressExplanation
 
Constructor Summary
ResolvingXMLReader()
          Construct a new reader from the JAXP factory.
ResolvingXMLReader(CatalogManager manager)
          Construct a new reader from the JAXP factory.
 
Methods inherited from class org.apache.xml.resolver.tools.ResolvingXMLFilter
getCatalog, notationDecl, parse, parse, processingInstruction, resolveEntity, startElement, unparsedEntityDecl
 
Methods inherited from class org.xml.sax.helpers.XMLFilterImpl
characters, endDocument, endElement, endPrefixMapping, error, fatalError, getContentHandler, getDTDHandler, getEntityResolver, getErrorHandler, getFeature, getParent, getProperty, ignorableWhitespace, setContentHandler, setDocumentLocator, setDTDHandler, setEntityResolver, setErrorHandler, setFeature, setParent, setProperty, skippedEntity, startDocument, startPrefixMapping, warning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

namespaceAware

public static boolean namespaceAware
Make the parser Namespace aware?

validating

public static boolean validating
Make the parser validating?
Constructor Detail

ResolvingXMLReader

public ResolvingXMLReader()
Construct a new reader from the JAXP factory.

In order to do its job, a ResolvingXMLReader must in fact be a filter. So the only difference between this code and the filter code is that the constructor builds a new reader.


ResolvingXMLReader

public ResolvingXMLReader(CatalogManager manager)
Construct a new reader from the JAXP factory.

In order to do its job, a ResolvingXMLReader must in fact be a filter. So the only difference between this code and the filter code is that the constructor builds a new reader.



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 147 10530407253 10254 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/class-use/CatalogResolver.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/class-use/CatalogResolver.ht100644 0 0 12134 10530407253 31257 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.tools.CatalogResolver

Uses of Class
org.apache.xml.resolver.tools.CatalogResolver

No usage of org.apache.xml.resolver.tools.CatalogResolver



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 147 10530407253 10254 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/class-use/ResolvingParser.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/class-use/ResolvingParser.ht100644 0 0 12134 10530407252 31307 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.tools.ResolvingParser

Uses of Class
org.apache.xml.resolver.tools.ResolvingParser

No usage of org.apache.xml.resolver.tools.ResolvingParser



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 152 10530407253 10250 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/class-use/ResolvingXMLFilter.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/class-use/ResolvingXMLFilter100644 0 0 15537 10530407252 31261 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.tools.ResolvingXMLFilter

Uses of Class
org.apache.xml.resolver.tools.ResolvingXMLFilter

Packages that use ResolvingXMLFilter
org.apache.xml.resolver.tools Apache XML Commons Resolver Tools package. 
 

Uses of ResolvingXMLFilter in org.apache.xml.resolver.tools
 

Subclasses of ResolvingXMLFilter in org.apache.xml.resolver.tools
 class ResolvingXMLReader
          A SAX XMLReader that performs catalog-based entity resolution.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. ././@LongLink100644 0 0 152 10530407253 10250 Lustar 0 0 xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/class-use/ResolvingXMLReader.htmlxml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/class-use/ResolvingXMLReader100644 0 0 12161 10530407252 31224 0ustar 0 0 xml-commons-resolver API: Uses of Class org.apache.xml.resolver.tools.ResolvingXMLReader

Uses of Class
org.apache.xml.resolver.tools.ResolvingXMLReader

No usage of org.apache.xml.resolver.tools.ResolvingXMLReader



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/package-frame.html100644 0 0 2125 10530407252 27256 0ustar 0 0 xml-commons-resolver API: Package org.apache.xml.resolver.tools org.apache.xml.resolver.tools
Classes 
CatalogResolver
ResolvingParser
ResolvingXMLFilter
ResolvingXMLReader
xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/package-summary.html100644 0 0 17406 10530407252 27711 0ustar 0 0 xml-commons-resolver API: Package org.apache.xml.resolver.tools

Package org.apache.xml.resolver.tools

Apache XML Commons Resolver Tools package.

See:
          Description

Class Summary
CatalogResolver A SAX EntityResolver/JAXP URIResolver that uses catalogs.
ResolvingParser Deprecated. This interface has been replaced by the ResolvingXMLReader for SAX2.
ResolvingXMLFilter A SAX XMLFilter that performs catalog-based entity resolution.
ResolvingXMLReader A SAX XMLReader that performs catalog-based entity resolution.
 

Package org.apache.xml.resolver.tools Description

Apache XML Commons Resolver Tools package.

This package implements several tool classes for catalog-based entity resolution:

org.apache.xml.resolver.tools.CatalogResolver
This class provides a SAX EntityResolver and a JAXP URIResolver.
org.apache.xml.resolver.tools.ResolvingXMLReader
This class provides a SAX2 XMLReader with catalog support. The parser uses a CatalogResolver to provide entity resolution.
org.apache.xml.resolver.tools.ResolvingParser
This class provides a SAX1 Parser with catalog support. The parser uses a CatalogResolver to provide entity resolution.

Typically, these classes can be used in other applications. For example, running the Saxon XSLT processor with the arguments:

    -x org.apache.xml.resolver.tools.ResolvingXMLReader
    -y org.apache.xml.resolver.tools.ResolvingXMLReader
    -r org.apache.xml.resolver.tools.CatalogResolver

will provide catalog-based entity resolution for all of the entities and stylesheets that you use. (The CatalogResolver can only be used with Saxon 6.1 or later.)

Requirements

In order to use these classes, you must have the JAXP 1.1 jar files in your CLASSPATH.



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/package-tree.html100644 0 0 14136 10530407252 27150 0ustar 0 0 xml-commons-resolver API: org.apache.xml.resolver.tools Class Hierarchy

Hierarchy For Package org.apache.xml.resolver.tools

Package Hierarchies:
All Packages

Class Hierarchy



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/org/apache/xml/resolver/tools/package-use.html100644 0 0 14163 10530407252 27005 0ustar 0 0 xml-commons-resolver API: Uses of Package org.apache.xml.resolver.tools

Uses of Package
org.apache.xml.resolver.tools

Packages that use org.apache.xml.resolver.tools
org.apache.xml.resolver.tools Apache XML Commons Resolver Tools package. 
 

Classes in org.apache.xml.resolver.tools used by org.apache.xml.resolver.tools
ResolvingXMLFilter
          A SAX XMLFilter that performs catalog-based entity resolution.
 



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/overview-frame.html100644 0 0 3031 10530407252 21715 0ustar 0 0 xml-commons-resolver API: Overview
All Classes

Packages
org.apache.xml.resolver
org.apache.xml.resolver.apps
org.apache.xml.resolver.helpers
org.apache.xml.resolver.readers
org.apache.xml.resolver.tools

  xml-commons-resolver-1.2/apidocs/resolver/overview-summary.html100644 0 0 16221 10530407252 22345 0ustar 0 0 xml-commons-resolver API: Overview


xml-commons-resolver

The Apache XML Commons Resolver classes implement Catalog-based entity and URI resolution.

See:
          Description

Packages
org.apache.xml.resolver Apache XML Commons Resolver package.
org.apache.xml.resolver.apps Apache XML Commons Resolver Applications package.
org.apache.xml.resolver.helpers Apache XML Commons Resolver Helpers package.
org.apache.xml.resolver.readers Apache XML Commons Resolver Readers package.
org.apache.xml.resolver.tools Apache XML Commons Resolver Tools package.

 

The Apache XML Commons Resolver classes implement Catalog-based entity and URI resolution.

Overview

The resolver class implements the full semantics of OASIS Technical Resolution 9401:1997 (Amendment 2 to TR 9401) catalogs and the 06 Aug 2001 Committee Specification of OASIS XML Catalogs.

It also includes a framework of classes designed to read catalog files in a number of formats:

  1. The plain-text flavor described by TR9401.
  2. The XCatalog XML format defined by John Cowan
  3. The XML Catalog format defined by the OASIS Entity Resolution Technical Committee.

Quick Start

The tools classes provide "out-of-the-box" SAX1 Parser, SAX2 XMLReader, and JAXP URIResolvers. If you're just interested in hooking a parser or URI resolver into your application, this is the place to start.



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/overview-tree.html100644 0 0 25744 10530407252 21621 0ustar 0 0 xml-commons-resolver API: Class Hierarchy

Hierarchy For All Packages

Package Hierarchies:
org.apache.xml.resolver, org.apache.xml.resolver.apps, org.apache.xml.resolver.helpers, org.apache.xml.resolver.readers, org.apache.xml.resolver.tools

Class Hierarchy

Interface Hierarchy



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/package-list100644 0 0 230 10530407252 20336 0ustar 0 0 org.apache.xml.resolver org.apache.xml.resolver.apps org.apache.xml.resolver.helpers org.apache.xml.resolver.readers org.apache.xml.resolver.tools xml-commons-resolver-1.2/apidocs/resolver/packages.html100644 0 0 1267 10530407252 20546 0ustar 0 0 xml-commons-resolver API


The front page has been relocated.Please see:
          Frame version
          Non-frame version.
xml-commons-resolver-1.2/apidocs/resolver/serialized-form.html100644 0 0 12662 10530407252 22105 0ustar 0 0 Serialized Form

Serialized Form


Package org.apache.xml.resolver

Class org.apache.xml.resolver.CatalogException implements Serializable

Serialized Fields

exception

java.lang.Exception exception
The embedded exception if tunnelling, or null.

exceptionType

int exceptionType



Copyright © 2001-2003 Apache Software Foundation. All Rights Reserved. xml-commons-resolver-1.2/apidocs/resolver/stylesheet.css100644 0 0 2365 10530407252 21005 0ustar 0 0 /* Javadoc style sheet */ /* Define colors, fonts and other style attributes here to override the defaults */ /* Page background color */ body { background-color: #FFFFFF } /* Table colors */ .TableHeadingColor { background: #CCCCFF } /* Dark mauve */ .TableSubHeadingColor { background: #EEEEFF } /* Light mauve */ .TableRowColor { background: #FFFFFF } /* White */ /* Font used in left-hand frame lists */ .FrameTitleFont { font-size: normal; font-family: normal } .FrameHeadingFont { font-size: normal; font-family: normal } .FrameItemFont { font-size: normal; font-family: normal } /* Example of smaller, sans-serif font in frames */ /* .FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */ /* Navigation bar fonts and colors */ .NavBarCell1 { background-color:#EEEEFF;}/* Light mauve */ .NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */ .NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;} .NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;} .NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} .NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} xml-commons-resolver-1.2/docs/resolver-release-notes.html100644 0 0 11222 10530407252 21052 0ustar 0 0 org.apache.xml.resolver Release Notes

This document offers a brief summary of what has changed in the Apache XML Commons Resolver package. For further information, refer to the commons-dev and commons-cvs mailing lists and the Changes notes.

xml-commons-resolver-1.2/docs/resolver.html100644 0 0 126446 10530407252 16345 0ustar 0 0 XML Entity and URI Resolvers

It's very common for web resources to be related to other resources: documents rely on DTDs and schemas, schemas are derived from other schemas, stylesheets are often customizations of other stylesheets, documents refer to the schemas and stylesheets with which the expect to be processed, etc. These relationships are expressed using URIs, most often URLs.

Relying on URLs to directly identify resources to be retrieved often causes problems for end users:

  1. If they're absolute URLs, they only work when you can reach them[1]. Relying on remote resources makes XML processing susceptible to both planned and unplanned network downtime.

    The URL “http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd†isn't very useful if I'm on an airplane at 35,000 feet.

  2. If they're relative URLs, they're only useful in the context where the were initially created.

    The URL “../../xml/dtd/docbookx.xml†isn't useful anywhere on my system. Neither, for that matter, is “/export/home/fred/docbook412/docbookx.xmlâ€.

One way to avoid these problems is to use an entity resolver (a standard part of SAX) or a URI Resolver (a standard part of JAXP). A resolver can examine the URIs of the resources being requested and determine how best to satisfy those requests.

The best way to make this function in an interoperable way is to define a standard format for mapping system identifiers and URIs. The OASIS Entity Resolution Technical Committee is defining an XML representation for just such a mapping. These “catalog files†can be used to map public and system identifiers and other URIs to local files (or just other URIs).

The Resolver classes that are described in this article greatly simplify the task of using Catalog files to perform entity resolution. Many users will want to simply use these classes directly “out of the box†with their applications (such as Xalan and Saxon), but developers may also be interested in the JavaDoc API Documentation. The full documentation, current source code, and discussion mailing list are available from the Apache XML Commons project.

See the release notes.

The most important change in this release is the availability of both source and binary forms under a generous license agreement.

Other than that, there have been a number of minor bug fixes and the introduction of system properties in addition to the CatalogManager.properties file to control the resolver.

The problems associated with system identifiers (and URIs in general) arise in several ways:

  1. I have an XML document that I want to publish on the web or include in the distribution of some piece of software. On my system, I keep the doctype of the document in some local directory, so my doctype declaration reads:

    <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
                      "file:///n:/share/doctypes/docbook/xml/docbookx.dtd">

    As soon as I distribute this document, I immediately begin getting error reports from customers who can't read the document because they don't have DocBook installed at the location identified by the URI in my document.

  2. Or I remember to change the URI before I publish the document:

    <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
                      "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">

    And the next time I try to edit the document, I get errors because I happen to be working on my laptop on a plane somewhere and can't get to the net.

  3. Just as often, I get tripped up this way: I'm working collaboratively with a colleague. She's created initial drafts of some documents that I'm supposed to review and edit. So I grab them and find that I can't open or publish them because I don't have the same network connections she has or I don't have my applications installed in the same place. And if I change the system identifiers so they work on my system, she has the same problems when I send them back to her.

  4. These problems aren't limited to editing applications. If I write a special stylesheet for formatting our collaborative document, it will include some reference to the “main†stylesheet:

    <xsl:import href="/path/to/real/stylesheet.xsl"/>
    

    But this won't work on my colleague's machine because she has the main stylesheet installed somewhere else.

Public identifiers offer an effective solution to this problem, at least for documents. They provide global, unique names for entities independent of their storage location. Unfortunately, public identifiers aren't used very often because many users find that they cannot rely on applications resolving them in an interoperable manner.

For XSLT, XML Schemas, and other applications that rely on URIs without providing a mechanism for associating public identifiers with them, the situation is a little more irksome, but it can still be addressed using a URI Resolver.

In some contexts, it's more useful to refer to a resource by name than by address. If I want the version 3.1 of the DocBook DTD, or the 1911 edition of Webster's dictionary, or The Declaration of Independence, that's what I want, irrespective of its location on the net (or even if it's available on the net). While it is possible to view a URL as an address, I don't think that's the natural interpretation.

There are currently two ways that I might reasonably assign an address-independent name to an object: public identifiers or Uniform Resource Names (URNs)[2].

Public identifiers are part of XML 1.0. They can occur in any form of external entity declaration. They allow you to give a globally unique name to any entity. For example, the XML version of DocBook V4.1.2 is identified with the following public identifier:

-//OASIS//DTD DocBook XML V4.1.2//EN

You'll see this identifier in the two doctype declarations I used earlier. This identifier gives no indication of where the resource (the DTD) may be found, but it does uniquely name the resource. That public identifier, now and forever refers to the XML version of DocBook V4.1.2.

Having extolled the virtues of location-independent names, it must be said that a name isn't very useful if you can't find the thing it refers to. In order to do that, you must have a name resolution mechanism that allows you to determine what resource is referred to by a given name.

One important feature of this mechanism is that it can allow resources to be distributed, so you don't have to go to http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd to get the XML version of DocBook V4.1.2, if you have a local copy.

There are a few possible resolution mechanisms:

  • The application just “knowsâ€. Sure, it sounds a little silly, but this is currently the mechanism being used for namespaces. Applications know what the semantics of namespaced elements are because they recognize the namespace URI.

  • OASIS Catalog files provide a mechanism for mapping public and system identifiers, allowing resolution to both local and distributed resources. This is the resolution scheme we're going to consider for the balance of this column.

  • Many other mechanisms are possible. There are already a few for URNs, including at least one built on top of DNS, but they aren't widely deployed.

The OASIS Entity Resolution Technical Committee is actively defining the next generation XML-based catalog file format. When this work is finished, it is expected to become the official XML Catalog format. In the meantime, the existing OASIS Technical Resolution TR9401 format is the standard.

OASIS XML Catalogs are being defined by the Entity Resolution Technical Committee. This article describes the 01 Aug 2001 draft. Note that this draft is labelled to reflect that it is “not an official committee work product and may not reflect the consensus opinion of the committee.â€

The document element for OASIS XML Catalogs is catalog. The official namespace name for OASIS XML Catalogs is “urn:oasis:names:tc:entity:xmlns:xml:catalogâ€.

There are eight elements that can occur in an XML Catalog: group, public, system, uri, delegatePublic, delegateSystem, delegateURI, and nextCatalog:

<catalog prefer="public|system" xml:base="uri-reference">

The catalog element is the root of an XML Catalog.

The prefer setting determines whether or not public identifiers specified in the catalog are to be used in favor of system identifiers supplied in the document. Suppose you have an entity in your document for which both a public identifier and a system identifier has been specified, and the catalog only contains a mapping for the public identifier (e.g., a matching public catalog entry). If the current value of prefer is “publicâ€, the URI supplied in the matching public catalog entry will be used. If it is “systemâ€, the system identifier in the document will be used. (If the catalog contained a matching system catalog entry giving a mapping for the system identifier, that mapping would have been used, the public identifier would never have been considered, and the setting of override would have been irrelevant.)

Generally, the purpose of catalogs is to override the system identifiers in XML documents, so prefer should usually be “public†in your catalogs.

The xml:base URI is used to resolve relative URIs in the catalog as described in the XML Base specification.

<group prefer="public|system" xml:base="uri-reference">

The group element serves merely as a wrapper around one or more other entries for the purpose of establishing the preference and base URI settings for those entries.

<public publicId="pubid" uri="systemuri"/>

Maps the public identifier pubid to the system identifier systemuri.

<system systemId="sysid" uri="systemuri"/>

Maps the system identifier sysid to the alternate system identifier systemuri.

<uri name="uri" uri="alternateuri"/>

The uri entry maps a uri to an alternateuri. This mapping, as might be performed by a JAXP URIResolver, for example, is independent of system and public identifier resolution.

<delegatePublic publicIdStartString="pubid-prefix" catalog="cataloguri"/>, <delegateSystem systemIdStartString="sysid-prefix" catalog="cataloguri"/>, <delegateURI uriStartString="uri-prefix" catalog="cataloguri"/>

The delegate entries specify that identifiers beginning with the matching prefix should be resolved using the catalog specified by the cataloguri. If multiple delegate entries of the same kind match, they will each be searched, starting with the longest prefix and continuing with the next longest to the shortest.

The delegate entries differs from the nextCatalog entry in the following way: alternate catalogs referenced with a nextCatalog entry are parsed and included in the current catalog. Delegated catalogs are only considered, and consequently only loaded and parsed, if necessary. Delegated catalogs are also used instead of the current catalog, not as part of the current catalog.

<rewriteSystem systemIdStartString="sysid-prefix" rewritePrefix="new-prefix"/>, <rewriteURI uriStartString="uri-prefix" rewritePrefix="new-prefix"/>

Supports generalized rewriting of system identifiers and URIs. This allows all of the URI references to a particular document (which might include many different fragment identifiers) to be remapped to a different resource).

<nextCatalog catalog="cataloguri"/>

Adds the catalog file specified by the cataloguri to the end of the current catalog. This allows one catalog to refer to another.

These catalogs are officially defined by OASIS Technical Resolution TR9401.

A Catalog is a text file that contains a sequence of entries. Of the 13 types of entries that are possible, only six are commonly applicable in XML systems: BASE, CATALOG, OVERRIDE, DELEGATE, PUBLIC, and SYSTEM:

BASE uri

Catalog entries can contain relative URIs. The BASE entry changes the base URI for subsequent relative URIs. The initial base URI is the URI of the catalog file.

In XML Catalogs, this functionality is provided by the closest applicable xml:base attribute, usually on the surrounding catalog or group element.

CATALOG cataloguri

This entry serves the same purpose as the nextCatalog entry in XML Catalogs.

OVERRIDE YES|NO

This entry enables or disables overriding of system identifiers for subsequent entries in the catalog file.

In XML Catalogs, this functionality is provided by the closest applicable prefer attribute on the surrounding catalog or group element.

An override value of “yes†is equivalent to “prefer="public"â€.

DELEGATE pubid-prefix cataloguri

This entry serves the same purpose as the delegate entry in XML Catalogs.

PUBLIC pubid systemuri

This entry serves the same purpose as the public entry in XML Catalogs.

SYSTEM sysid systemuri

This entry serves the same purpose as the system entry in XML Catalogs.

The Resolver classes uses either Java system properties or a standard Java properties file to establish an initial environment. The property file, if it is used, must be called CatalogManager.properties and must be somewhere on your CLASSPATH. The following properties are supported:

System property xml.catalog.files; CatalogManager property catalogs

A semicolon-delimited list of catalog files. These are the catalog files that are initially consulted for resolution.

Unless you are incorporating the resolver classes into your own applications, and subsequently establishing an initial set of catalog files through some other means, at least one file must be specified, or all resolution will fail.

System property xml.catalog.prefer; CatalogManager property prefer

The initial prefer setting, either public or system.

System property xml.catalog.verbosity; CatalogManager property verbosity

An indication of how much status/debugging information you want to receive. The value is a number; the larger the number, the more information you will receive. A setting of 0 turns off all status information.

System property xml.catalog.staticCatalog; CatalogManager property static-catalog

In the course of processing, an application may parse several XML documents. If you are using the built-in CatalogResolver, this option controls whether or not a new instance of the resolver is constructed for each parse. For performance reasons, using a value of yes, indicating that a static catalog should be used for all parsing, is probably best.

System property xml.catalog.allowPI; CatalogManager property allow-oasis-xml-catalog-pi

This setting allows you to toggle whether or not the resolver classes obey the <?oasis-xml-catalog?> processing instruction.

System property xml.catalog.className; CatalogManager property catalog-class-name

If you're using the convenience classes org.apache.xml.resolver.tools.*), this setting allows you to specify an alternate class name to use for the underlying catalog.

CatalogManager property relative-catalogs

If relative-catalogs is yes, relative catalogs in the catalogs property will be left relative; otherwise they will be made absolute with respect to the base URI of the CatalogManager.properties file. This setting has no effect on catalogs loaded from the xml.catalogs.files system property (which are always returned unchanged).

System property xml.catalog.ignoreMissing

By default, the resolver will issue warning messages if it cannot find a CatalogManager.properties file, or if resources are missing in that file. However if either xml.catalog.ignoreMissing is yes, or catalog files are specified with the xml.catalog.catalogs system property, this warning will be suppressed.

My CatalogManager.properties file looks like this:


The Resolver distribution includes a couple of test programs, resolver and xparse, that you can use to see how this all works.

The xparse command simply sets up a catalog resolver and then parses a document. Any external entities encountered during the parse are resolved appropriately using the catalogs provided.

In order to use the program, you must have the resolver.jar file on your CLASSPATH and you must be using JAXP. In the examples that follow, I've already got these files on my CLASSPATH.

The file we'll be parsing is shown in Example 6, “An xparse Example Fileâ€.


First let's look at what happens if you try to parse this document without any catalogs. For this example, I deleted the catalogs entry on my CatalogManager.properties file. As expected, the parse fails:


With an appropriate catalog file, we can map the public identifier to a local copy of the DTD. We could have mapped the system identifier instead (or as well), but the public identifier is probably more stable.

Using a command-line option to specify the catalog, I can now successfully parse the document:


The additional messages in each of these examples arise as a consequence of the debugging option, -d 2. In practice, you can make resolution silent.



[1] It is technically possible to use a proxy to transparently cache remote resources, thus making the cached resources available even when the real hosts are unreachable. In practice, this requires more technical skill (and system administration access) than many users have available. And I don't know of any such proxies that can be configured to provide preferential caching to the specific resources that are needed. Without such preferential treatment, its difficult to be sure that the resources you need are actually in the cache.

[2] URIs that rely on the domain name system to identify objects (in other words, all URLs) are addresses, not names, even though the domain name provides a level of indirection and the illusion of a stable name.

xml-commons-resolver-1.2/etc/catalog.dtd100644 0 0 7725 10530407252 15506 0ustar 0 0 xml-commons-resolver-1.2/etc/catalog.rng100644 0 0 13101 10530407252 15522 0ustar 0 0 [a-zA-Z0-9-'()+,./:=?;!*#@$_%]* system public xml-commons-resolver-1.2/etc/catalog.xsd100644 0 0 17041 10530407252 15541 0ustar 0 0 xml-commons-resolver-1.2/etc/xcatalog.dtd100644 0 0 1104 10530407252 15657 0ustar 0 0 xml-commons-resolver-1.2/resolver.jar100644 0 0 244173 10530407253 15224 0ustar 0 0 PK Åzt5 META-INF/þÊPK Äzt5щþßMETA-INF/MANIFEST.MFu;o!„{$þeRq¢¤ ³‘,Yò¥pýênmŸ,œÇ¿\Ç’“rg¾YílaÜb.òS)1S7œÍÙ2ÐïQT­šêž3› rñÙø;5W«E',¥H JM]sÖÁ¤u³”v ¦5êÃ;•0“{ÃTµ˜Ogœ=‚Ç ×߸®¸þ,y¡QeÙ×B›£-z³•5"ŸÇâðÿ ,p´»ˆýãö3 ”NŸy¢my‡„bI‡0LÈEäe³6b_J4ºuú¹¥5=öЭÿPK Ãzt5org/PK Åzt5 org/apache/PK Åzt5org/apache/env/PK Ãzt5org/apache/xml/PK Åzt5org/apache/xml/resolver/PK Åzt5org/apache/xml/resolver/apps/PK Åzt5org/apache/xml/resolver/etc/PK Åzt5 org/apache/xml/resolver/helpers/PK Åzt5 org/apache/xml/resolver/readers/PK Åzt5org/apache/xml/resolver/tools/PK Åzt5t uµñd&org/apache/env/WhichFactory.properties’ÍNÃ0„ï–ü+õܼ‡*jo P…ຸ I±×‘m¡ôíÙØ­àƹ­<ŸgÆ?xt‚ øðÕà€¦£†ø§yëzÓÐ$.Zmà‡±wƒ%`tÉËÂá¥}ÿ)SÞñü™L‚Œ9â„©÷¬Õd1:{K00Þ9Ï0”Q«²æš¼;ÛY«v%'yÛµžsc´Èóܤˆ[ ˜ªU]£`èN£,ITÉauL ô.úùNmÑäö×@ùê×€ågœñCÂÅßœf­vœ´Ú-‰W÷í¢C)²Fû/7âxçÇIÑêX~PK Åzt5×⥳Tþ"org/apache/env/WhichJar.properties•XÛnÛF}7àØ /i²{¿èCZ;mÜÆìÉAKt,G ’N”~}g–¤d‰äR1l–Ï\wæÌì>'«lNn¼ü§E:»Ïâlý-þt¿˜Ý_¤åéÉsò&/Wiý!ä¾â‡´\§« ÿ>ϪY¹(êE¾F$ùtŸ•Y‡$‹Š¤³ú1]’jñ_Fk0TgÉïÈ%^pûuWæ+’®ÉËüîn1[¤ËåRÝ/Š"›¿$ß²²ò¦Pf³ZF›t Ø2[fi•U§'Væxì?özuþÏè!a ;=‘’raÆ! BS'¯‡k.]š åJè1OhBÄ©4sFp1Ôd ç’ƒxrÆf¹£®700igÖ†aaFÒ mòôÄqau pTA ã º¥¢P•ÂŒž3Od§ŠË@Œ"aÑí*Î9ÃMÀ}™ÐȨ€ï ²UɵTl¼„x¢äEµXYf€ø¤5‚¥X_êôD9­$Pµ¬g£ùWŽriÆAMþ•uŽÉ T1®­ayqû¸ž/ÚÎO™ Zë€rçƒ io³Ì·œõu''€°’Ç‘­Îçä&+Ò2­3²“u^“ê±(ò²†€àÖÈ›Ë-;‘ô®ÎJÂc3<ä*ÓkÖe^?V Ôsˆï|K9Ó*€kiôé>÷íáÛ¸”®Ç#Ÿ³r~Èóeµs8"ç××W×ñÙ¹¼ú@>Þœ?CÇ÷ýô›‹*À N@„“@‰=C™ÓH 3ªWŠŒZiePR$›Wxv›f¶ t–¯VùºŠXLã[ŽZ•ávU„™ÄvµÍÄi«’MƒÝŽ´æ(v3)Ǭ‚ðÿœjmdAÅ1HIgµq)¾/…ޝ!£c\ôÐ$~Ò[*¥¦AÙ¾aÞvP[rTØzOX´Âš*®Ç½ösô@Xt!ÃñS1²²5Ë€Mßl×wM“´¾ÈÖõòG´¯†ný‡œýŒ*Úÿó»åE$š•†kÌÀí÷¾oŸ­÷ÝyE¾vUÙàSàp$ac(à5Ö{¥éx¯‚(×6COFH ÑÓ8„C Òb8Ä#qäõ}V’¢Ì²Y]ýÚqÈÿPK Åzt5$EÅ._%org/apache/xml/resolver/Catalog.classͼx”Åö?~ÎÌÛv³@²!ÀRdé!…Bh†0’ MPÄ%Y ’æ&¡Ø *ЍˆRU‚±"¨ê…k¿öÞ{½^»ò;gÞ÷ÝÝ„ xŸûÿ?ßÇÇwæ=3sæÌ™Ï|æÌìžüóþ‡@B¦/|‹÷™x¿ÞçÁ¸‡xñA|ˆsóã~ìåÇ£üxÌÄǽà³ëÿƒû¼¸ÿÉ'øñ¤‰Oy!Ÿ¶ð ŸåìsþËÂç-|Á½Ôä%_öB'¼ÏÂWXÙ«üxÍÄ×½Ðß`sÞäÇ[üx›eïp…wùñ6ËÔë{ ø>~`⇜~ÄâMü„Çô©?ÃÏùñ?¾4ñ+îõk~|câ¿=4ÀoMü²Ø„ï8ýž?xñþhâOþlâ/þjâoþnâþÉÍÕ°za!þ` °’³„ Î…䇯Õ&—Z–ðð‹× –ðY¢…)Zza†h•ýD")I¦ð“N‘ì…Y¢µ)R¸¸W´íL`uíùÑùÑÉǰÎÎ],Ñ•õ¢›èn‰^ÑSô2Eª%z{©<Í ™"Ý4:‘iŠ>ܲ/÷×Ïý9`‰–d‰Á–b‰c½°[ eÆq.ËÃ-1Â#-1Ê£¹à8Ö‘mÁ÷ü2Æ+rÄX–ärýq䮯sÙñ§y"§'Xð§,8Ài¾?rZ`ÁO¬¡_&Zð3§“,ø…Ó-œY(9l¡Æé uN§Zð+§Ó,øÓéüÎéIüÁé þ´ÄLÖ2»ïÎÍ2Å©–˜m‰Ó,²ÄöR1¤„saKÌåZóø1ߥ,<_Xx©%Ê,Qn‰ –Vò£ŠG|†%"–¨æZ5–¨µÄBK,âÒÅüXÂ3¹ð,KœÍé9ü8×çYâ|K\Àoòã"~,åÇÅ–¸ÄÔß2n|™).·Är.¸‚ð*VÐÚWrÉU–¸Ú+yp×Xðž†U¦¸A“=9óÌœì)ÙùÇ#Xc'æL-È-œBÙ‰Ór‹ŠòÆRkòø‚ü±¹9ù­ÆææçŽÏž’;{ÒÔ1ùy9ñ’É3&OÉ-@ðE%S‹X;éœ2cR.禌µÕÔEÞ”¤:?¯p‚]jNœ’=%ob!»Ê W§TªZåN/Ê‹ë*Á¨â¶xöä©ãÆå„à%iôE›ª“ŠüÓC C}+Â5}§å§JÅ¡šPY弜E%Tê¼äVÔDJÃÕ~»zmMiYßiáâšÊ5I, Ï Õ–ÕÌ®\ŽDJKH-ÎŒ5.U„æ…#©ù•‘y}CU¡âùᾋËËúFÂÕ•eÔ¦oN£š¤Òç´WZÆÝ&•U‡ÊrÉ,§ e[¨â±á²ð¼P õC%áHA¨ !%ÎâãCÕókBsÊÂãu²#d˜1¢´¢´f¹5µ÷4rMN%¡U~iE¸°¶|N82…ñ蹟i¡H)¿;B­f~)ÙÐåHƒ£>ÓÚl†Yî:.i^¸&§‰3ÓR{½;“ªUà#YmU‘òÙ/««æ"tWÞZ¬ÔU…"ÕTÔwröI“Tv\ˆ'| ;¯:´Øn‰0à°fØV œÎí6Œ²šðâWÃà#j˜R4lP¿þM•xB%%®Ž±©ö<—…*æõLh­˜7üˆj+dŸ[å¥åá)KªÂQ¨Ç+$¤DœþúþMåäàªJrsrœÖ¼Šš°=? Å•UK¢SÑýˆ0Q¶z+‹œw2¬\}Róþ÷^²w>³$ÌÓÅ„O”®°_(̳¬’(¡¹ƒ´éÛÁqHnk£²ºBùÎ\TZQR¹ˆúL M Rc7cþ‰„ç–.æØ¥v.e\¹Ç~Uxö:šÕK«øn”¤½kqíÂgi '†LYÎËH–V2³~ÚXæs¬©XxíøÊC ÂÙsHC-Ç™ºŠ;ÕÔGÊCe¥gÚ½´ÂÈPÊЂ,âŒ>gI ë'á•ó"wynjEumUUe„›[Q\ÉüÖ˜Bç“Â\.³„ûMIÍkÖ«8‡´Ï“ƒˆbñ°I‹vR²T–ð‹šWkDq™öz'WÖFŠÃ6óùôá|ØÛÒÔ7]ï>ô ×‡ è3Åu>±ƒ>l-}؊ʼnüH⇟ÎýÜLîÃdlíÃôšbO¬ë|b½Øà׋ ýþnHIvŠhL'E¡Ù‡Tô±Uô!}\}}š(7Š¡×F*²*CÕ¥ÕY Å꬚â,{id‘’Šj~f»}˜ÑÜà#õ61{rÞä“ òuJ UUÑrV¼Á#õaoLCø_ÄNPÝ·ª,TZáub“Ol7ѾHÄé[ÄVŸ¸YÔûÄ-\ïVz%Þæ·‹;|âN±ÍwùÄv±Ãû8 ùÄÝâÖ}/BæßŠ‚}b§h0Å.ŸØã|â>q?Ï<õÑùž»`'öGÚgƒG <}bx¡MS»ÇI°›:¨fAjT ƒÑ–YAŸxP<äã8S<â{Å£:l>|%Vq ‚vI¼ÆÆí› j)èjTиyÇ¿ ti˜öhXÚ¸]r3±/abÍüp¤ÑÑ@“˜a‰"¨ŠJŸxL<îÿ÷úÄ>±ß'þ)vøÄœ€ù>ñ¤¸‡p«N„Aÿ¬dó„a‹Ú¹EAN)‘Áj'À$Ç¡"HÑU° ¯ 7ÈÛ?›žz´ñ"ƒöQŸxJ<íC‹GÑö0Á«O<#žåÚÏ!túË Õ'þ%¶šâyŸxG”ÜL4ê/òxIló‰—±­O¼ÂK!õhNÑt¾)^õ‰×ÄëD"ãòN*ÈÍ šâ Ÿxó‰Å8ˆcú1Å[>ñ¶x‡Ž;RFûP4êï"1ò{â}Š™£•ƒT›§¢xQ £ú¢ùø³€7S#rχ´Wña$‹‰ŸLér¨g^¹–½[·Ê§­¯`” }Ρ)hß©µq¦-XR®R˜ /.­¦ ªí¸i) ÖT«âñä!Áà;Ÿøï¢Ñ±¢`ÎÔ"ŠÐ*jËÊ\Éä)$I9ÄF;¶«æN÷Á÷¤ ·Ðá |gŠO|âSïÍì©ÏA{Åç>®…ô€øq€?òã'.¸çûàg~ý…_?$?4~è\ð+?~ãÇïüøƒÂwt°Z WΫ ‡» \¡Fç5Ä¡>ñ…øÒ‡ç0òºÍ! Q¨ÊË'•¢€ ú¿7g¼—¹G€,ŸøJ|íßðÿ-6!LoT´Ãá q‰†æ–Ò²,)e¾¬ÎT–íŠqÅõÊüC |¸š}»¯$R™‘;Ù'¾¥Žq#¿·lE“­‰MÂèÔX;ÐMõ‰ÿð^õøÞ'~[É—“•ÖÏç¾ 7јÔõcjuï,¿Ç‡ËñŠ˜6;Æ$õfeu'ÊœnG™>q@üH= íx?±©×âuAÅâÈTÞÈCºåqhsaM¨£x.†e¾ pÍÉP E~®}8ìr¸Šy}'ÑWçã>¼”öH\ƹËð÷!0?dÊÁ´~§N—IHúYüB :š “ñÉm‚¥ÕÁPE°6V5vêvíÃmì ů>ñç~Çq´_ôèGÎîánÅŸâ`£xaâœÓ)Z$ßÝE%µ&Â&$GE]|!I“E¶½…ò}COç6çˆ×˜|-ʧµj2-œ½(áëÜÔ™|–mAEÓ(¤/!cøˆÑ+õhTrËÄØ]«]ˆ0ì¿=ÐNSWƒ5ÑUO/irƒd»wxï™´ÐÈqMŽ_né¡"ußãS§ÔÞ| PÍí{5:Sþ•Iç òU5ñ»,-•´Û69ç:õR©¶ ¼„b€{×̵eJ³ ‹krËÂöa½ñu^T«ù¡ê‚ÊHØ©W­?óãTÌK|Mhß|&7Ò¨„¬°‰ˆ8ež(ÊÑZµs=Žp(vµé%á9µ µÃ^ÿÌ—U1îÆrE¾£ÓC˜9%ã¨ÎÝvÌ«©tÎ=Žª/þ1‚âZZ‘´›7wñÀóß*ö+…óMëF3ý½È¶' ›¦ÊËWeî¼5‹n^eóºµZDÂå• ÃÑwîw·Ã÷n$OÑ“à°#_§ö†Õ[Iv¯FÛºÃ9䮵]êa50¥E™Ö¾_ Ä 5áH\ ¾¾/«äàÅ,­Î-¯â›&+…+†Cõ+{ ñÙ̹D‘•¼ c·¨“h~b†&7#æû~+£uÔëHpà™UûÉW!*×õðà‹ý¬˜ &‰¼á1™‘0S‹šrrš½ËH=ºû-vq·&ÛÍ×òñDpÌdOB‚ûš™÷'wÜ“¢‡žèe_OÅ+Éú¯¯ä¦Ù?ÇåÆÖE›f–‚bY¯º«ž^Z3ÿ0?(£yJÂ|]4µˆ<ŸQ*ãû;;“7ÎQ!²A1üjP.À•þजôG'ýÉIvÒ_œôW'ýÍIwÒ?œôO'=h§|ÔP):©pR餚“ê*Õøˆ®RËI=èUiúTÚ[ª´•#OtÒ$'õ;i2¶ViŠzïÈ÷{ôlGoÛARøpjÚ.À´= fì¹´4m'èi»ÁØ fLlŲžXÖË&PÖGÙ;¡eLÚjõ 0@Ï>@ñjZ¡ZÓX:PIOÌ€þ8Fà$3 ‹aV`{jã³-ÄØ‘R¶¾“cýcd½ ´øÿSëÓÒIMlÈ ÀEG9„Å0—¨a´±Mu†Á¹ch)’ÆÎtÔ—ß)ÕÓîs{´Kƒ…t@ˆyCz£KÔ£¨îÂhb°—¥¸ŒÚ\gˆ5ĈÒ5Š‹;A£ÿ²wCb~ºÖIé²ü{ yFú.h]þ›h›áoçøÛS.Íß!£:îNä·c Óü3é5fFxùíjðàJh‰« -^A\ ix=ùîF†á8¬Sf¦Ù8fjä×nHà…¶Ð{`OÄ00±¦2„ù Õ1½Á1=Ÿ|Ø2½‚ë ³“íòt-¤|+²¬Û}z=ôâwÊ÷˜¾ºÎà—è©•ì‚^…ªUMÅ1@‹wAî&ëïƒ^¸úádçƒ0V–û:8Ó ¨r™Ø‡,o -°/ö#˳Áëä4¾ê´Ç€aEõ·2 ÙŒè½ Ò ä¨zðe [»Tb'§dÓÁÛ¹ô,­z´û áÈÌbµ èöȳŒŒ€Aç÷îÓ¹V„õ_”Côz”‘Bâ¾ÜÈP §‘™`A«€IMU~4­KuLÑÉk=7|"æœ1HÆ?MËâ9Zÿ‚ö”¦â‹4µ/Á |™¦ö(ÄWa&½—àp:¾ µø\„oÃZzß‚ï+Îe¨ÀÖ¨·â@ÊíÃu8ÏI° OJèÕ8%‡Gý±£u(Ÿrªó`¤ª§C-tS¥\)ªÔ$—Ä¡ŽËï# ̳¦5@ÿŸ¾6À G`pA/Ç’F#>6c{¿Þ ô=EXîÑ# ^#`TŒ®‡å…Mkd7©Qš¥5­’Ó¤Ê85{ªä6©ÒMÍU£*ãUÙƒIz|Ó;,èJÿ UéXr§si9½Œ$œÞ㜉ÍÚjð[°ð{Hƈïкý‘\ú3äâ¯0‡åø'l#fyZHxIhð–Ðá}a¨ =<ìZgB-x‡©‘LPÉ"™€np+ǔ˅Kq$Ž¢©O ÇÑÄ,§õ•cÈîmp æàX𯗢msqœ³ú8 jшóà„&$*ZÄ‘¨%ÑñÑö£ö-¨½¾ ÿ„íþü˜’–dˆv`ŠxE‡8e-¢ÊŽ'JÙnª-*"÷ä§ïƒÎrd=øI`¥wl€Â˜¸T`Çtµ”¾b1ån„Žvn­GF›Eóvâtž½¢&„*2Á}À'úB’è(Mƒ`€È†‘b Œ90AäÆj~trT¤€4¦öjI¤œG#ðå0UP ]ø7gDg’Þ=†¤ÙCš¼\”š.§4‚ )’–ÕÔ˜ím˜"ÅdHS ·˜ýÅ)üÕiÜþ4$ºú‡`ƒå› m›°ÙÄ„»æ/lšæØäŸ5 cD0nƒ š‹³UŠfÓ]aæ~èï*:)6¸èÖšZk3f$mÌ|83-ã>8YBãA”­¤AWA~¢†‹Zš …p’X§ˆ3á qœ+ΆËÅyp¸V‹‹”SFÑÐiˆQ§¬‰î)kp"EúÁ\µ»H˜@`<‘&Tƒ3(œ,¢zZÔyÅ0C9o²ã¼3ÚÛÂAÃ)üÈ;òÔžs"mIrí:…ñËÒ÷À¬TñÔ]0» ¬,£FtÇ+íbþ,ƒ·˜P¢YTØ™ =§ô,c©†Ö³*g+Þtð–Në(ŒSž”Dí3aœs œ€0Î#:¿„Fe{ø𓇯]¬¦å¹RÄ:"6ÀPq=d‰á8± Åf˜-¶Âq+,·ADÜg‹mpžØ ˨αnÄñÖ–¨×·à Æ‘xsNÅiäÏ,(ÅéJZþ-^nˆWx#×Ò˜HÁRÎü€§Ø²͵¥%ë§<û  ç×C"eµt·›t§›¯í sëá7—v_ùN~ET3uÜs= ¦œWåÒÓ¥õ,¸Nwá´€pD_æÂ©¼žbpj¡øÂý)Îè œÑÒè32]³2££g¶c3…ʦ ÖCxRXr‡ŸÑhøjÐdœ=ègЇøÖ´ë°ƒ¦›»ƒ p'Õ¼6«gáEx… iC±2 Šû †O‚_<íÅÓÄÎÏ@/Jû‰ç‰í^€1âE8žòÓÄ+p²x• ù6,ï¼ ˆ÷àJJ׈`“øî_Âýâ[xVü¯ŠáGñü)þDK"&J‚Ž”ØAj؃Ò>ÒÂAÒƒÙÒ‹ã(?UødK É$\ ýX-“q¡lQz…lƒ«Ägxƒì€[dGû¥LTèÆ_~˜„§ª¢=³)Ö´ÍöÃÓTü5†€Ì{†çRHC¥HùDÉîW`Q‹W¡£ZáD¥áž§ôIìïèÓ°ÚÑÒxêοŸÚ „–­ÁËOLóWì†J¢­zH+ôŸ±"YZ@K<%±oTÇ, /ƒÚ4d‚Û 9 >…á¸h,&¾«‡1…JîÂr áQ•Û¸ÜgªZãTžå”+­yî>à?;EiúÏqb[ƹ|,$œRÀ-‡é¤8Óp8Ó$1Ó¦]•™“žeiž ˜i™6y2ÎýYVÀбg0ÓaOk©Ahgú4¢ôy z¥P0ÓÚ±ÌðŸËvÖCRt<ç±`‡Úc<ÐTÁ@OlZE{ ól<ïÃGÄ»_ÁÏðÌ@/¶Ä¤(ï^Ab®þÐB„Ör9ƒ¡åp˜ GADKå¸LŽƒ5r<Ü.óà9vÊ|Ø- `œ{å$xNN†äøDN‡ÏåIð•<ÈYð‡œ¦ ¡WÎÇd9{É Ì•Ø_VáÁI²V÷J§žèò5åTè@pîI *&¸¶†ÎX¢à:F9²ä”Ó`'lP¼.)t[«x]ƒ=tè˜K9‚kÃ䱊áMø„àÏ oÁÃ[˜ì0¼¥ l‘¶*µï"ÎÃùvœiýNúhßÕO#ÇŸ?²ãÝpAÜËgì Qá,o?¤8Ócù/ò/UÖ6&i„-ogò=:0ÏË$ˆó¡ðXÞ’#<3Šn®Ð&v”ð_Âz×Ò>ð¤´Â-ÿ¥±~ëµ­d÷²:虦 o€Ë £¶\ži[æ¡tb½vÕ\^9ªân¸¢0-o¨Í jF;•¤zW¦k¼R¯Œ*¹*“߯VûR3ˆÔ¬¬ƒQn‡+ÑÓDÃ5M4ÈïHê¿£áÚ¦¶“†ëê _ZTÜ@´ÕjgøN›³©Íš:fÚåk¶quN¢:뎤w}c½Ý©Í†:8îï¹õzgH¤ã†zñ鸱²ï‘f•ll¤d)©ûûJ65R2”l®ƒ±SÉMMfH´$=[þ¾ž­Môà>Òsóß×SßTϹ¤ç–¿¯çÖ¦z†žÛê(¨Šo]˜®5BÈíª“Ìø†ð5¼#~õ9¨úkäßÙ¤h 5ÛŽÔÿ]Íô5Ü~¤†;ši8–Þ}¤†÷4Ó0ÁÍr€6 J`qp)\LÑw•½g /íZ /].Ÿ¼üòH‘Ë £¼Œö®å0F®€Iòj˜&WB©¼.—«a­\䨓×ÃÍr#<(ëàq¹ ž•7Á[r+|*o†od=ü$oACÞ†>y;íWwb7yeÛq°Ü£åÝÜKAY†ån¬’÷á"y?^ ÷àÕòA\#Æz¹ï–â}ò1Ü/Çgä>|Sþ?‘Oà×òI<(Ÿ^ùŒH’ωÎò_¢‡|A ”/‰Qòe‘+_…òU1K¾.Šåâtù–8S¾#.”ïŠËä{b•|_l–Š[äGâ.ù‰xX~&öËÏųò ñšüR|*¿_ËoÄò[©Éï¤O~/“岓< 3äOr€üY“¿Ê<ù»œ"ÿ'Ë?eX”5Ê35!/Ð4¹R3äõš)oÒ,y§æ‘h òQÍ'ŸÐZÊ×µDù‘–$¿Ôüò€–¬iZŠæÕÚhIZ;­‹Ö^ËÐ:hµŽZ¶ÖI¯uÖf’4¬uÕÊ´îZ­ÖC;Kë©]®õÒVj½µMÚ;¨Å=Z¦¶Wë£í×úioh´IÃWÚ`íW ž@ª'kYú1Úp½‡6B¨Ô‡i£õ|-[Ÿ®åè³5u=‚§CwÞÝØr¥$CÐõ™¸@]øá,£ØAB lÅr: j„©*ŠÐárHRQ„A6X¡êýƒ°’sh@¬R'ñÑt¤¨R²BŠE*”ì’¡dW“,¢dû)`VZDçh®úcµÊÍ‚®v[±Šd5J¶9*{dµJö©+“ÈUOf- •,L2UOÖl‘’Ý•=•pešæÊ´lèb[¥ÕRéb•»Ü‘¶7Zú«›Óº9Š–à™Î[9y‘/ɺ¥ïƒ.éêö«}ºs¬toZuÿ½*@u¯Rü|—¥B‚6Zk“ «V¤À ­*z`ï†g©“Kkh‰góÍuzŽ{ÔÆ‰öQ›BÒõ0¹7oÕó`: ö.Œ½Óa:­vd0%±<ƒ Ȩ]K;8ÇÜM²¾|’žá\Ãï.$n:Ÿ6êÐÖÎݸZØ9Ú3“Y1[™6ʇÎGwá&$Cë {$ѰkAׂ©-¶ÚYÐ];zkçB_í<ª#¨üíb(Ò.©Ú¥0[[çhËá"í XA²ÕÚUÊUEê÷FIÀµx.¡œ{ìÜ«¶¥¹ÎÁ1ä¤îÐÎ9äQä;Dg“•9´B$\^\;Ç ãœ±¦‘Qw]!QY.šX¾ì¨@¾ÿÿÈ·ý¯A¾ío|[³ ×ÛÒþ€¡zG¥ôÎ0Iï ³ôn0Gïz8Kï çë©p¡Þ–ê™°Lï WéýàZ½?¬ÑÃýX¨×‡Ãú¸KφúxHϽúXxFÏ…×ôqð±>>ÓO M==z&ê9Ø^ŸüÿÈ/;*¨üóÿTîþ_Cåî¿•»›‡J9A¥’ !¨ÔTj *‹ *K*gTÎ"¨œMP9— rAå"‚ÊÅ•K*—T–TVTVT®!¨¬!¨¬%¨¬#¨¬'¨l ¨\OP¹ RGPÙLP¹‰ ²Ž rëa rùÿ*Ëñ 'FEõ5õMœùèОá-¯ƒ.vQ¦B{kF»Кû­Múr~óÈ2ë¡*®Suëëvj5ê4Ï)ÚP£¢ý ²+eyžx’¬xò&Z€žL©Þà)eWË€°ìàsbÔ¢+x‹_Ãi8ËrÀÑOk[àøh\þŒú¡OÀŠ~sâqË\ >K°äþlrUÕó*ðõ8úë¡MœoÀ ˆº(Zù²š6ôç¶c dê'#t£x¾à7úA[£?´7†@Ð8zC!ÃC,È1†Ã$cL6FÃ#j1p6•_bWypqÜhL€MF>ÜiÀn£þaL„Eð¶1>6¦¢4f`Kc¶3NÅ 1{!lÌÁ1F1æ%x¢Æ*ÊŸi”âùƼÔ(ÃËr\mTà ”¯7ÎÀ» û¦z³úTfG”BvàU*úæÜ……ìP—*·TQˆ,k‚¸Ò!“Þ‚Ød2”bsE&p#&ãÕtð1áN)™SÍ•ÔÖƒ½`^C-,<‘Îk«”ì|è«bx®&2b™· %]‹×9!ÚÃNˆ6«)%ýË¥¤8&¢÷üÝC;—‰Z)&JKW³™ÎäBUö2ÍèÌ%+Óq‰úÎÁXÝŒ«hJWÂãn¬‚1Æg¬…|cMíz(26ÆEp³¢<1K9!ßa‡ÆœÆºdL›F.æŸèküÏï†HA†ÿ…xq´êé <Ê]œô6:úÕn¦ µðVÖAj@w÷¶õкÓ:h<¾Ž½n/z÷Ë«£1KG&˜Sãôº³¹ÆÛ,b/ÿ'ÓÕ2°Ò¥zw—qæ­D%b“žÜ­™§¨&ˈv{cÀØ9ãáG¦«ú ð’=mÛãì2‘—æÔ8»—œ¯nFG<Ê./¯UÇ®´t~y™Í1Ù.á‘(s¼4*fÅ5§>`1ÝZ±^]òóÔĸŽU/ç«ËêA¯ê8!í8H ‡$4â5"—×Üîv°ùÄk+9 gyÀkÞ(%%4Ëk 1^ó6âµG?óZL‰/ð1¯y£¼–@æ¿Ok?ÂH‚ç=`÷BбŽáOñŒ]iì†iÆ0‹Þç{¡ÊxªÇ`¡ñ8,1þûáj㟰ÖxŒ§‰ºž…§çà%*Çx>4^…ƒÆ›hoa‚ñ6QÙ;˜d¼‹Œ÷1Õøû}‚ÓÏðdãs,¦òrãß1þƒµÆ<×ø‘(í'¢´Ÿ‰Ò~ÅMÆox«ñ;î7_ ù[¦Ž™~iZø‹é†é3A¤˜>1ˆò£ÌD1Öô‹ f²(4[‹™fŠQ~ÙNDLû[ª—èÄEëÏ]»”³×®!*p¢Å1ת.ŽÓœ/ÿ2¡Ÿ"9ªâ:E ñO\¯¾÷»&:´¸F( ´0KqåLl‰sñz%ëD§>®çÁ~0PÕóâ¥ðµ"R¦ÅªÔ‹·:Dš€_Â¥ŠH½"Å!Ò1–敉4AÌtˆÔׄHo82‘¾ú_ék1"]Õ,‘šý¡›9z›ƒaˆ9†›ÇÂs8Œ3G@¾9&™£ ÈÌ9 ‘žñ—Dz£;0yЮİØuXï¦×a«ê %3vð¨ë¯íîå×KnKäßCëafÆ!„Ë?ñØüjKäð@¿€A<`ÄñÀ1§¶R’LÅC-F¡ÍÅYšÛßMã’¢ÆþÏlŽ \ªž’qSßÂŒx(S#Z#þ%A»¦ÜÊüL#Šv žqH,XW×$ÌséГ~ø0Ïíë'Ê[ù&Ê#ë_gÃo`8v*Xæ4H0§CŠy¤›3¡?½g™³ ¼§ÁX3ãÍ9p‚Y SÍ0œfÎ…ùæ<¸Ä<V›e°Î,‡MT~›Y w™µð¤¹^0Ï„—ͳà5ólxÓ<>1σÿ˜çÃ/æØÒ\ŠAóìn^ŠæÙ8Ø\A;áU8Ò\…¹æµXh^‡'š«ñs-Î3×a¥¹W˜7âZ’o2oÂ[Í-¸Ý¼2ëñ)ó|Ö¼ß0o#V¼EHs±âv‘hîÉæÝ¢³yèIù~fƒ8Ö¼O-¼Gøô$†EYp˜³ð,Ñß¹|MŽÎåëX< OÂxüN1žS!ßáÃù0Lq•/c‰b<^Ãb<>qÏ„_Ƴ°¾´CG<Åa< +£¡ãv‡ñ,|à …Ça<èÜlèØÿܹø˜LÖñŸOtáÎ1ÕW^þôœ/Ýy]ÍË2ãD™IÆ-†{Q=ŒˆBOó¿Á²ÚzHnãšÿMGÖ:ºakþ·”ŒÕ VÜ@³ÙAÝÎ&Œ õ3çÛ¼ºj;¨ëÄÌï° ¤ƒºÞŠÖz—…;¨‹Œ¨ð=fuPç½Ä€¡dϱ¬gõ°è%wPÄç³E¯3uðZ7·«êÝŸþü‚­ÚB{ ýàXÈ"WrZ§©tNôÛ›…ЉÈ;`˜ï‚Çü:šAšù1ô3?ƒæÄè_A‰ùo¨6¿ƒsÍpù3,3¡…ñ;Ü`þõ柰Í<X³$ë=Åt‰žbºDO1]¢§˜.Î)Fâ1ê·eªß èsÔo &íRSÔo Œ€c±‹É“ ›úÊÆ %Ð 74à¸JíBf“]h3íBö/K#?ò¤;ß„5ùÜê÷½±'ºÍyð&µÚ4þ×#Uë?*€ê˯|÷›ô]°˜v7ô‹ÿûü)mÂüÍö ÛÓ·óº¥õÚÎýáÙþ+„Õ,k¬AÐË:Ò­¡ÐÏÊŠûV{@Ô¦ŽM‚"­hR€–ÎçKÿ›Î_1”Ð;ĵÏÿAAú~Ðq{ºÿÃø¨DìóµOˆ¡Ó·«O&Wg¦h“àà¹Cô=1¸&QrÞMGI×0†’a8%£6 JNÙ™”œºzRrÚFèLÉY¡%go„$JÎÙÈ 8ñ¼ºèŽÊ÷Si¼ô>µwrYû¸"¶ášøŒKÔ›™m:XšÁ¾óÐA9™¯qŸP[¹ ­ãÁ´òÀc@Š5 ºZ'Bwk ¤YSa5–YÅp“†ûIö¸Uª|z¼úÐy_Ô§û°^ùTÂcx‹k"1íx›ú·ÞŽwÐ,ô‚Îg½ƒà¼SÁVãÁAƅԎä¡vÃç ðÿ*ñ¤¾Úºã—Îõ®ì«8Yãß4­ÂD-$Z i<‹ã°¡Q»‡9|§PÕw(»5þ‡Jt¦Ú<Î%r¤ý9™ómk3ÇV7t²o§´q!’±”lr_7ó7†-[ÔG½-9gpáSÙŽ ðuìGZõk¥µŒ€~ j9$YW@kk­+!Õº ú[+a€µ FY×B¶µ ¬50‰êÌ´®‡ë¨´6ÂbkSÜä-‰:a‰óë¼ @¿¯úuÞ‚*¼G1MÌ£Eƒ ¹è^µ¦B*îT›ž… QÈ/”¶þo´Ýðï{àÿåvf™µ¹Î¿Öάñ¯·3ëü×ë*³Á¿ÑÎÜèßdgêü·Û™ÛüwÚ™;üwÙ™mþvf»ÿ;s·ÿ*;³ÜYé¿Öάòßdg6û·Ú™-þz;s³ÿV;s ;•£§ñ© £µ²Pôt€§¡;…ZøÎ…¯áRø®†ïa=7ÃÏp;ü ÷’>Ä]j2wÿ?PK Åzt5[îjG *org/apache/xml/resolver/CatalogEntry.classVÛOuþf¯°; - µÖÚÂÝÚ›è…âÖbaiK¥¥VÛawºL]fqw¶‚¯_L|é›/j4i¢Ml¡…Æ&^RÆË£€ÆÿAŸŒßùÍî2À&6›ü.çwÎwÎw.?ÿûÕ×ð£sõèÄH/Ë~:F#Ø‚1¹¦"hǸ\Ï„q6‚z÷íœhMD¨p^–WDk2Œ <‹b7%Ë%¿ÆeÙ_ ãu1½Æ¹s¿†¡¡Þ6ç¤í4h#"¦œÏ/Ì™E ­£×F¢äX¹Ä)£8ãÓ9s€FJi¨¥N³GgÒL;ùBUAP4 ¥§™LrUÚÖåÚå ;›˜p –éfá|†ï£–m¦J³Ófá¼xGù´‘›4 –ÜË€mÌšÕ ¼`ÂviÖQÏšŽÇwk ßâ:h¹ï-žçÛ1³¦pŠ$çÓæœcåm"6Ué`8_²†ÒåÆï(Œ åºÖxŽ{ð† caÄΘóã%güÚ ÚfŠUdº Z¶åÕàïꞸ‹0»Fó…l˜3Ò3fb~6—(˜Å|î†YH Ž‘ËgU04ß]ƒÛÆ r[×Hí:&¨‡¡¤l¤»VŽC,.«D#CÔ¢E¯QÕÚDOJeÌ·ŠsfZCÝ`:Wæ™È— ió¤%uyiíOa;6”FǓئã0¦u¤‘Ññ4vè0qMG3ºþ/s•äë°p]Ç8ªs.÷èØ‡ý"Ëãq (q¼ ã‰h§Ä1 RkZŸ6òl´ãUÑöTEÃÎÇ©þ?ãÓ×iëv¥Ôt®ÄËaos¸%ÝERßLf}E+úĦó¶cXvñ´¹°nÀ*Z—žb/×z­å³Î²I#W27ô_U%P´Þ泿(À»kF·QÄéä§B5Oª»ÔÎîáª}§ºGùí}»@'¼½IK÷ç¡ÅÂ7µÿ Ë^XDˆ‘u*I˜·ÀÕ%øeÏܦ‘]\› ¤¸ÓÕôàº)is§êÔË@øE•–䛸ŸçÑÚ+î—Q÷!ô‡¨Ÿ ­ ò+Š~ ßhÏyÏ2ôUïq½‚®¢…S³ó²×èÓòD±·Å6F™àMc4’‰¦žÓQ‰g%÷ºølz€†U?!%¿¡0uW§Œ¹ii¦Ì¬ƒiìXF£¢!‘V‰(”&õs}4Ðx‡%z1¼§|mW²PEŒ²\Uü1z;„ç×0ÑddË…MSðã+ˆÅý÷Ñ×î£åÝäú>M? ó›rèÇwt)i†"ÉžY É:õ¸uJõyëÔG¶‡¤ßpù÷Ûƒ”õ.cóG®^Pôn¡¡?XµŠ·¸WŪ±eR8[MP?£>öÄü ÿø”ÿ;úµ?g¾ ùÛ˜À—¸ŒELc‰_Ï{ŠÛ)„Ui\nr’jê$Óá#ZJ5ˆŸX*é"¶ª¤‰é&=¸.éGÊED;Éjr}†Bn R}5°)µÊ¿ÓK¿³²·J?Î.¾óÐÄ€¿gè?0 ŸHëïx¿)º¨tB…nRÒÔ©Bw³¢æ§½KÍ¿†ZŽ–û)QžŒ`üš×ÅïžÎ V;玗-jKÇhÜ⦢u¬÷ΘvG™4ð·vþ ØŸl¿p\%5VåÃâ¡Óæ 裦OE/=?Lþn9ƈ%hQå–io»°Úÿ5žsÿÇ3hѪ“hÙ‰œ’ÊI%1Mý“ÕA;¢p€vÿ’|-·L­`ë´‡hç©c ¡»*«#wë yÇVž5¼¤B:õPK Åzt5‡ã$Ϩ¯.org/apache/xml/resolver/CatalogException.classT]oÛd~Þ$ÛÔý k»eå£À€Ô 0>Z:6ÒÄ0ljҴ£ˆ¼ÎK®9îB î¹æÄ5Eb­— ñ£çØnê¶®´‹û9ï9ç9ç9~óïü…$^…žÁ4Ö&0…›lÞ“p+ƒnã}~–Ù¬³©pàí ªPÙT$Ô$| Ým—[-µ- êSÇz†ímÖ¾™ ÈY×·ÊZ½ÚUõN{› ì)g·³ÝRù$Iáz³ûqCë¶Êí µÍΔÀô¦~GoÞÕ»µf»Qî°wL`rS÷£Ê뚟}G·V®kj•}’À̦®êUµÚ­4 âc÷¸À„ùhÇx}ǘ׾0%˰{%õؽFÍŒb:_Lô;Ý÷n ,äë‘” ÏíÛ½µå-TŹO3Zß6õý½{¦Û1îYäÉjÎŽamnŸqèLy»ý¡€¢9n¯d Œ]³ôhÏ*¹æÐ±šn©bx†åô¢=¥<¿iÏž_ù\'•¯s;Wò±“ñ‘ T%>÷„LÏôǤsùå8Z™bÔ]/ŸŠŠN1 ÄMæ—é÷œ n8ûîŽYë³Tóg¥¸Î…e\Ç2žÇ 2^Ä,-ælSëû˜.ÇQñlXdiTeIÆG¸ÃF“±‚2ÞÀ ü“îDàRÌŒÔqŒ¸¬#ÍI6m ¦}_ vÎŒAÂ-Òb/>tÒÙu¯ø3#u¦èöä0ƒY<Å·Y—"xŽð|/¾ÁWç"ø*¡Å~šð3ü,áç"x‰~´)ÿ–Å×ήá%²/²ÈÏ—óªR<‚PÄc$”äc$•E6 ós_á¤É®cŒ––Á*ÍU¡þ«Ä¨"O'KA%,Cü·‚ß ¿éŸ/á3_™=ŠNг¨ü‰ÔöƲéCH‹‡?ÄÄöÒ ­VHƒUšQ§ªMblù½,µG½Ã^¸ƒRØA1•SŽ‰Ð¥Øbè>¥åLÝ4>£5~NëéFèr#º^#Ѻ×ÏI]8=žÏWŒáû2"µERïQ]û©Yà@jff©éF…ÌŸÐ3á3aR+üƒ¬ò;c’‡˜<(Œ˜³4#ð 1K‚}G~™ð˜qŒ>Ú€QàM¼ò”|L§\÷¤dÚwþà—‘ƒ€°ŒÀÛx'&9ùë™äc“WFÖÂä¹SƒÉ4°|ÒÈ´¯ÚOð3)úK¤æÜ¨æªýîÿPK Åzt5žÔ³dÜ,,org/apache/xml/resolver/CatalogManager.classÅY |Tåµ?çN’¹™\LHa²²ˆÊ"ȪHM¡ŠN’›08™ 3­¨Uë¾a¥îHE ‰ (®U¤Ú]kk[í{OŸV___ën}Vßÿ|÷ÎäÎd&ØþÞï×ä—oÿÎwÎùŸs¾óݼüÕO“‹ªøGÌ^7¸yˆ‡ ¹ÈC.ê¡k¸ØÍÃ<äæâ\ºŠK¤îáNçéÔÇ»ùMàbO”z†3…ÿYRÌÎw'é<ÇÃsùd7ÏóÐdž/¸y¡Î‹Ü¼XçStzÀçòŸÆK=4›kå :7×Kg™›—Ë–ÓåÀ2²Rº«¤»Zç5:Ÿ!Í3ef­´Öéü-Ïjgë¼^çsÜ|®Lø=TÏ R4J·I§÷u6¥Ùìæ7xh ܼÑCk¹X:çÉdÐÍ­:›CRÌtsX¦Ûdz“LG„›¨Nê“~»›ep‹Î[¥³MŠóeäimwó…qTt¡Îé|±¼ÓÍ—è|©Îß–ÙˤØ%ÅåbWÈÎ+…Æwt¾J:WKqŒ|Wçk¥sÎ×ë|ƒÎ7ê|“Î7ë|‹Î·ºù6™„íÜΔӶ84£LÞÚþÍþš ?ÔR³2 „Zf1yÚÖ˜‘†p4ÛÆän[1›Íˆ´VÆü±@#“Þ6/ oY¾DÖ.ú£Ñ¿Õdض¤%Ž˜uh¤˜DÕŽ:Èß"$ÊjÑ–›¿qƒY³µ5X1£áàf3R³ÀóÃ-öJ0‘۰žcš–qÛ3ØfF¢5óÃáX4ñ·Å7ÂЀ“™å‘0VÆ"5¯}¡Ñi”~‰¥…öX X³Âžßj š c´Y;·‰Ê˜òÝÕ+ ‚Öî«Y½¢; šÌf{0fËd«ÚhLêz›#áÖ^¦,âƒìý3NÈÝÜÛ/p ¶$3-mÅ´°ZÞÞœÀº³ëÜ …MHÔdo]5-|m¶ÁM{Ÿ!ÐḎÅÅöËüÑ@ô̺Z{F¬gp¸ïXœŸfGm6í)¨lP¤ï­Te„õʳ›Ì†v°6ñ˜F³P‚ÁÊFÙ=ËÇYËÇaù¸øòqɦ ¦jT犵®ÜŠm0•wäÌ„±9L®²Ik˜²„›Änj!³¾½µÁŒ¬ò7ØÞÚp£?¸Æ HßÌŠm@®Â²¾Ž)ĆDÍX[g:>³ceö¡§G4†´¤%=½lÒ?å}#¦¿ÉétZ ¹,±aØn[{ ’™þV¬vµF ü8‡ÚnwÇE[ͶX ,Ëf¡eÎ9·¸ ÈB“ÒJ,TŠt.qW&G§ò~DíŸJ°I¦äbJ¢ý,É*['äXA t¡ o…9›MPÞ¦v3²Í@P"#<( 0áXeD“ºYeKäˆBE¬¯;eû%ˆ#,€HßÙ‚hºQ=î‚pE69Æ Ó\(y¶—Ö¢1xÎ˰M!¿ÆlŒ…EÅÙÍÖôpǤEsUø<38_¡7&¸ó¦£’爻з¿!ª¢¶«µ]_oì®ó›Ã‘V³ AÜi(ùÑTvuáË’ÅRBrÔÍi³/L4yJh%Xàô½JšÑhºÑÜDœCêÌÀfØQb~ì±íZ<§1¾>«1Ô Ý”¦Æ¹úplq×¢S;£R-ðGcΚ¹ÆÝ 9àT"« "Í•0 K3ÎE3Ϲýñ”¤ÈŸaI¡Ób7Fnco» —SÇŠ‚hºÑëÞ`Ÿ.Z§¹%´­“¥˜šÝ´o ÏJà,ó,HŽ3ÕBÃÍ» ¾ƒó`­Çxô.©«E ÍfkQ$ޏù{ßIoô8=#ÅLSþáðnÐmt»A7ÓµnÞcð÷ù.ƒ¾K×´›îJ)2´%¢žA{dÕ÷é.ˆ]]³Õ¶8ƒî–á{¤¸—î0è>ºß h¯AJwýÀ ‡¤µ_ZJ«CZ¤Õ)­.Ùûu‹otëÔC™&`qµµ¸‹«ã‹«“E0Ø#ê/Jy~{³rt®1øn¾Çà{¡Y¾ï7øÞkðƒ¼Ay? Ç|ÍP“ÏÍ?0ø!z&Ž¥ Uöµ°-9õ:¼ß ïÑpÅcß‹½ÉÅëƒ)¥¹ ‘]-ö‚íÓ‹l_,l­wóÃ?Âw¹ùQƒ;DŒÜip½˜Ò'ãËy#~DòÕjÐ-t«A¯Ò¯ ~Ì ëš#bhÃlÛü‘¨éKä´3}¥Pa©A¿¡× îFA¿£×qlü®©êðY±H»ip<×6•ËOIbÐÎk z“^.ÁÅ!iý½‚0Ó'åSˆ_Tô½ î2^28d– ñ8²†Ô Æà'Ä›:…¼á|ȆÃqÌx¿ü$?eðÓÂâ;ô®A×Óµrƒ¨ÛÁ dü#)nñVö]•ð›OdêS)¦G ÖEŽÑÇõ?ÃÏBv×§‚˜OpM¾‰ÈÁ&úÃíÁ&¥ ÓÖ‘oµÏÎ?ª ~ŽÈ4¢¿ØÇ‚dÒ¥}Kñ~Ÿ}z_ÂÏó Ã\ ~QŠ£(èoô…A7ŠJTl¯Rφ*HWEU[À`†"XmÜ$k½ñ9%a•°apލh°øº=[m'…Î1Ç{Ëëßì܃)O¢ç\âRJ"ï¸o’(’_ϾY2·J…ò†°Kd)Ðà‚„õÙ·Yïܪ ‘ðëå!wt‚dŕۢ1³y”Ê,¬HÞŽqå%r¿[›BN[ùvX!UÒºXرNŽÇ;XQf:Ž'¸c˼¨õÌ`š”yk߉‰8ŸHªB½³i†å ‰ô‚0ýâ²´d%/Îô­‰ˆz“XBJåT¿@«|}‘ø‰Hœá™kÓ‘¯,´žÁ…x¤ÃE§küAI‚™›ÚýÁ¨õT›ãIc4XñÕÞ91Ͳô×ܹ5¦"ªä£Ép¥ßáò75¥0b·bdÀ´ì*’°î¼¹eI®I~‡ØÛ€Okܾ‹Ê–¤?upo¦—p¯ŠoüÙJ(È#¬©’¿ ÙâG0ìo²|¨÷•ßf™¿ñ¼U£Icè*º†ˆF‘G2)´ Ê> ^už.ƒÚVAUk¡žõPE#Þ![éiŠÐs´…^ íôcÚI?¥×è)P6,á±âV¥0¤ê¶bFA1Ænø×+¦B¨¦ÓÎzŠòõÿgíü–vÑïá ÿ¡4TdiÁִĸ‘§Ñ³Ø¥tEs°FV嫹½üyÔè;”Mï:hå$håÐá@BëyœnѪQ}¢ìòÇ(·#A*G þ—´l›L©d¼6ho@.Ô%@iìQÊ÷Ž;Dã×vÑØ½”ƒ‘Ã4:œè-ë¡I Ÿª‡Ê{\ú‡6TÖV¥JŒ ØMã:©*¾®:e]à9àÀ›¼¶â M馩{©¾Öڸرñ¸Ô{ibµl´cÙñ}è?FEG© ÕTï =tbmEÍ8D3OˆoDÍÂѳ׎8H'Áô`¦µD?0;išª_€±ü… ¹X(š>¼(?¢©ô1ù‘ñšôésº‚¾€£|‰˜ùí÷# <ÂYôΦ÷Ø•ô7ÎgæAœËƒy)´N%· b£å§ô"^{pÒè%´ŽÐXz¦§!ûA?óí!ôSDG‡a×˸Øà¸¿°Íd„²¢¬NšÛ¡\7a%,s¿¤WÒÔ€ýÉÅÓË‹ªe “-›§R6OË`Ù¯!$ËÁ»AKK¥ÕC'§Òš Z'÷Këת§ÉÛÍ6÷ ˜{6Æ.‡h…‡h^m'ÍGHª«±Ç6ÅSS¬ä(é¨FîW¦²DÅïi=´t7VxkUèðÖ¡q»}íí¯U@w(ÍÇï4››"1L¾ŽòøÊ7Ó¾…ðnÅOÅ SmîÆà÷ ÉØó²Š,Ò`5ʪ^°Zv–w[£=tz*V]À (òÁ´Xý{ÂÁÙX Pd‡[4S}óY`ôœŸ |à–´ü¼ ÷ÅgE*>/õƒÏ[ô¶ÍÕ/ ƒèh½•cÔªWÎâ>^}œ‚j¥@%wͽTZ×ëÁö]á]•ð_–›K@öÖVtà´RšBÇ%P› Έ_î^…È¯Ñ þ5 çßP)ÿ–*ùw47ìéü&­ä·è ~›Îâwˆ®·åqÓôŸ ÑéÊû^u–o.vØÂóJùrl¥¼rˆ³™ÒaZ³V†¼g¤3kÓZˆ°aj.µoÕóÌ,L¹&@޳p/¦³eù ªƒ´~fÖ°¬:§~/é3³±²²ª‡üg`_Ãî¯_¨AçÐ ZMçڂ΄™ÿ‚~€€ô1äOŒ>¥2þŒªøsšÌ_ÐþÁèïôkZ§¹è\Ì·h9Ž`°‰0óGz§Œ§…ô>Òª Ô?A .dd“é¿‘‰eA-.ú3ý€gúK<ÓD ´œ1O²'+]L ÚÊÖ’GËwa^Âóè¯vJvtÜ×SÒ(­¤#ü áx¡'°.ê¤&1 ;Ñè/†ZñÂ#ÜK¹uj¨">WámF¼Ø¯l­|ÅmmîsÒ&’[›DyZ9iTªUÑd­†¦kÓh†vÍÑNpØ×¢„}Í¡•Ä“íˆ!öõQÚˆQìˆ-Ê»‹e´oÄÐN'óÀÅ‚´ãã~#FqJÄÐN#C[š!bì³#ƾ´cCJÄÐV÷Ö' ™Ø`ÓI~ÁfµÑÖ°8Xh+Üg€±ÊkŒ&Ø 7Æ€1À1â€ñœŒgâA› ã§ia,qÀxžRy‰Œ¦ñp²\\”ÆÏú…±$Æ]€ñò 0~nÃøpZƒ©0^›F–®vhÜigtG:©µ6In´x¬x<[²ï¦=I¾7ð0….Û€iKå!âÚô,…Ñ[[/™GV<¥‹ÄSºhüJˆõî¬R!¶wñæøâ-}W ³ñuþÎGԭú l¶`,]ÔŠûÅE³U¨©z3µSôÕ‘È ë©ª¹²´Ý0ž;¨DÛCeÚÝT¥ÝKS´ûh¶¶—–jûèþOpø?Ãá?€Ã‡ÿ$ƒÃÿ!Õáå¿i~„CÓ)MÑ4ÿ8ùšŠ\Z:‡gW¿?"Åá]¹d¸<éO]åðxî¦sø‹SÞåÍìðò¯›««m«;i§ ã¸>0fs‡Âð`ØQÇ*sM“ðGe”¼²]%äv <×Hècvù¨Üô\hT'ИÈn…F¹ýn4ôg‹U8&‚£G«,­‡.•oRèv$càªÂ¹Õ”ïšâyHƒÜDª“ô¡htªòO¤l׌ôO`›S†¿Fù¡” Ç5/£òuù³M¢ÞþÆç-GÄì@ÆéZ‹p–u²Ÿ±wf+†{?@mw°çeC}fÍAª<á$þUçñRR+‘X{¿ÝE†÷².šïÝÕEMÞË»(ར‹vx¯ì¢Þït‘ç0]…Ðzu^Á(þQ£ê!Ú^.Dë"P«õ/ð¯í¦VƒŠÛúhÝn»ÝG÷Qwûp[·ÚnÝ®Ûnw»•ý{ïLfH¬kç{Ïý¾sÎwÎï;ß9ç›oòê×(ªøi7õÓ 7½K?Çåñ#'ýØMvzO¥Vé'BþT¥÷Uú•~¦Ò"ò¡“~î¦ÉtB¥_¸i.ý«‹VÓ/…úH¦ÿM¿’ÏwúØEÿA¿ViÀM¿¡ÿÖߪt•ðü—<þ[x~ç¦NúŸ|ú=}⤓àarãÁnÚÊŠ<òäaÛÁÏH²Sª|º„r‹D¾|j*ÈÇ$y¨*O–·ÛÉSÜT'þÖñT•=*OSyº|:¹ÈMõ\,³Üìå¢ðl'—ÈÇL•gÉò³åQ*#çÈô'ÏuS3ÏS¹ ®ñ|•8¹\å 'ûT®„Kì—G•<ª\#Nž[Êc‘¸Y+Ôby,qò¹ò®Sù<7/åe*dÁåâÑ '×Ëš+U>_ÖºÀÉ«T^­rƒè^#,2ß$Ô…B]$T³Pk…ºX¨u¢¿í*íUiŸ“×3¹:ÛšÛ;›šš71q3“Ö¾¹½£±%=¤¶5¶¯_·±±©ÀœikÄW{#“cE8N®dÊ+¯ØÈdkˆ…t¦ÉëÂQ½5ÕÛ¥Ç;‚]ŒxÖźƒ‘ÁxX¾­A[r{8Á4g],¾­&ØìÞ®× ôFjâz"Ù­ÇkÚ,b9LJèÉT_› éqÈä%úz˜æ­ÛÜ0„ú‚ñ¦jÚWmÚ`MÁîd,¾²®DpÀ”dª=íbqS·(h&ƒ‘Ø6S ÜI} ™Öpî5t´-[²pÑ©JÔ`(ÔMÆ÷0U”ŸV‡%e0.Híº)3b"‚êž>€ëH¤zz½€T F·Õ´'ãáè60åõ$ÂðËÒíÇåc+Æ•MÅ!«Z²!&E2›¬©d8RÓMõêñ`2‹‚ŸÅp§"I,Ù8Э÷É v±ÀÒѾ'‘Ô{¡3a͡ѩ ©®H¸›ié8ÖMÐ^µÏÐ!Z -­I= F2 §Á„µñ±li# v¥ôøž¶ odBFMÌð œgw¬·7…¶`|Û"óU‹ñ0´èAøQhjÇjš£}©¤9,’mM µK–.†HGÓØÃÓ$“=ª'k:ÛÖÏá†vó¬œ Eõnk;íÝF€åuëˆ.ßÃ2½ß9½)–Žên Fzbñ^=„E²•°žãÌúìI-Ø×§GCu9ߣ‘aDž9¸|ìHÅØ!س[ïÎÜ)1fíݱT[l9¶*bEM›/ú§œ\I‚m™s“ŸHu~MÏ9 íSN]rÆPÊ:DSFµ¦‡&¥§ G•‰8­)¯7Ø_c‰h°k9ûÃÑP¬¼…Ék eId¬š™eUª+…£Á¤nm9ä/.oþ¬aàÜÈáä3î¬VÃbGw0¹!&c«fe©kˆ‰†`"™9Np÷„ÒÓíÁkv&Äš0ÜK6a³C9!ŽO]ѱ »=–ŠwëM†š‚ôé¬=í§«¼AãK¸Mãvîи“;˜þ_k41r¿šeª†ŠjSE5TT§UT[*ªOQÀ—2*we* Ä‚‰p" ;œ$»&|(‰&äèN¯áÌPKÏ´šdÆhHmjY—³.j?’¥‘üÅY7K0-þ EÓ*¼5}‘`8ªñe¼U£Ú£ñåü¯ {4¾RAîÒ°ÿ!'ë÷ð6'o×8Ì;4º Üô%ºU£C¸“^Ó8½N†º#ôçM¤¨j´WôÙã¿ ¿Ôèëôzš7k/5ú–Œ;c‰j9xN¾WãûèŒ\j¦Xïç4>L¯1•|ZÚ䯒£[X‹¿‚ädãOÍb¨PMAL„J“±ÒH,Jî/•dX%}JúŠsNÇ(èéñ8@àù!–„ÞƒB=Æ4~\¨'dì¨PO‚¢o1~ЇjÏ:¸œ¹™Gí‹êýÍÑD2í6JoÅÄ®Sq}Š‘€úªþ`\j@ùi° 0µ1 ‡²¢0cAùDTŠäHZÖ›“LË>cG(ê\¸ ¤ßšñôœ)…æÞ8D¥¶MO)ÌjÙÊ+Ðèç§WÅánayó¸]³•Ó _eÞ´ÞàN}U—ÑSèÒºdë(¯ÚËú“¬j FƒÛį3^|,N0bœH¨!½+%wZÝÛõHŸ´F¡ºlBŒ8¬˜a |æ~& ,¬£YQõˆÞ‹: Ò[žÝñä^œ Ç0ÎÀ@²ÑT¾±<{ÿÖwí@²’6¢G·%·Ëí7Õ•0ŒÁ ¾+ŒHCX>V¦ezòö`¢%×3"f0žgÁŒt‹ú‡hùrÃÏaþÑbCçêuÍ fG®K’òOè¢jVS¹þ%cí–û¹PeÖ*O¡ì›T‰Ñ»üOËw/*Æüë¢3¤nÀÉ –ÉysËO󳘠zN,4¢åJšÙ‰"¢¬ï9íÍÆ‘ÿ\‹®¬Ë!.6i§ÆÜ5#ûelõ6·"iäFI2é dí²¢~UrLÖÉD­[þ$IGö¸A*ÿ2%•r‹núf„U7ımñ$jÅ3Ú›·!•Á ¹·Œ â[íÎÄqùÄâØH¯’G*ÇÞfás®YßбyC#зvwM¬Ûü›fíg-ãþÓu:[[qå˜<ºPÊDÓñæŽÍ£­4Hµ®ïXÕѼ¾uT =„•k´ô¿VæcnsE3C«©Ÿˆlä•”Wšoã½×zï3ÞS‰åš„ç|ÕàÍxÛ}Lj¿B¡kðtƒÕt-žšÉ@×Ñõx3Ìÿ–³á½êeRÖUÚF(¯2o„lÇɾ¹ò9ZüìqzÔrù=nO¾GåóøGhÒqš¼ùMiõy¦Vásta¹ñì€ÚNrÑFšD›¨˜¶P)]޹ -¢nZF!º€tÃ8Ÿi€eœVÐ t#Ì+¦ º‰¾­ËÈI7Ó-”‡QÜDLÓÙ‡ìØW9Bžú’hÚ ÕùÄüé#TØêó‰;BŽPQÀVióâ³Ø÷"õ"yžUò}ö Y2H‹',9Ó”ôŸY£^×QžqX”Ü)*¢ÝT†}ôcÏÇþ5aï6`×®€í=ð{76a/<.‚ðÃB@¨ÛèvxiרqÚæÓt(.wƒ²A[zìŠÌË% ü‚Ï2È‹ÞCbéìÿÛd÷ËÒ:§uˆvV½Bs˜^§¹ÃAÏ 4o }•^› D™ˆ4ú‡­I »Ôœ ؽ6(àðÚGh>àŸÿ•TÊÛÐ!Ê“ÃëÆ:LGNÞí{|Ì`«ÎÀÖ„`&Üôô(ÂfÐ=AÓqé+ÆEo=EU4„íšêéÀø­¥ç© Q»…þ0}ŽEˆË‚ñPÆCt/@Á©œ÷R ùÝO²9ÆÃÙmUŒvè,£# ô q~jÈ,7Òñ õÿ¿!-ù< ­ÒïÃwé?Òpü]@ú¸ýC¸û#@úc@ú ý ý)@xîÿ ~Gߤ҇?Hqµ· •3ìÀ\¯¯ÒŒª[«€iUÓ€mˆV{mT킉j%,ôù½v Ù´`ez¤Æq¬WÖB®ô瀵š¦ÀˆBrrås1ð *â³ÉË%TÆ3!0‹–ðlº€Ï¡5<‡š¸ŒÚx>mä´ |]ì7€Zi:‘ª±|—‘u{ ÈÙc@–‡Ã|©™ à,6 ³çÀc“¿ILxhæ$=ùüžE•:ÈWÓí|€†ùz…¯£wø àéw|ä›yßbìô4Yö(½Ó 7wÔ±ÓB=m¡ž1ªVÚ³Hîvô2¿B‚—|QK¿Dš¿ ǦžéËH÷*­Á1FÒwQ;8%^ÜÈ0åôøòQO¢¯Ò‹à;Η­ DWuŒ^Ÿ":YMO?V—ˆœR’·rˆ&WúgŽPÛµ„-§ŽÇN~”•%ФÑàûÈÆ÷“‹ Þ3ùÁ¬àž îÙtœ^3‚{6ý (ÎÓ×PÆ¥}ù:ò˜yªî²NUåqêÄNnl©|›¦H]¹´Õç¯:F›Z¯6#¹£-ÖȨA3$Ýð©ü,iü z)k˜æñK†QKŒÎ¨2cT¥uìUš‹$$Fy€ì òh¨7 *7G¿•.{H\Šì•øpä.“6M0z„4?ÎQÛë´ulxƒü&Må·hÓ°©ÔÔ‘±©$SKŠ,›r×ÿFª§-¨êN…êò,¨ªr j1 Dyβl>"‚ø} öPû¨ý¨}Ô>¦Jþ5NÂoì›…`]ÆÚº ‚ÕôÍ ‚o[zèOÇ ¨Èÿ—V¯:sRI¤=ð|áeº¢µÊs%r̃äD³åÕÙÒeÏ>D ^{¦ì9䀣ìU ’ßëò†}(?B……¶Ã4#3P¢‰?Àe¼³l¤RçáÎÞ³çœ=÷fýþþIÜÅ9T4\ב@EÇ%ÜPO73ØVÍ-ÕÜÎÀÌ šÅî(pW'aMƒ¥áCú™ã;ás†¤Ym1¤^]Ák8¾x=ðÚB¾ãm—|#èp·Å¥£úL…'NŸ¡Ò¤mñïœë“çZRôw(¤Õ²ïþSÝaÜ1¬˜ÕÆ)rËå¾m5CéøvÌ9’AwÐ –¦ Bßò¸CÒUóãEi”œK{ÈP˜óšœ›Á@vÄ+G¥6bÛš"XÆe²Ž…4PFÉÀöØ–5ÕÝG‰añ½ç¾Ç¤åíÕö5x€‡® ¤á‘:3lþg7 ËÓo¿iŸ 5|š÷zÂï2ìšs¦½MÂÒœ™0˜ ÿ¸6?÷CA+Lò.NäN`3$¾ài s`­§:—bçEi¡B¿Tê,€©eRÍSgÑͺsö•(PMG`+T E¬ÒU{‹ÅÄVgãÎ#5ÂB>Me ê™/ôžóÜ&‡ò_‡õ’ùì,Ñ"âÚ¢>K¬q1±N™ªÃâÆKÓ©ô(ï âž›LÇU\‹<7#æÖPK Åzt5h‘oŽ .org/apache/xml/resolver/apps/XParseError.classU[wUþ&—N2 m ´Ü)•$m‰Z@¹*”*m©ZZ™¦§IÊd&ÌLh b©7ð‚·µxñÁ_|ÁEƒK×òøäßðO¸Ü{2IC˜"/ûì³gïýí뜿þýýOуìÂHx‹ÉY&£LÎ19Ïd,‚q>/D0¡`o+xe\Šà]…ä—#Ð"˜RÁ´&Y&¹(ò˜•qEÁŒ0Ñ#(°¢Á“ÉEE\e™¥À†Ã×’Œk2ædÌKPìœ9—¶,Ó²%H“TŒk–‘7²$ZSÐæ‡„mkYÁ d1£9šÞg– ‡.‚M½‹:W1ó®ò”f‹ógÉ$68«]ÓRºfdS£ŽE*‡$4Îy稄p|r21&!ÔgN -ƒyC — SÂ:§Mé‚ÍÍŒ¦iVžïž0ääòQrд²)­¨er"5_ÐS–°Mýš°HV´SF4Ën~ )¼D#sµƒ%K—Ð\‰ÐNêüÙAR J²cE<¤é3¦UÓô==ŸE'o¤¸6+œt]‚ñÄ@EÚ_W§º?Vf’ Õ×¶Ùn„â\– u€Šä†.¡3î&Ì™ÚÚ|jô˜—a-"6‰ŠêUBÇÿèW𮸗½ÊW¨D"aoüÉþ=C!g¡HÖ‘™¼. ­@¬2j–¬ŒèÏs[ëz³‡ý«HaAÅ xQÅn&q$T$™t1éFBTÚª=䕇‹½Ê¸®âÞ“qSÅûX”°ýé=£Zº˜*ÞÄip·M;¼òÊ^“d| âC,ʸ¥â#ÜV±„#*>Æ'2>Uñ>—ÐÞX”㥙A~ïà.­ÊA_°Í|)ã+_㞊opDÆ·*¾Ã¢ŠïqOBüYç—*¶xfjVdhŠ6Ö·ÁU;¥Óº°ÜA¤&ì^Í}NèEaÙ)n•‡û­]©p>ýN4.ˆZ§~8fESÂúxÂoß·=ub¨´£ ¶# ÓåZõ«ØŽf9öxÞÉIhó‹‘~_M4kYVˆÚ¥)Û³l£Mò ©ÄE¦ª™%*k[E;o¦FHÕ!¡øBM…×½z‰žï'±ò[“°Å/ šö:pšÚ"ßVÉ|¬ò‹é3õRÁ¨¢ll¨x]±þûT÷[v=ëvÒs³ ž‡Œ/"@çnï¤utϤwvyg·wÒ^Ò©} /}™n“lÂkØŽC”ÍQŠî8EÖG–ý8€“Hã4ñÀ^„92:÷.·Ÿ2•\îUâ¤!?è%O“ô ù Ò÷Ã8âe—¢“õÃɇhúÅ-Õä ϸ jEÁ‘(?ãp£ñ9_ã×}åFã _ã7|CÆ—|Q +ÆGI;ÀÚܨЃšµâJ3d3ízh¯hÕªÛDH¸À'¨š_yª'k%’TÀÐež„‡ÜÇf.(§v™Cü J2ÖÜõ-+p1w¬r›§±¥áÔë`5Ø5ó¤ {ª;çÁöÖÁf.¼j­ÐîNO‘¸JgÑ6Ø$/ÕÑ[ ¢·Ä€î2CËô…~Î/÷‚¾N¹ß Üo>5÷¿tì?ËÖKÝeĆ{"ZƺûhñØõe´ ÿŠö?°aâ6v•±)¶™HO•!»-el-c[ÛéÒñ#:Vô«*5•'¿í Ãý¶s%¥NÚ4ЃÆ-´Òƒ»•žÚ4îbÞÐ=·qÏM1Y ¾–âiìqguÉM6@1D2ÞÔa×ÿ™ÿPK Åzt5£;; ‘+org/apache/xml/resolver/apps/resolver.class½X xÕþÏìNöf3ÙÄ`% a)jÄM `€º’€Æ÷dwHV7»qw–@¥­¯¶Ö¶¶Xh«ÑÚª †(>°µ ¶µ¶j[m­µ­jÕúÖúê¹³3›,DÀïk»ßÇÜÇùÏãžsî¹'<òÉÝ÷ÁƒzšïG6øp¥ 6\åÇ<\-×l¸Và:üPàz?nÀ@1ºq£7áG>ÜìçÅ~"¹n)Æ­¸­›°Yàv?îÀƒrs‹Àï¸[`«œÞ#p¯À}rz¿À6äô§?8KNø¹Ûý˜† ò³Cà!9>,ðˆ¿À/}ø•À£~V÷k©ý1ßH«~ëÃã~4à ùað“rüÀï}øƒMRXž’|Ú‡?úYÓŸäâ? <+ðçþ* ø»ŸxAŽ/ ¼$Ǽ,ÇWþ)ÇW^“ãëÿxCàM·ÞxGà]÷Þø@àß |$ð±À'ÒòOý¢bnô‘â#A™]ÙnBMk*Ý2úŒhZÝ›¥ÍL*±ÊL‡zÌDŸ™Î„H`#¡¨)žŒ[ÍOí´oK*fÊZãI³-ÛÛe¦;Œ®ïT´¦¢Fb…‘ŽËµ³éµzâ™Ýi3úú2ùkóöñ$alí ­§«ŒPÂHv‡Ú­t<ÙÝh«7ÒÝ,pÌ(d‚ß>\Â\e&øà‚5,#‘ê^O˜i¢Í”µâ‰Ð 3j¥¤FkïXÓÇÆúËËc x“F/E_¶+Fb<ͬÉXf¯œz²é8!`tña²–ÙnØŽãù„m\FÊ&–Q9BþÂÕQ³ÏЧ’RE—‘ar GNšVhù²VÞWYQœµèÄÅFbe*ÝkÆ1R„/›1Ó±8+RÌÙ*Ç Ë/BŸ+•JdB-… ,R¤óÌÕŸÉì°Ic£©lÒâìŒË,(bH6ÁkÞÌŒ¼>RšÍÝÒ§MÑ„“hþöT65Ù¼¥®ø™òÜNǶ|ç8òQ룑O#A>¹ì“ŸŒü$å'+?†üÄ|T¬‘ŸJ4Äqš4J)À95J@4¬—ú|±TÔâÌШŒÊ}´Fè÷Ñö¥JBý‚%-KêióŒlœ Ös ¢§Òz.?ôxÌLZñ•q>‡Æj´“)‘Šf{™ Qýì'‰±Öh4^®^ØÖéè*“OŠÜpšLY†m;UI1 mK:æwD–´}^AE9²FûK1“—.?¢5Ò²Ë Yrr4š`³´w¶w,\<̲«&Jä˜åË"Ã0Cç›ÄÒÆî|È®\i¦5šD:a‚瓤,†§Íhª;ÿ’ÓO7×ô§Ò1\M“Ùò6Éãúè¦ÐTÂÄÝßæ‘×g&ߤjiaßÄÎ:o²³Îý8Xa]£ƒévÓ•ËsëµÓÂ5ÈXLwiN^ïÆ•Òê\Ž| ï–gŽä™âò8ùZ;:ö0â#w±N¢ÖŽD4R ¿.B&h-ŸTRš$eªóXÈ,ìO§’ÝÕsõ~ìô¨‘¬±ô~ØÌd5'Â2»öIU/—¥.¬»áÕOHåjáInÚòKÍ—èØ3m²y³ê£ºS»e6ézkʈÉëÑg¤­x4›0Ò.]—¾2듹ÛíþÚM+£[=¦½Ë€õ}ºûzF»Ï3êÝK»3z´‚1·ÞÐ ~‹Ó͸ô¢û>ê]&_3çlîêM¨ÏÊtÒw5Ÿ9YÔú˜OZf7;Ï¥ÛdûmÕí—Ÿa‡;îÌ‹‰¸fæ„ÉR®§VŽP­[)»yCÙñ ô~Nù¯ÓÝ‚]§çJuîV[7)Ý4ã°ßÎb¸ÐÊʦÑáðQ³FsigÒ^õFw}I×iü챿ì­x*$ßʶ”µˆŸÝ؈R6Æ¥G–ŒØ-âBk$øi¬¬mÝYfã4nWEPÝŽ ǬX ÕªùC‹ É %¹h˜ì+$/a´$‹Bò%Y “µ ,’ø#Ãz¡Á¨”¦Elò Ž’„'™Pµ«%áèÿ¹Íy£Z¥îN†Ntt/þÿéncÝx†¡Õq¬Ô½ä¿!ܽTŠ>‡S6¢AŠ>f¯xy±Lrɰ‡³}¯bÌ‹É,Ës7gà ÉÈ3l⻿ÇÓ(WÊ”±J³”Fe‰²ŒÇå Ŭ\ÁV&ã|.ÎÇðjWúv.Ú\š—£+P‰c1Ç¡ ˜ˆ0'2ßI8'£ §`.ºp4¢hCŒ¹LF÷ð*Ž•ü^$ø­H±†3ùû~ÎãGà°ð}dq)VáJôã| 73â¬Å&|÷â,lÃÙlù¹ø%s<†¯áO¸Ïâ;xžõ¿Žïám¬Ã{¸˜—ŠK© ëi?\FpÕ`ÍÄ•4WQ®¦£q µc#uâ:ŠâÔÒ*\O_Á tn¤ q]„ÑzÜL×àÇt=n¡[q+ÝŽÛh›h6ÓvÜAáNzƒô¶Ðs¢±U!Ü£xq¿RŒmІ”2lWªðûóa¥(s𠥿VŽÄcJWVáIål<­\€?*ëðŒ²V®Ã³ÊM<¿Ï)Cø›r?þ®ìÀóÊ xÁ£âEϼäiÁ?<íxÙs<^ñt៞^õdðšçL¼î¹ÿòÜ…7<À›ž—ð–çu¼íyïxÇâ]ï!xÏÛ÷½1|à=ÿöfð¡÷"|äÝ„½÷ãïv|ê}”»ŠW‰¼¢‚<ª ¯ZCªzùÔFj3•¨Ç‘f?æor&ðƒÍÌÊÇ^]Á1ì—ÝÚ†ÕXÃù£©­Ï~xP¦F8ªk9+ÔEø2ÏTTª-œk¹A§ÎãX¯…Uêáñµ˜¨†9îçp“P­ÊÑïç\ÜŽ çÀZ”p€3áëÐØÓY΢óQÂþNã›<ÓØë:S/@)û>ˆo1G€=^ïì­bþoó, \ <Êyt!ó®c/—sIS.Vä|êgÜulÏE6ﲑ³”g¸Ønh\Â[,ÿßÒé}æ=ùËÊ»x,_79çŒ;­wÆœñDg<ÉOvÆSœñTg4œ±Ë£GÐi ji_Ì¢JÌ¡±˜Ç—ãH‡¥Äq4§RzhôÑDX4‰]YþX“í~ ðÁ¼+oG`XW®¯;š¿—Û½ÞÿPK Åzt56ðf° Ý)org/apache/xml/resolver/apps/xparse.class•W xTÕþï{3yoÞ¼, ™! QD’ŒZšÔ "È¢Á°(ˆ€µò2y$£³„™ ‰J­­X­Z´jë‚F±Ñ(*Šè`ÅR¬Š¢UëB]êR÷¥¸Ö­ÿûf&,Jó}¹÷ìçÜsÎ=÷Í£ßÞ»*ªE‰c±\ÃE,×q± üN"—è¸TÇe:~¯ã:.7p®ô`®2°Wk¸FG—×â:+ \?Dº=„är£†ƒûr¹Ü$-Þ¬a•[p«DnÓ°ÚÀ>¸].wH™5:é¸SÇZwi¸ÛÀ2¢¬Ü×é¸GÇŸ$x¯†õªsvïÓðg$ý/6â~Éù«ΟúnÀ8È”ÎÒ±IÇÃ:‘j›u<ªã1Óñ¸d?!—'%ëï:žÒñ´Žgt<«c‹ŽèxÎÀóxÁÃå* /jø§€»ÙnjoÙ˜Lµ„¬6+Òj‡:ã±PÊN'cKìT¨ÕŽµÙ©th²¬(MD3ãÔªQs\“’Ͷ@ic4aÏh7Ù©9VSŒ_c2bÅæZ©¨ÄóDW¦5š±GoV[[:ÔÙf¥Ò6}¹âV4!¨:±ñk‰ŠY‰–ÐìL*šh©wœ[©š¸¶€FË¢¹PvÃ6œ“Çì%vL@4P>nuNI¥hOK¤'vX)jŠ\bÅ¢ÍV†jfº5Ùq‚•J£¤!Q*%¥š±2V,Ù2•NÓ}^Û3ÑXh®É$Sô*¢ºã9I¥AtS:#v[&šLÈDÛ F ¹l'ª¢”m5ÛÄC{Ì^&™Œ¥CÇ9(œ%Ó(½jùÈöۣ¥Ý‘d{"C¿¹ì©m\GÉæ9¾œLЂÇ)àœÓ¤bQ"<錕ÊÌ‰Æ —äf²•‘µVÒC/Ò|Úê Íž8¯0!šhΩëñh,MÛfp%”–ÝMps·&Ûe¾t¦mRî$V3‘‡>“i /ix™’ã"±|S³©±§:'÷æ±FÆJÖd»-e3“v³‰98ž§Ø¹À6ñ >í=ÁµÒðŸIŸã ª½m™Ï/Ml“}…¯™ù;«^”LÅíf—„·Ó´cW[¹{éÛA‰¶$’)KV6°s8G¶/Z$/Œwb&cÇÛä ®4ñ_|Ã¤Ž©dkV:‰2ñ?|+PÒ¿%MlÇVÁ{jH†E´²KÓlR!L¡àxS¨ÂEÎ!+MáfVD‘ÌŠ¶Èb9š+åôhDl»ÙAD•Ôׄù_ÃG‘êîˆfZ©®ã Sx¸PÆ‘Û2od£ƒb•VB)I$sœtž Wvä†Çyy$]£ ¯É@‹†ïÅ(îWê™M§°Ù†9¤h2$/ËŒdf*ïWsAzöòfP‹ìÅíVŒQû«w¶Y?ŠãVµšYò;x ‰ŒÝ"˨;±4ÈR÷Sî}8ÃGìÕ+FSi;“]U ò))ìåÓÒlF’lÏôgžcÝdè̶âõÇ+ ³¸m‹%ö¢|³ìÎhFVª·ƒóOÑbg&õŽéáU£öbP{옷™‰NFFíšP}À ûÂIkêJGO·×ùtW-X ƒ.a¾¦[Óí´?¬^) ÎÕ=š}“ÕVÕov2s±Ÿ8ÀÆì.1»rw—Ð3ÉE ¼jW9ù^å{tÌî:jφ ¦íœÖT²#÷…RÚ–+§9uNŠÕaIY˜Ü³ÃœL“@1éSeÖòKEÕ´ïñ&¥œä¥K‰ç¿#úô¾GÿÀ¨ãt+a9·¤Œ†~&é#þánÊËÖc?~% 9S ù8ÉOQÂ|î¸Î%âΑ÷èuk(8k‘Cœ‰y\ÍœæcwNÄO)Eå¢-pa(-Þ&ÕÃËŒñ®Z—«Ö=ÔÝ ÍÕ—Z[äªÕÖC™¿jXWk==Ø2Úï9ÔçÊÂ}%.óˆ . YЃ¬ÃÓžG­u÷ Û¡è9ŠKR.q(ž^º9Ë¡½2¤$Š×¡B A㘇]À(šEIaœ=p‡½=ëh–9šÃûkÖzýÞ(ò{ÇçeÀ)ä÷ŒÞ°rûèƒFéàóe1ÐuÊýîµðû]kXAÌÀ`i(‹`ث֚=u¿™Å¨½Áâ,†.3…ß ò¸ÃVnc=ö™ï×üEë°/ЇeQ4¤Ø~~F§ûög¾áá¿KbHlD¸tXÆ0Šõ8.Gúª²,áâ-¡R Ä%‹1 s=ª)U. $†z0*< @ù©2 ‹CsÒ=0¾ ÷£^½’;6È|µë|žºrO]ÀS78à+Ç/ëÂ@ˆ×•;ûâ:_ ¼uCñº€³/¦@ —pƒ}q]`X—˜*“zXayöú.”H|ñœ-Áà Ê}<÷À`­ Ûq†Àà,ŽðMè=±#p Œ@`g¹@¹N¹äL$'À£ÑÇö™ß'åC›\;DnSj+üCºP¿Ã‚HS}GÚöqu³hGË¢5äíLsŽä•à1ýýTH#ýŒTìjdâ#Óó$²:ñu±ÛÙ—kxi»q?D)¿l?ÀÇ(Å&±;û»¤;C@¬Æ©¼ðsÌÅQ qÅA¡8 #p2ÂBÔÁBM˜ŒŽâ×èl´P³•§ÂFŒPœP:°§#…Ÿ£¿Á\HÊE¤¬ÀèÂRFv&VáX³p7~‰Mø56Sr ÎçïÜ ñoùq½ïSëS\ÆÓËñ5N.\Ū¢ W‹r\+‚¸N샕b$®5ècqƒ˜€ÅQ„çàfaa•hÁ-"ÛÄR¬çãv±wˆuX'6â^ñîïcƒø÷‹mx@qãAEÇCŠ›”<¢ Âfe_<ªŒÄãÊÁxBù žT&ài¥Ï(ÇâYe>žSNÂóŠ”8^T:ñ’r^VÎÃ+ÊExU¹¯)ëðºòÞT>Æ[Ê6¼£ï©ü¬WK°UˆÔj|¨NÀGê1øDÏÔyø\Má õ|©^Œ¯Ô+ðz¶«7ñ)»•©ÖâHTÊÌÊüLsuë³Ü¥ÞÄ 5±–šzkÔÄwÀP¯G3«ãB±z­üÁ!T/eål>C飕†깈âè¨R—±ŠM|ºYù-¬XÛ¼¬Í $Ú[”m£œ—5ÊsÅHåÖ>CÔ(g" i‡(g°š`²6»a!Š…¥Þè$´”™=´q¾²?{d¡Ó©[Ù)KQÆ À.:X'·ãÃ'¶‰»Ø;K1@q ¾ 쟢‹nüŠP¹â+q6¡€R"º°ŒÐ`æûJœÃ†0뗰ךPsPÁyì;}×ûVîï<„ŸƒwaæZ¯q^Öæ,j]à<¢²Où÷PK Åzt5ܶ5ÅA 9(org/apache/xml/resolver/apps/xread.class•W |Õÿ¿™ÝÙÉä`Ã&¬I$ È&@)Müm-W4%D©›!Y݋ɡVëEµ­­€h‹Jj,vUÚ*‚ ˆ‚­­g½¤­Ú‚÷QzÛï½Ý Qòã½ï}×û®÷}³}uçvȘÀ|Ú°RÁ* Vª¸RÃH¬æ‡«T\­â×*~£bŠkT\«á:¬uc>ú5ü×+Pqƒ¿Ã:7jø=RnRp³†2®í ëñTñ'·j¸ ¸îÛlÔ° wðCZÁf £±…/[¹Ä*Â*¶©¸KÅÝ ¶k¨åÚvðýVñޫ௎ÆJ®÷o*îãÈû5<€9ú!'Ä?ùµ,€)*æfþßôˆŠGU<¦âq.ö„Š'U<¥âiÏpò³|ÙÉIϩإâ*žWñ‚ŠU¼¤âŸþ…—Ý´ô+xEÁ« ÎsIw'ÃØÖx²3`$ŒP—è‹FIÓŠGzÌd ËŒ$̤˜É\S±°=•Aö×´38fÄ;L†âÖpÌœÛ]b&ÛŒ%ÂxZã!#Òn$ÃüœE:ì®°ÅpäAo3 +З4ºÊ5Â1†2ÿ©­g=F bÄ:óíd8ÖÙ(î6’¤­ôd…ô. g,9YŽGÌ3ÂÀZˆ?jôÍJ&IŸ³¦õI’d‹ˆ±Çˆ„; ›ÄÜÝ–9ŸŒŽ ºÕï]`$cD!)IAœ«ÐC†mDâÍd€5hA·ŽÚÍO’,Ì  +,;IGºÏ›g鬾™°Ãñ¹I†q&‡),tñ™tžtÐ@ÚñxÄ œ$ŽdàÂ9­' Òv˜âܖј?maþUJÖr†QÕ=#ÃBÜÎP¼;f“]™HË} Zk¿9» çIË‘" î?µÍ]1+¸-ÛHÚmá(Á%y±›iØ&ÉHVjÆ:2j4‰„-3DAœM¶dñâ ÇhsvÅ»yÈTŠÜŒŒ±nJn, kƒ¾[ þ­à?Ä9%É–¸6Ÿ„Cf³pNeYǭѱ É´}³J¦MéØ=:^Ã~ìåK_,¾Äø2—/ ^×ñÞÔq2Ú¼¥ãm¼CÕ|€àü³¼«ã=¼ÏpÌÉ–Ñi«)Ìu™0×Q˜ëra®ãa®ÖVŸOØÖâêì[Pð_àCñ«&~×âa8ªË¶Ág¯ãÒ¼‚–š†ÝM²˜5-RgR,?Öñ?|rÜÓâNÌ2fÊ•èxVöŽ8X+øTÇgø\Çø2—§¼÷¯à+_S¨bƒÿÛÖ+åI:“ñŽÎÌÉPÐkF"–Æ“Q³ƒšà`&™âÙ‹ wÆâIƒ×\Ù¾æLï^º”·`šm›Ño5Õ:s1…ò>¾šÞEµx$:S™›¡hè{Й†énò¿z0A!_ 0]g…X¨³"VLz„'D*á®ã®+K ª‹ŽjÞ¿ºC!Óìæçò‚ô¿Žì¨!¬³7lw‘x)c:ÎóróLb¤±U1®¤(ÏP¬,B­îÍ´KjDˬ:…•鬜`}è¹0$',9“C•@…ãþTçÆífzÝyϧ4Go9!ë2—u2ÚëoÝWgc õ~Ùè û†í¥µÄl³“§Jiáé"œ›N4PÆ|«‰Jª,Ó΂ Ÿkùõz¶E%A–Ä»íÁù@~Ì£klºÌ4¢yîå¡)· ~ŠÄb" f_˜ÔŽÊG9ëèÑS0m3ÙMDxy˜vsæ-ò‰¼¿¾E\áwè(夸ӴgäfÎþšo1uÜfÄŒš1{šˆ~KÍþÉcy5T‚"…ƒG‡>Ç_5”;§‘𧈼žcôÍ1-Þq©RŠ !ZÁqTÒn•È8Í'Š»¨tiT1Œ?PöCez9 Úñ †a¸>>|…û(ÎUïÁç ˜¶®d¼7óeVœÈ”Ž:«-IýŠÊ‡“°“Ùü:ÎÁPHøfµì­ðÏþ†Û8·ˆI–»˜ÎÙ¦Aù–o?êyœcÄ ñ"KH1™o‡Cƒ¨ÚCWS–·£èBxûÒø<æŸàÓ˜§õ:h§îgíf° HXD«K çâTZõ NÃbÚÝøN'.VŽU¤ñÖ*7•hSõG½S®wU:×Aq¤àëG½º Ò)›!Ýr½–žZ¯6ÉãHù¥—hÌçæˆ4\ Rx@ÐA#ng iQ3ǬwãJa•Àh9)ºø)Èñ&&0ºÀM·òc°ÀW°…M•×¢ìvU¦Qœoy ΠžÂd!9LH1T²^÷ê×ÂåÕ§fyUNl%&¯V»}àëãîGñíðxJÓîØï6”Q$ʹ¸g„—bà#à0¯“¯k 8º‚c…:Ù_ÔåúÂñ¹½…i~F‹|º¯(êK ™·ÐG5ðõ«Û0ú¯êU6ãb(ªJãH_gã%»UÏQ¤Ò36Xìu𓟟j‚%UýOömC-™5Î3> ¾bZr¼>'çáÔE²Ál(u7xÝ åî_Yép³º¥ˆ6xž¬¡´Ì;AAà@´¡\ìˈ¡–¯b ®¡o͵¬g0®gU`cp«Álnb¸™ÍÄ-¬ëY;6°ÅØÈBØÄ⸃õ|1¶°ØÊ®Æl-îbëq7ÛŠíìnì`»q{²Ïð°äÃ#Òáx\‹'¥ÉxJjÀÓRÏHMØ)5ã9i.vIíxA:/JxIŠãe©¯HàUé2ì–.Çi5^“®ÃëR oJ·â-i3Þ–¶ãé9¼'íÆû2ð<Êcñ±À'r=>•›ð¹<_ȧáK9ޝäshò]ÄdùRæ˜SÞÄ\ò¦Ê÷³ù1V$ïdÅòólïýäïhÞß)SŸ ò.ÊUˆæCÞIÙ2)ÇŠü4–$C“Ÿ ìuQÎ åG)]T9%òÃ8“ *å”É.ª†‘ò]"³*üòFÊoŒfÊ8ù6ÄI‹F™ƒÝQ@9e= þÓ®œòÎqŸ‘”M|:e-Ke“¤›ÑM5QÀÚ®—p‹¥ó©:Î&è é\ª…”/…ª%„"¶B:žjæ<‚ÖKq>áŠÙVi4~BP Uó[TIbeíHª¥^x(wNq[©4–mÂÅDõH“YŠªl9áØ:ª³åðJA6@Õ¶åRëÇeù(kð3² ‚2± ?'¨¿3V¢ªü%yô«Áq*v!ŽñÔ'x¸ó[ž2Ø nÈSû#³*>^‘® ¯ð¬XNÓùrÁlب¥xøñÝ&?fѪhÙÂ'ôžMŠëÀìú½µ…¨°pà âÑtÖˆ‡hˆœz êþÖHг}¦Øæ=²ðÎnb{Š žùA8º…Iä@TŹýÂDéx^ß °õ@<€Ä$u¸üîþî=S p½L{îgQf'þ g6 ì<íɇÍÒ'ÿµ‹#¯é†Eš’×—î`ØwÙ¡ù–‰Ÿáòkw6H;ê´þð°U„¸ˆ+ì †Þ«,H±D_…¸Ï@rdSR+%eõ~½¸#fGQ@H08€z\¤ƒ2²s¥+Ø‹«¬c/– ì|5gç%Z!:²ÌbD¦ÇUðæ«ƒå™¬%Íï6ø˜‚ÿFF©´TÐÊ%HÇ-[ì‰õ˜Ðoü˜é°ÓC¤-NÒDVÍ\-Ê>pZüöSç²™P-/ µ‚õTÁy#§ü¨`U>:^ÅdO-“À =ô¢Ÿ:ôìUloN(_Ô*ÅN”gèÀÔ‡Ô1%Ü~ü{öœY“CrLh’*[) âºA3±jü7²²°¢æëfŠò¨øøø$ý¯ÜýnÄÚ Pêy9š©*ž¦eU"'©Ícö PK Åzt5Rª×”¿A'org/apache/xml/resolver/etc/catalog.rngíX[oÓ0~fÿ! CÀ u×I„´cÚª´›6MBCyÉY©q"ÇYÛýzìÜí8éÐ`0‰>DÏí;ß9¾ÅÙ[3ãhì‡dhnõúæÞèùš3¡805¸”ÄCsÊXd#Da†dÒ é‘ÅŒ&.K( a÷|Í(~Â$¡ÄqìÇ6ÁÄ6sm ÌgK;õ)ž¶‹ž…“º©Ç‡Ø2‚#ÿšbº,CÏçóÞ|;<è÷·Ð×㣠w ¶ ‹ØäÀ…'gݲŒ±g¹ÿ%c0Øíïö n¼mõw¬ÁÀØÚ±ßoÛÛƒ+ƒxscð¬ÂAÌ0e£ •ãNCß…QÑ¡pcˆ”†æAª¨¦ë ÂKúæÁO 7Œ’ë±w0Å4ÅœšŠ, ‘ÆÐä´údbV#Ì«Q˜bÆ€sô [wûÖUßú`½zýæí»²‡{×7_|Úøñòû¦ƒR«™ðŸãÊ ´›ùîØ•ºñ–ðª¤kØÑ=r |<;ûÝ~ãeÌ 8¥™c³­V·x–À(SvPö¦³”e¡RÈ õÏá(tµÄdyy>¾OF§ãSÏö/ÿu ê0UÐq¡”ûžP~V<>,ûRD.-ʯÎÐð”‡4qÊ!1H–'YO«Ô±2Þ3k·±#ÄVQðãmŸ\hYÜ39wb÷ŽI ÜåQ–vHË´`ºÊÖQvÈ4hÒÀáœôºFÅ®²!óØHÀÜ‘…Œ³èhqTˆ!žÀ¨ÌnN¨[fël™íò& •o^užÜóÆâÝU¦jv¼_ÆÑŠ»à¸TP¨ùl2å>sø¸u4ì£ÃÇDÛrÍÕ|pÊ L~îq1ÆP¨©º£?þŠ Lך®xؾ›ú2×í¬â¯– PK Åzt5&þ@¼Gå7org/apache/xml/resolver/helpers/BootstrapResolver.class­W[w×þÆ–5ƒ<Æ bƒ€€'A¶lO€–RA¡Ø˜âb bsMzÉXÛÒŒ˜^’4MhÓ´”$¤\Ú4 4$mÒ˜–ÈIÜÚ&8Íêc_ûÐÇ^?¡«ßɲ„¡keiéèì}öÙ—oï}ÎÑÇÿ}ï}T£‡°GC¨Bf>G ®<±–Up,„ãW0Âr<*¿¡à› ¾¥àÛ Sð¸‚'|G¬<)†ïÊxJÆÓ!,Å 1|OÆ÷ÅÞbxFp~ ãY? ¡?ÃI1üX §„Ìs2žуç´˜½(ã'2΄ІŒ‚³â÷œ‚ó ~*¦tª?“ñRëÃϼÂ/ðŠŒ 2.Êø¥ŒW%Ô§Sݺ§§ìуƒÛ%„ûëÇt-¥[£Ú ç˜Öè& uÛ–ëé–·_Oe²M‰/I¨Ÿ£÷d‡z‡Ë8ƒ®àÔ—K,Èd‡Rf²_ÏHhÈÍzfJÛ©»cž>”2hw;ázFÚ— f3?ÙlZ¦·EBu´u¿„@·=L—êûLËHdÓC†³Wì‘ØI=µ_wLA˜oÌt%¬ï³QMÏèÉ1C£«šc¸vê˜áhcF*c8®ÖeÛžë9zf °Bwª³NJ¼³–áiûú:…Í=–gz¶Fçc8ŸÓê» l»ú¸Öke²Þ u’"n%€IÉCàO v8•ͼ¬„ÈmÔPÊs =]Ø´ >›’Q\ó}ëOÏ´-±»`NB×$Xã¾/ÎrGl'­ Œ9Ɔt×ð¡4ш£¦ Ë£µ1æ}ÍÜH½Ì1mgS‚-Ä 3w¤Eå5Í߯§„c˜Ëe~ëCn—o$è@j©èšlpÛÁ¢‡¡¢z¡¦õ#ƶ!"õ¨áþ ´VjyÄLåÐáuԚ׿Ãå×8¯¬:…;À6ZR¡ Tt¡[Åv1ôˆá^“ÕnU¿†—Ô’ùFëö†e¼®âWø51èдÝÛ{5mûÞíMûûš é6í_Ûù€¦õ$T¼7UüoIèó¼L\ÓŽ?Þië®évØÃêv“v:mzža¸šá×<ͧ B® =%ÖïÔQÇý úZîÌà¸;ü)ôµ´ÞÖàxK: àÏc>‰Ë*~‹ßIXtsAIXz‹ö%sEÅÛ¸ÂZ-=Tä0¥â¼;[PåÍkQñ¦UüÃû*®âšPøG «nß_*㈊? —ÂÃÄ»RgíN‰ÝÆ›£ëÊŽŒOÔ¢©&ÚjRñg|ÀîŠÞo¢¿­Â·%4b«¸Ž ñ‘Š¿ˆ²_ûôeiØ=tØHòZ^š†üA?'¿º’_ûzç$”QÃëNé.–%ÑÒsÃgòب¿‰%¡–[„‚ü vÏ­ÏŸ¹‹HñìÙ²¹+ZñtªfýHØXª,á¦ùœÖù,z•´-O7-w—Á›®¡‚¢Ö‡h†¾ßtfÞNiC¥àxµ×º†·§x†DwÎ^hKgã›w¥ÕqSׄgÌJ.‹VúeÓ6Æw܃^ñɹH£½½AmˆVæS†5êùêj‰–ç«rÌAãhVO1ÿA=Ãxwû]=ù^¢Õ¶Û_Ö{Çû¸ÿ¼Ö¬’CEÂÊè-ßB~Í'uÓŽÙÛO÷'ghæ[u#ŸÀŸG "Ø„Íð€¼Å¤·”Ðõ¤·–Ð!Ò_,¡ëHo+¡—ðËëÑŸo/üöø¿ÊðNå¸Vòe_EîŶ)HmÓ¨:4…ê·˜›ÖÌMƒm9Èa%‡}±ëXÝvp(–CmêR5áº"%$$s-®/[[T¶¶¸l-\²/™]»ìGÑËñËsL0–"³“ÿvá>솆=X‰Ä©}8„ýø*àOä,ƾ‚ø:Náœ†Ž HRøÇÁÇ€Zúø«ÁC?µó|¥–=%HÉ\ÍH‰öë¸[„ÛžÃ]g.L®¡1q «èøráxÌ_­/LýÕŽëX7¥‡:¦°,ˆ~d˽"^©Éae< D‚9Ü LÆÒ¤4Iû[y·ƪBôq,ä8JÊdFãÓbýØ” ÏøÑ°ÚG!Z1{Я1ଊ ƒœUSW3öɵ-öQ©¡Îq=€ µVá WDMñÎ#%úéÔv#–âXxuMjjΣ!VÝÀ ›±†šÀ#9ÜÃãA¶BTA°E…©Œ`gpRŠËí3XZDJŽÈ,‰xðÚ¯]ðni9%¢\BàFÊÞ["»3.·Qôþ8e˜®5çPÛ‹°š£“Óh=46Vy,Ì¥êêwrDXãÃy k¯NcÅÖ ½"“‘ S™Ãg"ò¤_'Ïâ$+1Ÿ§!,ãxŠÔsDíyöè ¬ÛÓ¬Öq/Îb Îaγ+_âΗ™W˜· Äó"ëòU¤ù¢} ¯QÃ8ƒ7ùõ-¼ŽËøŸ0Ç»ø7ß*"ŸBhóyƒUžÏç V>ŸÿÁ×ü|ÖàŸ¬ÿÍÌPþÁLêä¬Á }ÝÌ|îbçˆË´½š>$X)§èß0 òÎPf„_…Ö³ªÆÈ3 'J+mðý“ïú]M.Лas¶Oä#Æ,õÏÚÉþØ;ØèÓDl’e4ðsÛ°‰ŸYøVùív•Š®qöáCJ|„|¾4ã¯~è[è4ÍCoñÃä;…a‰@ª¸£Îw¿ŠûjX° ºÖL*M^5%-ÿP±ÿPK Åzt5¾¡q´†+org/apache/xml/resolver/helpers/Debug.class“mOÓPÇÿwëÖ­V˜ãAq> …1&£‚ø´!N$&$‹šŒø²—­ØµKÛMý2&¾÷F!ÑÄà‡2žÛ6E _ìÞsϽçÿÿÝs»Ÿ¿¾ý@Uw]½KFÓåíæ>Ò5S·ºZËs «[å)“¸)ðÎl3”ãªâu$wÀ; µÿ«ø ‹ÐX gj³Ò²‡N‡?3D«ÿfË¢PÅ8r*ÎcLÆk¸+㞊ûx@=­¼9Üß玊‡¨1$jEu¬ÓÓeæÿ«ë ¹cÍíÞñN¤Zï\÷©åö6¦‚«¶ö’Ü=bàzŸZ9“¦ˆ•iQ]9¾'i}0àÖÃRÜ3©à¶âCñì Ã0Y>{®ŽYúäUôt¢“¥)¦ÆÒxVëHP(•#°Jò+Ÿh•@žÆ1úë T9‡,1A+58ILùªÓ¸*mPUBèW 'T?[¥ÿÖ²¯0œ Dt‰œè©0ƒË¡–æ¯Tå #©´Ÿ\ý$p%,Þ¥Ó<'Š  |FréÒé‹=A›ÔŠ-_¯ÔDX9\õ±DTÀ5¿M\=FtZ¢¹zÉã;R¯Ž&+9Ÿ¡¡J¿Cdcœ[伃y"Ε@)r.EÎ¥ÐYDEŠ’>ÃlÈðžÖ)š!CíŸ Ç›y…’3R ]Þ'é]è <ÆkŸp-ð‰a#"là†O(¢›I´?ç+ÏÿPK Åzt5šêjmt-org/apache/xml/resolver/helpers/FileURL.classSmOA~ w§Ô*õú‚¬Š¯Ai4šB@0¨_–vÛ^ï.{WŸüü ýRŒ$þýOÆÙ.¹™ÝÙgfž™ýùûûtâ6ŠÎ`ÈÄ 7qËÀ° ]Ú”Ñ:«EÎBy£yŒi$×⎉»îgèžt}7žbèÌd—Å ,ú×—oõU©ÞŠU,)'( oY(Wïw‰¸æF Y'PU.BQªI¾Q÷¸’Qà­KÅkÒ ¥ŠøKדK NÁ¨‹OzÉ0”qÖĺàžð«|1V®_-dÛ&_Ƽ 7C×|Qo18§pHª²«¬%ÆnàGîÓ~1h¨’Ô™ì]c:„Î20nà‡xDçûÓ2¤ÿÏ4Ó¨T$%1*g‚sñÄÆ :Ø$ñÔ<ƈˆ§6¦0mãžÛ˜ÑÑÍ]/Î0rÂN1$ÿq˜[]“¥˜a`å¬ð*ªË2A÷ê>àÓæMmˆb¡âè×újù{†Ò/3Œ'‡º¡o'þæ9—9Œ+“qù ÓÍ(–u†ÞªŒçU@]ˆ7†OÄDO€’¡'JtÉéL±x$ĤÚZH "IÏFô2h @ÌiÇI3Ò]¹m°¯­ã~’Ý-ci’v€ó¸@ºq‰PÚù…ê ý9—êh¢s ;H¬ì keÝ)£ 3G=Û°¾¤z¿ÁvòÉIÞÄ)'¯]Noah¿KÁóÝŽ:Ö®û1{´`|E$_Ókw¨€YŒc“˜Ç,´ÊI·)ã2®´J\ÂUZÑŒÑ.Aúý×[ÿPK Åzt5Ò7NrÅ0org/apache/xml/resolver/helpers/Namespaces.classTmSW~nÞ³YH ’R[¥Tżᶥ/–(Šˆmt +uF7á6³Ù¤»KŠ_Ú¿@¿DѧŸ:Ž?ªÓsw—€a?˜™œûvÎyžûœs÷ý¯ß"Œ9lKÈa.…$®& Hø _ ó0ó)|‹ïÄìû8~HàšpûQ˜…8*Æ0—Àu1ÞfQ¸ß”0‰[Â,Åq;Že†ØuÝÔE†p¾°ÅYîîp†´ª›¼Öï4¸U×ídÕnS3¶4Kk3âìé6CYíZ-EëiÍ=®ìw Åâv×xÎ-e=nÙJMëp›Î¹]aH¶¸óÀâ»ú>C!ïÆþ>ßTvºeÅàn:•‚ÚÖžkŠ¡™-eñt³Eqqî2L“p×€èXχ” Þ½LÍuNÓrHos½ÊpíCN5R¤r:c ňéÊ—=€˜¶æ8ƒ´Ñí[M~W¦¥¹*ÊøS2î`…qÜ•ñ~–QÅ=aîÇ¡ÊXEMÆ0LèÀ¥˜¶Œ‡X—±:Cn”ëíþî.'.1×uAÆ&¶d<ŠŒ_ðXÆ,®È¸€i†âÇ×–!sŒ³Öhó&‘‘HߺÖòÄ>›”-3ºGÅÖ;¿¶Kšæ«ªJÒî7lÿ0—¯VMæƒ÷3£õ`H‰ºÓ¬þG»Ý¿Ajðßúša‹<êèM*…mê=Í^¢"ê¾ÃGÜŽúbÛk±n³An=ªõzÜÜ¡õQ^).áttK³¨¼k ÅO5#fèƒøEÁDÇ‘ý”V Lì_‚ýM“Α¹›ñYÙsÀç8OcR4‰ÜE„¾ZÀLñ!5^-eˆü‰t)ìMˆ®–†‰s”(S£ÏA"ô úœMcÞúÂKFã ÄS8‡/‰5ñ½D³_‚?%ïÓ>ør¦äÍ"ψ©¥cè,±)ñ-d°D·¹ãÂæ¼4CØ)6)Þ„öŽ|¹vñ_Œ`œºô/DÙA) ñç‹ÿ ™•‘ á*G+9„ƒ7{üãÙô€¸Ñ€3«â¼ì;û áK©³ ¥W˜8æ=KL@O{ëÄ{“øl¯G$Ú6}*~EOHŒg'$l#‚[ì¶+#¿)} g‡.ÓZÜ=U|…³jñCXÉ=2¨^2¥|™¢Ô"^j¢ëÆ”ÿPK Åzt5€Àch.org/apache/xml/resolver/helpers/PublicId.classTËRG=ƒjɑۼl°- `!a‹?&€!Á–… ~1H ’<’lBL•}²p%)W±w–ÎFv%UYd™mvYåò qÎLK@¥ ©ªûôí۷Ϲ÷öüö÷O¿À…³ÈûÐ…ÞǨ=Œy0îƒ[Y®ÚhÂF“6ú@àC{1åÃÛ¸&p] nà i› ÌÌ Ü˜˜X¸-°(°$pGà®À=û–íhº+$5Ô ™³pEƒ+Ü3¯Á=žMÞŠ›#QÜ\1¬[úJšÏ&õô¼n™öºltÖͼ†H^5õn‚M ᪻Þ|q%_ÖžšªêT§çrF†¤zÕª<×®O²{ÌLÊØš^µ«Äf×úòÝ*äÌÂúÿ8-¹Ûùú»`ÿjù}`»€¹æ*ÆY³­‘—Ð~$¨AÇ:ÇØìÊ8ˆ¢—³×n‘òáÊÅ9 zƒ¡jâÑ` |eP‚+þí?ýøµQW[ u%x¢mîåQ ÞxTúJ8²8¼ûúè‹=xç $†ÐŠa„0ŠNŒqEÃbA1}à ¼C¤aŠ¬Ï£ŸÑ¼¸°ÇúOz×p~y?oÈúWüxEePU@Êc 4ÈFšd³-ò¸'d‹­2¨@›<©À)Ù¦Ài²AYºl·e+Áû/!Àq–LçPy4cznso‘Ü—¨ü®â.nàwïãÿëÐÝMJGYw-㢣Û˨µ•ÕîÈŽxĦÐù H0Àܳ,µ‘Q’§+ N)p²¢ ([+ºO(p¼¢»Y6)Ð(8&¥G+)©—ìËCc–¤²±,J( …ÄÛ±EIŸ°XÛ,ô§,át‡Éø Ëøœßª/èý%w¾: }Ç FÛv’À·`²ÊÒg{ÖrÖeG"ÂĹä~Ž‘r5βW£[u#K’8°Ñ[6EÝN—^/otï¾þõ`€7«ÙÍÜ_“Ð7¤ò”µý–¶ïð¾§ôgìȧ”µëH¸ Èq¯Ïy˜:;½Ïyk:«ÞLj.Ö{ˆÈÅX N'»¹?ìÜvåPK Åzt5-c}ò°3org/apache/xml/resolver/readers/CatalogReader.classPMKÃ@œWk¶¶~T½{®‡º7Az B¤Ð¢÷5}Æ”ÍnØlK›€?JÜÄõ úNo†™aÞ{{yÅÆ8Ø8 «åµòJÛ”p9Š­K¥*TòÌr›k鸴zÃN6šI¼R%µ2©\x—™trþ@èßl.|fM)p(p$0$\ý7.³òÖkY埉 »v O3Í„“F>eÙ]TÂø·lW«JùÃD~5Ÿ=®8ñ„³š2ìåÒOÖå¼¼ŸÇí-„Ó¶Þì;úãªVTÓéRø|7àÝ€za Ыٽ†‚6põ+PK Åzt5k†V!«æ6org/apache/xml/resolver/readers/DOMCatalogParser.classuÍÁ`Egª+Þ#‘Øtégå/‘ØvRäÓ¯™VñjÀC +‰»˜ÜÅ93™Çóv‡t¡æçA¡™°¦2âŒ&q¦W„a{f5"N8Ø ]ކTRkrQú‚þ8 í‘6¿³A¨¯íI™î ´ÆËù_7´wàœúÿv«p(šÒ¯‡Ð(L2G´Ü$È*Aß¹Eƒò{:PyPK Åzt5¡š}Ñ+6org/apache/xml/resolver/readers/DOMCatalogReader.class•W{|Uþnv“ÙÇ4IÓ[jI -›W·ÒbË‘6m$5IK_´€Éî$™:™‰»³i+¾_(¾ß EÄ ˆ¶X¶E#… âÄ7ö÷óÿøóõ»3»›ÍfÒ¤ì;÷œûïœ9çÞ³gþ{êQІsa¬G6Ž‚\„k#!”ÏÑn‘ÏwJá­ ÞÁ•QpH¾DðnÜ&‡÷Èá½rxŸ‚÷+ø@ ðÁ>„+øHÅÇ"¸—Ã'"4vGŸÄ§Âø4>Âg#ø>Â"ø"¾$‡/+øŠ‚¯†p§Ý¥àk!Ü­àp÷(øz÷Fñ ÜÅJ|SÎÆÜAߒ÷#xß‘FTð]ßSpD@µ´!=;¬¥ômX`Q÷mDKäÃL\§e­ÏÔÛ곺ӡ9šiìÐ2Y=#pUÜÓ55k ±ËÉÖ@û\Všö ;ì´.P×mXzon¨OÏì–†ºí”fîÕ2†|/,A#+pE·Hhä:¨'F‡ÌDFÏÚæˆžáDKë™lbËöžÉîJ{¹{vvIüi|¢Ûv¶šún9|vì0µ,ÖLs|ãœoò³TsµaÎ5¸ CT/ »ÉÁ‚NÁŒa'º¬áœCX]rª¤Š(+f¨’á\ä F¨~-娙[š]QÅ Cl§r2N›s†Éwzºr[Ÿ·"péìÛ¨NñÓ®õÑõâÜa[ýÆ@.£9†mmMéÃr"7¦í”Àb×̓ëR‰´=T‚—¾e »Ô•JÐ,ÁwmÚW”Ÿ[ú_ŽPøü‡M™‚½LZŠv”§C¸´paùèí‘ÆSV?W–e‡ Ýk;vÎJ—­2*4»¬¬£YŽ1=&†V©jšú€fnJ¥ôlvŠjJÆ}y¥ý-ëL ’åVhÔ õr²HI1«à¨Àëæš¸•Ç€Òo˜úžŒIV99Özj–î$öìì–õÂe&‚ÀES$\²ô”ËTÁC$´ËÎeRz§!O‹E•§À¹UÅlTñ}cîT’Ùœëï×3*:ñFq«Š‡‘çäŠã8¡â$Nñ ¨Ü$°Àç¬T0®âxDÅ£xLÅi9<Ž ¬¹°DˆÏÓ’ªäý#O¨ø1~ÂPÍ”ú &TüO*8£â)<­â¬¶`«‚Ÿ©xÏ*ø¹Šç𠆨×n,Øiôè6öÛ™F¿Tñ+üZ`‰¿¯ÂçU¼€e~Ãú¾Ðhœ­2.ëÐ,ËvM[K7îëé.1ñ0SrŸ$úÒ8ÿòh)À%¹>#êT@ß"X]Ô\Áy°–¯ 'ýLqyF/«ø-^Qñ;ü^Åð o½òj‘ùñGŸüEÅ«ø«ŠëÐuAÇ«¤)U°½ïkP m6” ˆ¥kg{™«ËKŒ{4“™4¤§I½L!À;ªâîõ´O_iš¾Ä³DÖ­´@«Ïý=ý¶öÎî 9v±àÆ}oõ{~tj¾Dâs½UÙ XúA/kå¡ÝZ0?Çy>{¶Þb÷³é –‘­TüFyðΣh¯fi–‚t¬v*pVÍÅœ¼*â]sŬºÕ®„9÷ïdfºÔú­“6_|+õoKâM3ÜìÍ3eê nK¾¥h±4ëÊ¢çöŽMq_\ß”P¹»{²¸d–³œk²ÏìÑ,m@F«¹àÉy6tiqõÜ4ù Òz_Ž/Ÿ»Ž-R‘Ыæ¤ÈëœÑÊÒ¯x—ÿ_WqàÉÀÎxAZ5K]ºÚ+«p²¬ülú³¨¯ljXŒ§‘É:ƒÌUψOë3ßMàâ l9²HçÒþLƒ’4jeŠé£Î.£ÏtËp‘_¤¢Í“k²éa[ Áô†¨ØÞL“xöÊÊÍ+¿:Ä þK¼t¿ ìœTs~’Ûùv;ÿüùÜÐ2úæc­myTÝ0†¸|G`ÿqªó¨iá¯AáÐÊ_!Wï(·VájŽ .ÌÛ8j˜Mêx=Wš=x\ƒ7îìZl¢q9ÛÌY•;ëà,ÀU61b‡ø(«s‰å>È‘ÙxÔJÄj]˜,i8¨ÇˆKªÑƒ>)!›È•Í.50>Çm‡JÛó†8Zaãmì@ŸÒ†êí)Øòª¦6ñªÎQ¯ŽK7‹^‘ ž@mo[ :9Ô3ªó“Á1Ô%«Ç±`}Íq,|L$«cAº·(Y=†Úd”„¤ V}K’5±š¸(©ÈG,jŽ)1Æai2 O`wL™À*†éâcX,†î5Œ–TòB¶| ­•—H ¥Ý2Ý£"‰…O 1§±2ƒŒ·7\ ç±j’}R-‰.¯Í+‰š*Eµ%QK…(Vs­ô::†Å±HK,zmÈǹ‹NüïoGQƒˆa³똎‹1ήù)\ê>_ÅjùÀZz™rÛð®ç’}ü·Ñ‡àÿ §ˆóÿv<Ε'ha‚Mú“xgpOãß8+xF4àY±ω6öêØŽ_‹çE^=xQìåü&¼äæRž^0_ŠùÊÙ6¼IægÝè!×*±½ØÎ<¬æÎd$Ûvb½hk±{8ÛHöâFg›˜OÎû9»^DÜüW°¬nä,DOþƒ›8 “ûaÜŒ7ë,à-x+¢ôa;K]ƒJýõÔMaýˆ!Í¢¯¥£ŸqˆbdkÈÎ`ôdð*£’'ŸKÇ‘Øßzk{™÷¯M›[bÁ<®Èc]åÁòw2ù«æŸ´ò/7&ë=„R /-Æ„³·»5fõ™¢­:²·`I2 qe¸Àé®ÌÿPK Åzt5]T½a>org/apache/xml/resolver/readers/ExtendedXMLCatalogReader.classW[wUþN›d&a %¶H¤(bš–o(áf­­[.Mi âeš ihš„ÌŠˆrÑz©wEmQ¼[]KEº´]Þ}âAŸtù|ñøêò;“‹±´«Y,V'ûì³Ï>{ûÛ{†_þùöGTc=ÞñÀNùè’ vyà@§ŠÝ¬ÅÝ‹A{Ñ+wúÜ4ë÷`ö»q?xðTðµxXîéš(ˆzP‡˜ CÅAiW1¨"¡â¼hÈ$†åᔊ´\dT–;Yil*°TäTQpTÁˆ@½1b©˜Û©fFRðvÒèÁ¤žŠ#V6‘ŠoXÜ–N™–ž²zõdŽF®-‰TÂÚ&Píoìp´¥cÔÖt&RÆÎÜð€‘íÑ’¶³tTOöêÙ„\”k0a „:ÓÙxPç̓Fpd8Ìf:yÄÈRÐcFÖ ¶"ìïêlÓ-=™ŽwÛ; Hc4Y«=i )K`ÿò¨+ÒÈäݦ>lµ¨ÈY†¹Y&¥¥ŠÀìí ¸“2•g%’Á^#j¥eªÊ€næC¨Šò̺ya+`Ô.ýñ\uÔ`™ šDŒÅðxÄSZ/Ǹ&ü%Œ7]!ÆKW&±SðDÒ¹lÔèHH"¬š¯À-Ò‰†f¬×ðŽk¸· ÔÎGàÚAËÊ„‚ÁÔQ=i¶DÓÃÁ‘hÞS𦖠Å •y‡$Š Óð8N*8¥á4¶j8ƒžÀ“ F5<…§<£áYŒ)xNÃóxA`m%pËX_Ôð^Öð ^ðWŠº†×pVàšpꈞLÄ Ñ7جh°lš¬œ{Ó/SjÔð:Þ rÙD$wð`‚5w™¡šJ ob\Á„†s2áçñ–ìžc¦e çí5¼­œs^¢áܫἼ¢vvi©ò31Ãjl("Ì¢ÎlÖŽVàŽ+ízÛ:º«5Ž\~nyy{FZûKà Ô•õgiÚc­ê2çÈ+bSNý]‡È¾ÍÒ`ÙÜ}OÆÅâ¨\7GÛ4Î5cW/@Ž›»Z#í NÅXÃÂXˆXztH`iÙè°UôX3KE™œ98+¦b>—«6,„8Ñœ¶3f äìóžA#™‘gï–†¼ä†Š 9YSS¿?\éäYV4-ªrC‰a]³ÐˆdŒ*1·;] Ñ_Ù–—Ô’%¶åg>©–…0 Ö£Î?'ì5ô*'Ôvÿ|€ Wæ º» p†H:ííè÷óí\Äsƒ®EöEzÚ»Š¾ª9ý±7òcð¡þ6qU?›„õ|¶Pä¯à¯30qÑ6 ò鲕làSËà&Ül;äÛV<\½–vª~L£j£3ÐÔ¼Þç˜AuÕF×wpì›3¤4]_{]MÓPÆÅgõÎ 1ésxÕoà®Â%Œ–ä:ÏF—Oñ©ÓXÔø š”Ki‰âU墿;Ôî«§Í –†ÜÜðúÜÓ¸jBn)Õ»ÞÅRiïð.k¦ù$®¶ÕÎw±$¯¾ZªË£›„W^%ÿ¦±\Þ×ìõÉXÑ`l×xWLcå8>™Â*;8ªìpeŒörEi™ÔW2)Û¼v›½«/÷»{ •ù]=ß%eùÖ»Î!\Ž‘jc¤0²1œ #õ­‘ꋬp'pubL¼'>äÇpž“N@+ߎ¾®¼¸+°ƒ„Ú‰MØ…»±aìá¿n~_÷ÐK,ôóý¿cÔŒãÞçwóçÐñ%ð=bø•V`"¿pcH80,®ÇaÑŒ¬ØSlƒ%ºpTçgÆ(NŠ1œoâŒøOŠ ?à)q O‹ßøÞ•Ì}‹%; Ì•Òmv+Hi#¥*[ºRµ-ÝÁ p‰_Âf2Þ+~Âle®+Ä4¶a;æ—Ã<¡2+7ZqŸ§Ù\mÜq3š¼NeLyJœ@¯üãë=ß;âêØ;¸ »f×Ù-ä`¹éjº„× ƒ±zÇFó4½þg¬ )ÊJ™…õ)4›@,Ð'ÛÈés•ÚˆÜ¹á¿æáÎ7Ϻ<1 õN•±ƒÎšqÂ}Žÿz‹3ç<ÓŸÐ~@>BiÓƒI–þSžþŒ~ÎoÁ xŽ˜ÀEZMá ÌØEË`‘„¥X4J…¢Q*R¾h‹ñž]*o=o—ÊÉ»ÏÚ¥rÑæ(©`dm*-W*Ú™bÑþW ö¼ï_PK Åzt5õ0}‹¢½';org/apache/xml/resolver/readers/OASISXMLCatalogReader.classÍY xTU–þOU½%ÅBAØ—€BBRIˆ-Š!)°4!@ÂîV©z$•ªP‹€=ŠûÒ­¶-nÐmccÛqoÍ`PqkEp¤m×ÑnínlG·¶Ûv™ž—>÷¾WK !§çûæãË{÷Þwîþ{î9çž[<ûõÃÁ‰2êÈC;ö»qÏäá_ðl¢xÖ̓~冊ƒBà9ñøµxÕñ™€ù\G§Ž/tü‡Ž¿ %ÿ)FÿËÿÆ—ü+_ëø† :‘NÑtêäÒIMU'M']Ç“¢—§“[¼édˆ÷`†0* |†‰·G§áâ=BÇãâ] ÓHF‰æhƈ÷XƉ÷x&ˆ÷D&‰w¡N“Å{ŠNLj÷±Mu#€ƒ:Mã7éT,ÞÓ™;•ðê©T'¯Ne:•ëT¡Ñ *5:Ž É@$ÖJ˜\‹·V:Á6³bs{¤"n&b‘³ÍxE­%2—08h7,b.æÁS¿>pv "ˆ¶V4%ãᨪEÉ@4¹"I±Ððd|Îñ3*÷œj´æòeþ¦d ¸0ÌBJ%Ñ 9$€b¬=™¶ÌŒv{À0“µiþÇ÷»€é+®ÚXˆÕ­GÍÅ©ö3Þh‰ÈµÄ‚ÈŠ@<,úö +ÙNfõ 7!3ž¨h¬iò7­j¨·U-“üwkÅcЧÀÈê¼p4œ<‘à,„O.–¦Ù,Å;ñ„P×T³j‰l. “±ø–¹ZûàŽÜ9l² F„£¾ÍI3šÇ¢™]”ôÖå|$èfÄl7£I¶Û¨œ]õESífç[n¸ØXµ#Ö!-<ˆ¸ƒm8G‡/§xm­ß/¤Á6~¬­å]—>Çó#f´5É£ÃíÑX\¤›•mád:¸ :â± ™H°:?gÓx*˜”V4 Ê’ ëáäÃþâ]¡±!ÜÑa†x¯ÃIþ‚^d‚ŒZ©]ò\7×…77::ø³X´ì³£¤âaB>ó0 wS,š Ã"{Ží5+– µ:°Q£ã šIUÍ2h6Í1p.f?:ì(0p66Ø,[Äã"ª6p¾kàJš«Ñ<ƒN Ηù‡¯‡PžŠG«cD8Q-±:¬6¥ªÙµ¢Ü—gSµ} 4ŸN"”ö7‹ŸÙ)5¸Â TkPù ZHµi*9Aiàr\Áž(fŠàÔh‘A'“ß S°Ó Sé$ê j Åœ–­Â -¡¥„âÆ«A˨‰÷Å=; ‡ í5Ê|R˜” f|ï‹ëé5 K+­ñXªÃö3.©–H8ÈŽ±EĽšØ’Hší"ÍÇÞ4¢%]]ØžJ$ [ÌÂ"K¬¨0/,²Š ZŽ„Â>X¤³Ít.B|д’æ[÷p Âj®k¹€Ûq—A+°S£•­o Õ9³›lªÃ-2=gÓAfPZVüöý2k…Ìู)ÎÂ¥ûV|tš2,M©u2ІdTʃNBn{&+3è 1’'4Ú"gJBQssº¬+¼Ã ³Ä¸ž¶€AÙO+0¨E¸YP ôjZÎV¡XP¸€A!97dŸ“™¢¯…’¡Œ´NtU+ j•‘ptƒ5¹Mö£±dÀò¸°E¤µ=bÍ^/ú#Õ¼<áHc}ñxŒ]$nnL…ãf¨0Îü…m £°=,ób¹Aí"ꈵÄd(fÏ7“Ó ÓQF˜Ð‡Å¥;çLÉc“ûš’ã{3¿U=H˜Ñß<.¿¾ý«pãR"÷èäÏ™ø'Lê'Up%ž­XÑ@«,é¿pµe¹"˜60IÎ"!³%Å‹úÄn3#b‰uBpnæôë§b§ØfÜWíYÐë;ª2ÅÁˆ4‚ôÒÆ–õœÇEuÎŽˆ$;?íÏ¢îÚH4Äâ¦/SMÅãÜ[ ²'tæâäêH%¸ ˜ÖpoT<Œ[g® ¤"Él2²÷²‰C¥íÙ´ÞŽþ^-¨iòqR„B„©Ú%N|b&x‡ù\*ö´Z™Í-dÅuû¬5½ßžUÇŠiù¼ÚŒÛ[•3ßWüÂȦÉWG½q…oÙ2¯nh¯Þ·¨¦Ùwæ’å êýµG9OÓ+]b§YÎF\»µs¶8‡Tl¹½ Ë¢iuS³¯‹Ìˆuì,ó­\æÏù>ØjœÙ´|áBÿ*vß´€wó3óI«­i®©o\Äî›^£š†qJq­®±¶yõ6‡Î­å ¾ÅÍb°¹®ÎW[ÏÒÜ÷7ó±©×ûŸj .nl®iö7rÅ¢7-j¨·%¹ä²Oý9™•÷Å="Km#{³£°‘“KmLF;¢ Ä Â%ªHcG‚Ç’ÜvÀÃýTN?Ÿå¸‚ä¶K‘ò½E¾=,Ãu$?ÿ‰{ ,ëà÷°’Ò@%¥Ýpì†ó¸î—0çòsœüœ'1l ÎãÞHk¶â|@¶)¾©á\hCWÈ> ”ìÝ—Så O–€ C¢¶'‡Y©øVZ²‡HpÛ uõh@Ï6ó²Mw–ñXVœÂK®Dæ`ª1 sQ‚SsԖ樽ÄV{««­,)݃AÓ[â톑U>?yU•p³òV^ÈÊK±3°T(´”dÌW‰KY5É–0¤ƒ©síl“ú…시óØ”în nèD¹÷! !<¡‹Ë@wÍëĸ2O~7†í@~™Ç#š«.ç¼q;`°øpÂŽoŽ»;Cu[XýӘêéŒ30 gbÎbŠ-˜Íc>´JÊ%›²ƒÇ¿‡ï3A7NÀ•¸ŠGF±›^Í.(6î¸Æ&?SJ³•³²< –ãH”±ᇸV:Î6ö‡„XÊo1c¯^ÎÔÝ(XÉÍ<«;Rt÷؆rLd§Ïîù$[Ñu2 ×óß E¥’@/\ÏÍ ^ nÄMÄ Gy†Ð9ª”½Å.2ºZ»V*wcL•Vº_ÙãñðÀ°íʽÚåŽ1.ÏØ‡0Îý¸4Ó®Ö»0¾J£ŽÑ»1A¬V-¹n—æ+:÷bÒê–ÙƒÂjiŒ1yݘ܉Õy¢uŒz ‡6Ë»<Dz›NìÄ(9¬Ü‚!ÖðT1œK¶ÛÎŒ?MèózФ7^O± g˜ãt›ï#™v5Óó”H·§´ZïD1xí210ÊÒY.tÚ;'VYÑc•y¹«œñYeeï«Xy™U'©./á}G,ùøíÎ}]˜)Éñ\¤à(»E™®Eô¸ŒÈƒ¨Êù>«Ó¹Õë™-¡— è96t¸ Õ6ôœ£CÏΈôÄ-òzæfqçٸúp‚;ïè¸s3"=pÏ{='æò/puá¤ÞùÎ? ÷Ä\¾ó³¸›¼žš,îO­Ä t¡ÎÆ]зö0ÜšŒHÎGÆäõørí`ñÍëÂÂÞíp8__®²|é€×³(‹»ÈâK÷wádwÑÑù.ʈôàK1¯Ç/qg \ÞµS¶ÓÚ.œj£¾Mþœ±‰T鵃L:j½Íj\ìùõGgU’±5K ¯zíp• ^lAã‰.4ÚЋí͈ôÄ=Ï+ Ò¸Klܶ.,µq—·6#Òwš•™¶ƒÃyl:9q{HN.(P~nþ'ˆÈ*2È”Ú[þÐ{äeb¸t¿£Ê“/ó¶£Œó¶£øÿ{Þn’)-YÙ…æþLÝIC¼žårÂx1a…=!Gy=+³«ús¸NìõzVË Ó»°¦_¸ÒëY›?­ñÓ½žÓÓâgô/^îõœ)ÅÇvá¬^V÷ä6÷s)ØÊ%Äù˜B ¤u˜¢\¥ÜªüSÔIêLu6¦hû´×µßcŠUt8~‚N..®å*f×s y#×dÛQ†›¹ ü ê°~ÜÂ…ÑO±·2úϹìïäÊû®ÉîdÉ»° wãÜÇÿîÇ#؃؃÷ñ>Ã^|GHÁ£4ÑH¦¹Ê`š¯Œ¤“”c¨F)¦Ê,ªU’O1ɯl¤S•s©Q¹œ–)WQ³²ƒ–+·ÓJå~Z¥cyQK÷ãæun².1|1°OE\j>m|+­Öì“H´9]ŽÑ¤hHã«\c”ÌéÈgb8{&ò—o}&®·NiÜgß®Ð)hî:âþrUöghæA3*hVô ÙãZ²áC8b_„øN߯÷WÖó.]ÄçÄ8ª¤ãÓç.å›5èI8é)ô4<œqË8ãΡçà£çÑH/`½ˆ3èe¬§W±‰^Ã%ô[\M¯ãÇœ•o£ßá>z OÒÛx…Þálý.>¢÷ð½¯èRèCJb­¡bú„ªèSšOŸñiõ9­ /(@_Q˜¾‘þtߪÙ+ÒþÄ-;î¹eÇ=·¬¸wR«ŒvÄêˆhW˜û*í*Ÿd›øtJpÜû°ÁŽûM™¸¿$÷oâ>ÄÜGÏV(Îd€ªŒ\nìváŸí;½_Žy§w(9á‘ûûÃn<`ß󻙺õëÄn9{(x°ƒþW Âö‚ùüçìMÁ°œ$’«`¯µ!ü÷ˆÜ\ØGñ˜ Û×3ŽQ}ü0ó¸„Í{¢ŽúàøË Ç'àøTÿéƒã/à¸OÎ|úïPK Åzt5À¾T]Á6org/apache/xml/resolver/readers/SAXCatalogParser.classuŒ½jA…ÏÕãOiÒh›B {« „B„±½Ù½l"ãŽÌŒâ³¥ðòPâA..|ç;§ß#êâI¡¥ÐVè(<Ú^”[^ûsë Í[ξE6F;ñÖìÅéKg2XVNjw.“÷#„—ômu v^ÜhÍ{&Œï-9á\œ×·á9šÚpYèϯµdÐ+Q÷|ÐS[)×¹‰ýÞ8³Ùns¥ ¡V] JhĪʚgPK Åzt5 Hì¡(6org/apache/xml/resolver/readers/SAXCatalogReader.class¥X{`TÕ™ÿ}“™ÜÉä’Ç$<" Ê#LƒˆX0€„GxŠb½I&ÉÈ0æÁ£¬ÝêÚu­]û°@×v·v¥Ûº*- ¦i+µº>º.j[¬ÝíöánµÕµÖÖêj÷wî½3™WÔ?æœsÏãû¾óßù}ß™ÇßýÚ7Q†9T›ð}Uü@?ôÀÀy Ï{àÂyÕó#U¼ Š{ðøÏ ?QŸ?ñ`"þËŸjø™Õ8ïÆÏUý 7^Tõ+ÿ£Š_jxIÃËL¯4üÚW;Û(Ðô/ɧ]…åP´7É‘ºpo4WÑ뺾pÒ¢Y`<¦ M€ã)“m²qs ¤]N]¤fF79EI)ßhúœ9H?ç™ì&…sã»Ãýý¡n‹7¸·-±T¼+¤ŽÆÏK•:BèÑÑ‹>1ôë¸æöJ$::¸YÇnDtìAT“ź,‘¥:Hêrn@0¡p[W§zz É!]Þ'ËØ¸E—å¸U—«¥M—²’[)\DTç2·²êâidæ¸U ¶¶¶j²J—khœ¬–vMÖè²V(å#8Lê‘ø™¬28ÐíOÆü* óÛiV³_ ÷GcIZ¡Éz]:dƒ ±ÍˆªnŦ~:9³Â¿?œì‹¥’~Ãoq”š¿‘óG #Y[¸mÙ¤ËfÙ¢c/âšlÕåZ!Jæ^(¡ër\¯Ëv•ZN̽V$2Q¢´íÔä]vɺ¼_nÒÄÐ¥Sºté–.=Âsñ‡]ú$¬VÝÌè&Ó)ìc¹Ÿ_WqÜÁº<ÐtrÜœ€¥Çì퇋«²5Áš…à`¶”Lºñg¸¥”,G¡¬}”µYj'JÖñ綬VópN@ÊŠ*7;™btk‚-Fð!ÜZb±£pñ‡J.¾ Qje…»ø+®ùëav¡ü­ó¥cËúÏMéY8g@èaU8ƒpm?…ò“ÐÔ·;PvªUxž¨< }hö —¢’å§y”›P­¨Â.çM˜Êø„.lÄ'1‡qŽ` Žæltiv£·gþïhœÚ¢?Á¸|°èàžQìú,íú\Žëe]·( ¦Û³`zÖ9 ­ûü(ÖÝKë¾0Œuxþ%î°­»Ö9YÏo:OSãŽÁå­ZG¼iƒ¨¦5ÞÚ4¼ñzëX4ó—F}K㯲¬ŠR€aý.ǃ¦ö€%7«}>!×gžá|¯Ï´m¾i‘‚Û¢ýüVÒ\˜EiL8‰CwÄBù)šô°iŽßš5gAÖœ¶9Â×ïGY+#^¥ñ.Ö»¤c“¶7Ÿ‚¯ãüA§úʘ1eH»Фëàèž‹‚Î@“Ï™ÆÔ4¦Ä Óvz§søâ4.9n^ÐJš8 ± í4Ò2þbÒ#ð]~=<…&¾0òm±Ïb-¾pÞÜÔjhÊÈì¦v™)fëNsSìàåU¬ÁÜ…scKèœO+Nʪeߧغ›kÜœ5™·r–éŠÃ–+÷sTç…Û¬ì,¦**:‹‰¬t§wF31k{Mù)Ì~$Ǫ•Fc‡‚ðµò ®PUåÄ&:°9èò¹i´´œA…ÏE§\êãP«òö\Ÿ+ËŽa­ÒædQF0¨ê«4æ¥qùØŸÆ‚ÓXtúœ\áUúœ-XäÀ¨\éÀ1|RéÍXtå´ËsÚšj»Í¦ÛçNã}ÁŠA,£µËƒžAøÙ¸:Xé«8ƒÅ¾ Úáó°¸^S‚¦ºÚNaÅ#ÖXeÉ1õ飆•'Ä‚øN³Tõ“XlÖ?ä ©úçd;U¿jR¹ÂÅmDðK"æ%LÂËÄÉ+háø¼Æ™¿År¼5ø¶à÷ØŽ7‰‚?0ؾÍ0ùYô]rÇqáñ€8ð¨¸ð=Ñð¼TàE©Äk2oJµˆÔˆGjÙòJƒÔI“Œ—E2A®‘ɲILÜFµBDwlÙ¸cë59°€3?ƒ¿'¢Ö—î!g:iÕ4òæ?p×GÉW÷àÙ÷(Ñùyr–ßcàúþ‰£Ïw÷ñÄÊñ"S/⟉ò×Ès_—‰Ñ7¹³»p?*D°‘œó<âÁ5dOñ.Ým0‡â‡pÜf•;z "÷ŒSUÓV9PÀbr 4™Z™•áÞì óâ+øªÉ¡'-²Xj’P9Dä…BpI mÎ e•¶Pe²“=Wñw2+´Íýµ–ÁºªpÙ{퇙Ÿ#º¶„è4ÉкÑ/°ñWŽRfÅ8+Ùgå6oUGSM0ÕŸEuS™ÕL£½£IÝ0{ Î—i;oJcMÐ)AW‹·*µGPÓì]7€õ]Ç0µ9C“¤È‹&íрϥ˜qC°ÜW~›ΓŠÎbº"WfÝF›åMrŸy y£›8¢H CóŽ|å#ÆfuH'ÌßœlqÀríV1M͸¶ŒèëÚYYgªöi¼Â¦)[ƒîÂ1wflQ°¢p¬"3ÖôŽy2cU9Úó„ž“)2•·ZÕA2‚ª·‘!TÇ6G‰sÈ2b`9ܲÕ²^Y…)r fËd-æË:¬ ÏFl”M j[p€²n“í¸Cvà#²wÉ xPnijÒI =xK¢ÉÍä‚Ýâ—=2S¢Ì[b²DöÊr‰Ë*IÈõ’’]²O:e¿$å úGM>(‡äN–GÄJOû-¤e™â(ñvÙÀ׸ ¯Ä ™ÄÀ×ÙrÒÒfxvÑÆ 2`ÊÅO.PL¡Él0ùÁ-×3ÛPœQ!ILÄ7ñ#[>æOÛ˜o£,fOry>æ'šš] ~Ìci*…ÃæÎ.Âaq.¢`èzo0lñ9pËDby!jʇ8‡>¹•ûpTŽá^ù"Òò% Ê—qZîÇ9y?ñL¯ÈWðº|•¡éÃRšaé”ÔËÃ2Cež|ÃYu´Y]žÉíØúº•j²õ-dª5À°ã¤eZ.ÂÄ‚V9ÎÙÐÒX-h¹ÅcC«"Zßf‚ï)´\_Z¾EÏ<ÊÐòØ0¡ÅºùZî°µt³O%Ôõ––jûŒ°ÝY¤çqêyuòTN"^ŸÕSŸÍ|ë3ÞaËòN®îÇð‘t7\4€źÏQ÷3ÔýÜ0ºÏଭû»øW[÷ãlåë~btÝ;‹u?OÝ?¢î¿'ÝO2á¶to·Ÿ"u–î,CßPV¤ú§Tý3rÙ/ruYÕuÌn,—×áßL—ç*|zT…»Š¾D…/SᯇQ8˜UøïE φÝ‹±ûê{Ø}cìa÷™Ñ´¼¿XË[Ôò6µ¼3æò¬)á¹ÿPK Åzt5ßp›;3à 6org/apache/xml/resolver/readers/SAXParserHandler.class¥UÛrÓV]²ˆ8J Žã ÅÐ ! ˜Rz¡¤B1 !î´PÅ>±²$$™†Nèô…NÚé—ÐN/ã>ô‘‡~T§ëH‘­˜Ðv2Ù::Ú{­}Yçø¯¿ÿøi‚›Å. ËÒ¬ â ®ª¸6€ë¸± 7³¸…ÛƒøŸIsGš»Ò|..ͪ4iªÒiÖ¤©©¨«0¤„«`÷¢íÖJë ³äéë¥Ë7üG—…g›…;CŸJ½ÛgÞ¶|aùçt«j>ý' Ëðg¤'^S™·«BÁöEÃKÍÆªp¯è«&wr‹vE7¯é®!ߣ͌_7<G ÝÑ+u0¹Q\èUáz¥•S7–u×îñˆ'üÎŒìxQA2?ÕYC"ª«D5%*˜›X¼§?ÔK¦nÕJ+¾kXµ™äÎÁزå4ý»éV³ßæ4WM£R®ÊÎ$"ùÝ{äù¢!¿+lÔXècØ¥òÅ…õŠp|öè–m¿x*îñ½R×]½â³g Ô‰Ûóå²Ì?u{^AŸçë®O¼2§f «æsºƒÂªž±+Í+f8ßL¾©"7)›„š¥7„ÇŠ«—I7`Êá/qi<Ÿ;ȵìŠ5cý‚î8 d•›0J´~'ðS0jÔ,Û•Ú¹^7ü€aŽkW„çѽly¾Û¬È†(8ðrS’ìLM°æLU÷uŽ„*yÞ©[ߦLÆ;eíñªùÜilS*È»o8ލ>WPÆ š0ÌdcZðÞÁ¥ÿ8‚Ž$NùÜ\m²]A®Ý÷)Žñ^>²z™D×lÒM—·F6ðYCžÞ±îSyX&¢a^ÕPÀ+ƱSÅ} oâ-o «054Àa;ŽXѯ»â‹bÌsŸ [ƒƒ4FIÃ1Éó.ÞÓð!f4œ”{³˜ÓpóÎʽsÒ¥Œó.`NÁ‘{Ï(ØoS]˜Žt;#Öô¦¹qƒŒÇˆÑÎZÁ®ÞÏ@lrÁygŸí¦?ï˨ϱ ½1ëal›òsä›ÙÍÖy‘aJƤøÇé+ˆÏíPäÐhwómûŠÜüʤò+RÒ¤ öÐæ¡¢=€L`Óx;Z†½(ò©p9ý“S„Û@Ê»%ôáH€P½"¹’‰òÊÂëxc3¬t7Ö;Ä:ÖK+±¨F~“Xùs+k)Nþ‚Ô3ì’©é2i<]úý9õ7lSž*O¥b”}[+Pw*N°­³D›#ëé€y2Äl3Ù§‰ 7Eä*ň,½¦È>ÍÝ ¿â?EåUåžÄÈ3¡ô3N‚©Ý{ZÈ`£âaƃêVqž™-Ƹómî<«>pçñ6Ž=ɳKG»¸y–"îù GÀHÈ­ÉG Y%A¼LâKØ•ØðG"â84Oè‹Êš>ÔÂ`²¬ëD¿Á²nõ(ëý¨¥y|´T®ŽsÕY/†ˆ{)’M.ä ¸[ÐR æ;d¾ËJô˜Œrmæ.™ã,'·ÜP²BAž5VXÿ_ƒã…qßä‰;r‡Ýma8 6IÝ`)v@] ÃÚÔ£ø(jî(NÍžò‚–nO¶Ô%ŸÇ–6{´ô /©º³[kGû±¿$öW=°?NŒëÜZIjý1I¾¦Ö¿ÙBëü©‰ ^òŠ(„Ð#‘ÖwfZÈõ%ðŸÿ[ÞÎßøÇÂÈv…¶Ú mµ"µËÕ'<ü™Ž<.l©ŠÑ¤*¾g?°c?öPʼn¶*–ª¸`-ÿPK Åzt5UãÆ Ù 9org/apache/xml/resolver/readers/TR9401CatalogReader.classVÛsUÿt“M–-)-…,HRJ¸V›V°„€ÁôB›ZDØ&‡tÛÍnH6¥-"0:ú ÏÎð†NÞ:bÊÈŒ¾YÇ7ÿ_õ/¿³I*—0a܇=ßùî×sίÿüð#šÐƒ; ^À~ïè„‚“xWÁ N \LÁiĽ8#Ö³^¼§  ñ;'ã}Í¿¤Œ!Ò#2F´á¼ØŒù0Ž” &qA / hJÆ´ŒK žÝÔí MÁÐ$ƒ³2œÁŸÔM>\ÊÍðBJ›1Óš´Òš1©t±¯"%{V/2OZ…lDËkéYYÌ‘/ZÆ/ ex¡Iõ;t8¦ÙšaeÇd?Ã&A®"ú‚/USåéOÎi ZD·" 3_²Çm’Ïõ ·åtMËž†J\ÂéöºÊÔ’9oZ7̸i–DÜ[ÉÖÈ$OÛ–pÜm[óÜÜ š™ÝÚ.$SÉ^ÊS¢X‚|4K¹ÁB–LKš³¸ÓVÉ´)ói¾Ènäx|1Íó¶n™dC"‘#djW”ñŒË„·J…4?£‹útÔÉûAᲊNìRñ!B*®àª „1##­"#(×ddUÌâ*ƒ÷t<?;˜Š«Ð1GÝQÛ_8•LÄTÌÃP‘Üò|ºTXÈ3¼Ù(:‘4áÖuPv‚¯š6J*pCÆ¢Š%,Sqæ‚fè™ÝÕ¾ØíÔDÆMá–ŠqU@·ŽþÖe8ÜPŠ/ÚÏÉìr2cr;2¤׬BŽg&Æ’a0´m4äÈSXÑÚלjúLRZí«­ÁP½Þëj4ÊLðņÔVgD‹V‘L7§µ"çfQ·õÑÏÓµJ?eŸÚ¶&òy^ˆiBÈï—4£øŸM‡wdfެö‡Hƒšå¶S÷”3$ϰUC Ñà´ÔØhzb•‘‘‚ AQ´L&nð¸ºV(²ýuÔÖÏW¨«Œ}¨áaä0:b޵‚UB¡Ã”ÜÛB„*÷fjYÑa*\ÍU^*ç¾Wã¤:eøL‰ °ÿ¥ºg¹‘yZ0’꽯ÄHí—ãÅ"¡ &^–Èg*FQ(ð¡šÜ¶zr¡IìÁNºàÄççý»h¡•Ñ꯭:äÝô÷8È£$¨¼Ž7h¥Ã{‰‹„]ó„UÕ>ð=\á‡p­CZeÃ+h —Ñ•Ò:vöü ¥»§ ‰ –2ÙbľʢnÚ{îA HQ÷ŠXʣÕ[†ïäVEìaS¯§Ýój¯üÍSkØõ>¥´©×·À+L–áÿÔÇÚ}íò×Oþî~Œ–©€;à]Ö2ZW0õ¶w—ÑþÛ¤Öí‚Ô!Bêtˆ-Þûh«Q&PÆŽ•'m"ÖÈR…¼J麄oð-½üÌÅ\´VÒü€îà,¥1Ai>Go‹!ø1ŠVœG=%:‘¢L`="‚¸HÕšÂ1Lã8.ãmºPNÒ}rIep®‘KteÌ`Žþót®çè˜6q“®„[´ûE|IëW„}€E|G‡÷–ñÍ¿ÇotNÿŽÛøwðîâ F™„ÏØf|Îvá §–ÉK*wµ´ûE{Dˆ¢ò3?ÅÔM­ü‰ôä’ÈÓu$ÈM¾Å(†CÔ^:p˜ ™<:Š#$á%»{ >ù7Aq‡‡<Ø^‚$¼å´¥‹´õ‘ŨӪýÿPK Åzt5y_Fá ;7org/apache/xml/resolver/readers/TextCatalogReader.class•W{tÕÿÝdvg³ d $$’à"†°Eu#ˆF¨©!iÁÐ:ìN’•ÍLÜÅø¨ªõQÛª­Z(–¨h´ -l”PÅj¥µ[¬µ>zN_çx¬¶µçôô´þaú»w'!/ žœ½sç»ßýž¿ïû&/}xè¢oq&z‹°WÉåjסå)×Êå‹r¹NÇõAá7êøRz¸I>o–Ë-òðËAÜŠÛ‚d¿]ÇA|wá«øZ_—Çä¹ wËã{äÙ7‚ø&î "Šû‚X€ûåò-;‚£W.;u|[wIît|'ˆjì O>”ÂÒñp{¤½ÈåQýRêcRÉã|Wr~OªxB.{u<©ãû:ö èqÓíH¦,Ò¦ËÍíf4éD힬»ÞM[fw½€/ãšñm›‚®³Í²×ç)3ó7²n2U$rºN€ ëô¸™±Ö[v&é&·S¾Ø$à?'i'ÝUd«Y¼Q@kp<)nJÚVs¶{«•Þ`n•¶”49q3µÑL'å»GÔÜ®dFàô&'Ý5{Ìx—ííNEÓVÆIm·Òܘ +‰n°zÝÓ5SNg«"Ñ®PÆ"mŒAZÍ&iDq23î Ô9—öÒüiRƒ'Y`EÍGZâñÔç”2íN(´;ë¥Fó¼ˆùSJ ·LO[:%£2ACJam­M3ò§¶åFùÎA»ÃljëÌT‡“î¶<]Ó·zܤcKÙtªÁ±ÊÇ ɶâÏÉ#ØXKcšw­“µ£¥G^˜¢³O42ãÀ&ƒS sldím¶s¥½ÆvÓW8®€¶‘F92£>Ej¶$Ó†ü‹æ^ÕC·u;Û}^º“’4S=|qì2q«W 2•y£=Óxå4@GÒ6SÉ«ÇVJËhÎ"›Àó ™]³x²lÄ»qÉ'7¾+²Ž+Íw™i3–EÖÀÄÑà€äi YaOVÞz'›Ž[kU­–M€øR©Ì@.0p6bêq±=®@ ¬Ä*çbµóp>=:åòú~yjïØùÙŽ+­b”²bÑhÔÀðCÐmà r: <…§ ´àª“ŽCqXÇ <ƒgª×šdL„]'œrÌDØ+Ÿ%a©.l;n¸CJÐqÄÀsø±”Ôû<¯ã?‘!yQRŽâ§~†—Xáãñdàçø…À©SáBBM†é—~…—jNH~,¡Óho'ŠF|[y‰¿‘ö=‡c³&Á–GË+h6ð[¼:lý¨øø²\©á‚6ÛµÒÝ«ËÅînª'í2hõá5-kòè$“™¡‰:§£Îc_*]<&—× ü¯ ,ûÄ=wŒ™-[/g˜ê¦3NDiÍäÔoöôÐd%“1L åñÉò ¸NžÂvéPÂñ&'pÒpÅNÖË&?¡ΊQ-L`ΰ˜ ƒôä)°ÂªzYgÚf§ A„ò¦¸èñREõ‰q²ó$¬­Yj\ô‘²»¬TÌÈ’‘¢ž#{Y·•ÉP k£¦qbr&ÏçpžGwxIŸ5I$e3O9*˜æ:mÄAZÎj¶2OÕç5&…Nc~¸+6·†üPÐjU‡5‰5)KÀ¸ëyø*‹M"vrÛR\~~-žr*FuMÙ7\øyW‚$­ŽjÙdQ•}VwKe…=ò lìüñ «²ÐÈ[³¹AÕQܱÙœª£zÌçå™8 >~grÐ|rÖ¨'‡‹zr¾¨'G Ÿòs.q]÷.~m³Ÿ¡:2QñDadZû|á„)<ˆÀ~r`-×yй^H©Ëø }&BÔ6—z”½ôOC6I%™o| |yZWQJŸþÈÜ1RƒŠz½iRÊò\ž¹k¢ÉX‡fOVT½¾ÈžåWÄ–Q†øF iÁgÉ%/ÿ‘øùl̓(j_2€`s?Â1M¾ Â`¦—ÌÈ¡x 9„äy]3cZ¤¶BË¡$‡Yý(‹ùjs(=€2­dËs¨Ø¯\œ†ü-cJVaö˜Ð]Ê7“a‹£äèbð.ÇçЭ,¾Pñ´Ž8ÞÊ“VåE+Öcƒ’Ý‚6ldúB üÅø¼JEíØÄÝjÌ$m3}Þ¢b!-©Už_’÷¼ gAcfd‰Lú…¶_ÐûÂH'Å´ í(æÖ½ˆ`-=š+š%K• #ûEL…{‚ZÌ×/9TÅ|¾§0o…¿ÔÿN^¡"ÌÎF‰)\QÔ⊀T’Ã)7‰Ò¢RýÁ¡÷k± ½ÂWÀ©9,ìǦ˜¿ÂŸÃ"ÊëŽbš'­¹Nê:¥1uêëÜ‘à×È£ éD•: ú0køTRçéš/½›p¬åeâÖá~ì$r‹ñoþU{‰{5\Ó œKHe1½ä¸%¸å¸U¸žyùo$çMDæÍXŽ[pnc…ÞÎ:¼ƒrî¤ô»˜Â»™ž{àÿ…]¸—i¿vPêNJÚÁ`vãôáq<ˆýx‡°Ï“r â5ôãOx ÿ¢þÿ`/‘ñ¤‘K‚çjZÇă‡;<Ü]ÊQ€b!øAvÁSŽ× à „ÌYx[¹óñ×@X®&l6³“$¸Ó¹ž‹7ô!»šU¿‹ì¤õ~Zp’Üicà¦ÐÃ}æ2¯âË%Œ^Ä MýКòˆ"ŸÎb™É{ùh—ð>h“ίÏÁ~ï åžw%ü]Œm¼­ÉïLܾ±€Äš’%MÔÄÄ×íT:¹[zÑ}yõŸZÙ™ÃÛÊ]ð‰}•¡ðž¡z´UU­®õUr=#^Iä.[EÈWåwê´ˆ§»¡W=0ô^Õ®¡=ƒ¨nJNÀéÏRVa¤ýtí²Mì£U-ã•-ù’[¶²2tÊnU†õáÖÊûvØ'kª°òž¶ADYXó×J$ŸÑ$ï´¯,Õú†Þ¬ÝwÜ”:eè¢ Z&ØQ»OŠ'îGÄkR¼¯¶Â'ÅWÑžðÃC×î驇°”ëË„Í1‚ÿž0ÞÀ¼É´½EÀÿ=è Žƒ?ì!ŒþÊt¼Mø½CPý½é]ä=‚ðïØ»Èà}\Iß„ÿ² þGh@Hˆ½ÂÓÄëaÂôYQ€D!ÿMÐø±íÃ[¤½-t¼# üCLÇb†˜&ŠE¥‰y¢D,³Äb1[,¥¢^”‰•çÅâý*¿ªxHü>¬âªxLÁ/5lÁ¯…Ç<¡á;¸ âIO)xZÁ¯Ó𠻘cØ:\trI£d˜3<9—·“w‹ö,w’C¾Èƒæro¨ª°½§©Fï$Cd¨˜å 놭?RÎOsg˜¶i%>\4 {Òp,1¯,F¼ËeØÙÚáF–;nrªbcLη\€Û¶žÞÜ‰îµ –·!Ü#˜î>mÌsR¼d8®°3>85*‡ Ó+:ó-9}])¨C±j™BBñMÍrž<ZfØèÇY¨ºQY—f»*ÔQW†ˆ¸žáÔ0)Jé9“—<«Xp<ð†²Ë»º”NÛÜŸÞî$i…\rÜs¬Bn ¥• —A§Ëw%e½`ä¹KáãÇÆ2" ®Ñfˆ ·ì#$ÈÐvÖÿžG‰±±6igg~b¾DÒ,S:9·f¦ìYvr’›~lB&Iv7;Ï´@!é°ÉçMÅ«ñ)IÁ­ó–¯L4Íœ1ÊJ:ôž“C™ŒX™3ô:9DQ’GmóBÎ£Õ V®PtDMŸ±48‘¾{ôØáÌÐW¤wÕ\¥@‰YŒ:bžRûÙÜÓšÍú,”¡Á‰Áᣇ(ÎUÑñãéŠh8x×%•¢“öK©·é—“éÈÃ¥ƒ¨å´¹Ñ×J[éë±”&ôDD÷°ŽÆÔèèÝO³„èXŸè{,Ñ·ˆÐ»¿‡ÈÛ´¢ïS`-}§‚zEnF;vaÍ:}%$±#NW*¾‡ïW “r´%Þ»Zƒ‹ÊÅ[$Œî T`˜hÅå½$-ö´Ä0â¶šÐ>ò(‰ö´Ò® Ò¤%äÛ}KˆJ¨Dÿ"”e¼8!C’‡†E(-1»|½š“íØJ;íÒ]ÁðGä‰og—ÄC¨ïêp b¬FÙ…¡½ätHBôÉõ:c«?¦'B³}ôìo1ÕâV ú¡/IC%¡ÏB»Û>‚zb ±=Ñþ¸¶ˆ5‘Lúî¶MÑM‘øu`m‹XwœŽ8¢ÄµÀZûÛÛ_/•nJñŠÒ†šR]Œõ5‘÷ñÀ~ÇþÕï\&q}+H`©?¾q™Ä¦ÖHllL"×ß,ñ ¼oVðnøj¼Í5‘•`›ûãß’`Ѭ¢‘ø·)7Û;Ú.!ó¶œè ø%tíQD mR±u;÷(b´-z™ªvYg×Ëå¶ËU¨íbùm0vž=Ç^ ëü|x Ûè§ä.P>”г¸¥ŽG9PÆm˜Åíô¯ã=˜Cçð î¥ïžûpçqà3<ˆ/ðþ‡ñO<‚ã1Ö‰ÇÙ<Áºqí“,…§™‰gYϳs¸ÈÎ㻀—Ø‹x™½†W(;/³q…}Š×e^ÞI…LW­ ‚dr”¢QHŽÒ4 ËÑA¢Ì ³¿ã02T¸:û€xÿQ²£ŠB¶úpG¡¬ÈóQòÍ/•Œ\­S*oIJ 3P°JôT(Ñȧ40†ñfÞi``Ç*&IÙ7pœF+ L57ðþÿeà„ì™ÂÀ~zÂõ |hA'k!ºS†(ûSÜUmØ*?iÐ*ï–°A°{šsü¼G£ÆqúŽfsŽ_6àh\Ã1+5ùPK Åzt5 g50R w3org/apache/xml/resolver/tools/CatalogResolver.class•W |[UÿŸ6ÉM³Û²e˶¬°e/–&íl3›{0Wm»Ñ=ئ(·ÉmH“’Ül*> ""QÇCñU8‹²t0DØQPQçĈˆ€ÿsïÍmZÒµüòËy|ç;ßûûÎwxíλP&ôa#®©ÁÛp­®“Ã'}¸Ÿ’«Oû8|Fn÷Ëá†7zq“7ã³>|·(ø¼_û/*ø’_–Ð/¾"A_õâk’Â×ÜêÃL|C|Ó‡z¹©Ç „ܦà[ ¾íC×xq»œúPćä†ó>܉ÃrøŽ¾+¹Ü% ÉíÝruäô=¹½W®¾¯à>/î÷âˆKpÔ‹(ø¡Ëq(?’«}ø1~"‡ŸÊá!~†<,o=¢àÑIø9“ˆ{ñ„¿À/üJÁ“ ~­à7u­WÏ÷i }Í-§ ˆ]¾ÝZ:•ÔŒT¦[@Ih†–Îr5·5›ëŽiDîÑcý½éXNÏgÓ»õ\l…ÒLz6v›–Ѻõœ@x¼K6&ïzV¦2)c•@u¸a»€k]6INhMeôöBo§žÛªu¦ ñ·fZz»–Kɽ t=©¼@lLvF6›Î—˜vØPru…wInu}¹ÔnÍÐו´NXry]é-)ì—J¤hÀ K´(–¯[7Êóà °ä^±ÅLž™1RÆ^áÖó´ÝZ,­eºc[ŒÔüFHÃAÞ¾Bg:•hIJûU:ÏïÍz¯<÷ÚÒpYÕKÓ†,üŒnÄÚ´tW6׫'·u´žÙŸÐûŒT6ÃÛU)â,¼T6Ö²©ü°Ö¦WÒbõµ6’ÆÉký±–L_ÁØ’-ä:)*)k)<Vu!—¦c‡¥§ÐÖe#§k½#6/š`bˆaeL‰Ê•QleÖ¾ gô›"9-“—ö‹92ºzrz§N-¯›§hÿ®œÖÝ«g rëÑò=›³Œ ÑÂ!ïBZ‚%:µáÞï)Zg~­IÁ“· 3¿"_i¤-kv8ì}Žjd1%¯–Jé!prxtdP6-)oÌá‘m­æ™Õäû6h #›c ,(#Û§åòz./ n6—6–Œ+½_à” ¸âºl¦+Õ]ÈiRƒr/Í! —ª½ÚùúšNªX0tGÅñSHéJ¥-«»hõ%´ž¥ÿ†”,@ÓF•–Å’‚ŠlQñ´ªh“C;6)ø­ŠcøŠÍ8KÅ9Ø©â÷øƒŠwã=*þˆ? ,·i…Ì`+H¹CšÁôì3ôdhOÊè e étÈ.¶Í¡Tw&›Ó“ þ¬â)<­àÁ•³Ÿº <ă^: ¹½T;ddCvÄKÊÏ L­äsZb›Žù9h,楊²Ê‘¤ù×r°U…Tœ+±gŒ‘ÛҪϫøž§3˳[ÅßñÿÄ¿JrŽÌ_é£ýº¶ÐÕ%ÃvönLJ‘ eC•1 …U¼€ü[ÅKø³±ÿù ^Vñ_¼¢âxU¯©xWª<”QT©ø˜ÜV — ¾†•’iki¥çÊ$­éfXXf}HvSoÇdÛ:X掛¥ªðEÅÅØ§ ¯¨Q„O“„ªŠZ ¨'(b²Àâ7—jR˜)3ÇÊ6EøÉRLUÅ4€"¦«b†˜)Ðô¦ÞiÉÃŽÛÔyžž`œUÎutášSÉ 4UYi›ØóNÖ|‰·T<á€"ã?áÃ}ÍTÞß–×-NÀ&‡­–;©w¸[4&¹=Ý'ݰ^"’Ú !ÊŽDÏç)c>ÜR¡Â±fÏG…á§{‹™–ŒßJ¤*/]Ýl&º@|bW+ TªÑ„O⓵Ùil|Ù>=SzÜg„ÆxÞkyií^C/aÎ WD4_5­$IºqB„ULšGŸ­=¹ì«GõY ¯E¸â3y4L¶+™¤Þ¿©k #´ÈwµÐ™·±éë–Š”áÊpŸí&³ŠxÒz¦Ûè1ƒ³E6ª#{§Ê>ðè´t~”|V’6Ë¿Qr dR«£sÊ*¯À‰á1[<‰¯2¹œ&ƒý`¸aÌþcÞø-#*£ïiÉä -“0{ƒ†‰5*²wjõ)¥’”ƒÊl;>-©?Îñp˜V0Z ¢Ê’eëØ5Ò2_~„ùf…ǰžÄ]4^åÙPêÙa™«ycçM)ª0—³Q…¼.Ù-œÛ̹JöLæÌv‰³'lª8n宓p¾+E† "®ƒ¨ŠTDuD„+rîƒðDª‡ ÜfRØÆq6Ž­äôVÔ`ê°SÉ{ùÍ!¯íR§ '¿„ݶ“_bÂYaÿ"úM'»Éw/W.S¢ ñ^Bá!&a‚N^Æ;ÒÉ eZc†€ÂpšÃôÌ2ö±Â^ÄôP˜x+©m‚°c˜2mê38–¿Ê¬axV›el-ÞÜF?Çae{cþ úª"V·  >î’> º†°æî¸Û\»åº1rÖUAfÛúÛHÑOûÄZ/çÚ̲u„A ƒ[œ‚q*jÅø}"–#*â8]œ•‚‰Õ¦½VY9öZkjÀju .%ÕZ°ËðÊ>‡…ér– ¢är95wДÄvµ ¶‹óüèQxüg¶Ê(2vÛ(|ã`[ô6´7Ée{tÐÌ»u$⯮üuëàëùq¹‘• ÓE+êEæŠÍeâÏwÄŸoº–Í6E“.«"ÍZÓQU¬nÖÎ,E›ËÝU„Uóæ[tõÿPK Åzt5€RÚAé"3org/apache/xml/resolver/tools/ResolvingParser.class¥Y x\×U>G³¼ÑèI²6[cyyÓX‹;ŽcËKbK²3µ$+^c;ÛÓ̳4ñhf<óÆ–KÚ’†P M 4uZèBZZÀY,[qÚ&´u K€RhC–-ei)[Êî{ó4,SäOçÞwï¹g?çžk}é­?Kêb+H'éJ:A"àOü™€/éÏé+2û )૾&àMøºF¤ú› ý-}C–¿)³¿“Ù·dö÷þ!HÿHßÖè;Aú'ú®àÿsî  ÿZEwÓ¿iô=ùø¾|ü»€ø*º—þSÀ øoÿ ·‚ôC¦³Œ<¼|ûƒÐLиŠp° *Àz«¹Fvj!/ r×kܤ­ôF€1r“€ZA\à%np|y©€Ë,¯¢{x…€•B*¬q+T UÂaµÌÖx-tæÚ¯ƒBÜ& "`}€ÛƒÜÁ°wUòîðMAÞÈ›|³Æ›5¾Eã-ߪñV·1Õ¤Œq3—1bæîsFÖdâLÁ³F27¬Dj”©!—Ïd²f.×?‘I)¬¦SL•9cbØÈæÌ,ÓòŒ³ÆD÷Äx²;£Ör݇vßeoogògÄÆtvT¡át·»_OÇòãfʺÃHÅ“6ÅbľÙÛ8Œ[q¹y6òá¾¼š˜aÉôè ä܈Â5 ï˜©Ž@±tò¬™íî…)R9g:LÝó¶Òéd®@¢p4ê2‰ÞR*uF2™>w×à€³3ÅZÚÈ%r³×´#g98-”}»S¦Õo1èŽD*aíbòDÖeòö¦ãð\í@"eåÇGÌìac$‰•útÌH5² ùv½ÖX"·°2¶Àˆ×M7l<J/Ø<(Âbœ˜bZs½ˆÙkĬtö<8V˜LM¶ö½Ñîþ‰˜™‘”5-‡/ÓêÈú…„ßâÅ´,2+d¢©LÞ:”Îgc¦Ý—¦Ð¼X-a ÂŒhÑ”efSF²?›M«ueÍiÜ£1–š"Eø‡¬,Œ«ørçs–9‹Çæ``1gZ}¥)Ž\7G” Æ ÈÕBÁM ¦–È|9#çê€ÝŸ²Öù™¨]9ûÄìm[‹¬‹¼ìz¸T¡/fšÉ÷êE›ŠöÒù·¥™– tsÆÄy+‘ì¶ÒA¨Ÿ»_ÅÆŒ,¢a«ENöF£r¨"6p²‘³Œ,"‚£BÊLZØ©2Sñ‚ÙA_ýIÓþðJUEéLŒ¦ÒYI»cc Ë.³1“MÇPOáÜh*geó1»¤¶• òã‡4ˆ~©¬R¦ +d‚×^ðdÒÐÅw&Ÿ¶ÀÒ3ž ÏÔ‘A#y*7ã((ÅIÅæìp!Qdg{ÈY·Ã,Y@j*‹#á'æ›±•®¾]kÝTNñbJ»-,Žä-s ‘³O¯aYЯå:h`“J[êºê3cI¦m7dßyR4“I&b*Eó)UFâv\Û´÷ÿˆ´ËssRaTíd–Íé¶ ”ëT¯B®B-a¯"HòÙ¤ú¶²¦1îÞDÚ9¬–%[ṵ̀]J=±s âE|mÂYSZ„b9°#–tMoBÒ¯±äZÙ ,€Óg¢Å@¸˜qòtV§8™:¢QÆ(¡ÓtZã:ïä]:%i\§¥uÊ8C†NY9²tz'eêú?ÝÔÂóAoÓùvÞ­Óý Å{¸W§™õaÆý¼Wã}:ß!% ¡Ì¤ñÛtÞ/¢ÿ=¢óêô=®Ó»éQ¦%ó\:½nãQ7Ͻ߯³!´—äžü©SRë׺ôÃ’GØ Ï¡ÝÖy„cBѵj8:%줡Tמ0t)‹¤ °„›Ë"¤c±|áD*l¤UëFÇ@V§OÓ¯ét™®ètUüñ}F§—é>O_ÐQ-ÑÌ,™'Ït…÷xŒ:?À§!â^I[ép ¹d™á"ìpÕw½N 'uz½_§Ÿ§_€k¥ ”ÛDã¤ÎãœÒ)F†Æi3|—†GaÜ)#0Åù°™Š¥ób`4bÄÃGFE7³:çÄ1·îMgÃæ„1žIšá¬©T ·uçÒãfw>›h ŸKXcá¶SµgfuÂIU’ÚL‹fBàÀÈf ¥¾~î¡R¾Ay¿N‡ƒ¦`þ&£¢R»¸ñ†[¬ø΢­u7ÖÛB+ܼ‡¤<ÇÜ¥ö…»Ï™wŪ…[_ô)óœ4FJ*ó:п¡†Y:·¡’7rBîi=ëtpp)Hw] Ýrm4a°ŠëÏÈúò½¢ºyx,›>g?Hj3(bÒØéÃYÕ!U‰‰Ýž¸Ñ­¤+^Tº†vÈ<“7’¹’NÛŽ½íëOÈå–Š›NÍÓ‹G¥™ÌärM‘hYÎxuEEËhùíÕ‘Ùïµòw|:î–—à¹O?0€°¾¸9’‡móÆÖ˜™Ìˆúœ×Þ¢¼ÍÐ~"ñŽDo¸²Ò;¯\ Ø]*DÜO¿‘É ?fê,gö9KöU±]Ù¸¼0u°ž“ìñB[´õÛ¢2.«Br »^0 a ]Ð’BôÍéƒ$£öœ·Ìfs¤,¢ˆÛ¶c¤;Ro}<›OÛ³Uó›j抓@% ‚'-o×™æmØÎ.Gè†2ËàªR0™¢V:A'ÉKwÓ=t/ÝGÕT)íÆgŒ©±BZ45¢KS#55¢WS#Ú45¢SScÆÏ8ç³Îˆ® cˆX:?ÀsøzëŒqgûeâv¾D<¼|íWȉ4™T¶{.QP@•|ê8Wý¬"?¸ŠòÒ¸“jè05Ð1j†º+¡ê(¹Šm€27C­}?Sº-½~ £ù #䯂zÆ=?²²;KÒÈF0ÑKš…l9Ú #Š´‹m‰ieöè‚g¬ôÅŽÜÏ‚ºã¾ö«Ts¼ýÒ.S-D¼B‹:ž£º)ªÇÐ0EíSÔ$z©bŠÏÒn’ƒSÔü,ȶÒ.ˆ°ÄQ¢‚€T 1 ÈR˜¬•‚à?N›éaÚFï‚`Ð^zT ¶Åq„n€b“ãö»T, «vÄß„Q\€P) ]tçWëï)r[ÀuÚp`Éùs…_«h·ô2µ€Ž§cš–UÐ$Õ :«+:?'Ѝžšh¹Ã`1ù?ÕIÌŸ¡ˆ0zÄ%Z]Ë·ÒOÒc °Æø)UA?­D¬ Ÿ¡ŸU=îtƨ¥½cFš•"MÕ ,9¢ø`ÏúQàt§ 4yv~©H”W”z/= ¤•í¦cÛ]NHû%4½3aT«/ƒÛ+Eaæw9øéçŒât­åhùJi}´®ÍKë´¢…^Ø¡u‹: ?αýz vI0}.(xT9$zqª‡+¨T¦?ÆøFÁ*—`dú°"ˆšã¶R‚­s ~™ä/å ~„> râ/Fqž}é8Ö¼AÚ{jeèX¶|šVy‹xÔ(7 N}®ýºâÓnŸsù4Ò/ÓÓÊRˆÛO*)YŸÄÙbÞxmºjÙéUgóÖe˜¦Õ<‡ñ7Àø›´ˆ¾U”ouãbÒϸ>äX¬Þ&]­Ôš¦5sh´¿jß-2^½«T=Òî‰ã}jaã­k¼ïÏ÷a¼ü¿Œ‡G¢Í»âA¬oï¨_7EmØà¡ÎoÈ[™¢õ[|M¾ÑXÈÛä[¸ŠÚegŠ:¼Oӡ׃ig?äõ:;!¿{f3¶›|²ï…:ú5j¼J]Rºõ÷2mš¤jYn|øz4ì/Ð+Rݧhãú€Ì^ MZýÍ(Ú›»®QÌ]Y×5E·`±Ý{IEså«°šÜ ·E®-,¡ÐÚX·NÒº¿sÖ•¶¿LÛê{¦h»½¿}ŠvLÑÎI—¾‹³ ›E{ n+Ah-¥p{ B“íâåâÎiÚí‡+pU>ˆä&øî+ôU÷Vz'.P¢·p­þªàÔ® %ì¡eì¥ûh#û©‡5ÚÃÚÏ•4ÌA:Á:\MY®¥‡¹™ã½Ÿ—ÒGy=Í+诤¹•^áUô¯¥7¹½ÜÁkyïå<Ê·pŠ·ðyÞ¦"ìnpGt" ³_W‘,³ßÀ¬’§‹¸Ì=ï(´yµ„é9DíÁ>zk~Ü‹D/ þKò·ÒnIÿ¬˜¼LWœÂ7OÖ홓u¼“4ÞEu|ûç\ƒÎ/ãj³9;$Tà쳫ˆ¯£³kšú½sXë£`6 Þ›©$!—uÈe¢ßT~–™Üʳ+Éçé Žçám¹á[Š„¨s„ÁÆ{}sÄ0 ÆĈÑR6•›mE@AŒWŒG ™}Q…[±@×èU;Œ¸ kv.è@*îêzUUÚJ;²*Åktâ*Ýq¼ë2E¥”¡§z›(|w÷øB¨dû¥ÒI…y/ªª&™î-dú ²\jãÆúvÊ£¾læ‹|Eèþ2[5Í<õST˨†Ö°…¬>K›ømåGÕï¦(?Ь~ŒŽð{èü8=ÄïSf:(5U0ÓÃÊ8¬fïUfªE›ý[ÊL›m¿ÆÎ‹î´Ž¾„LõQ×üïÐï"Àó’‹^œy ÷žmºJÇ—¦X1§}š†+È™Ýé΢Ӭ?t…N’ˆÛÅhh»ñZ˜¤¶¡Îk´\­ubqƒZ ö¨v3õÆÐŸ…k©/„›h#Þ·c쇊G0½†øI˜ëƒ0× ñS¸ß?Lkù#ÔÍC!üíæIêçgèšîƒÉãü¼2Õ.( E\S™Nk¹–n£ßƒ1*¨¿R˜ïè–jÜ-”{|øb)õÞëþfá&?öË|_÷ã€åã@Y ŠÈdø’ úq(€/ã+~<$óÃ2|U†GdøšhxÔ‡ÇĨÇý8,ßБ¾Ž'üxR„~Ãoúñ”ß™ßöã龃ß+Å÷ñ?ž à‡ø‘?öá'><«09I&SF:½®?ÓãºMÄT§BED7õX¢§Ô#¥PךHõ4éI=Òk4õ÷Åšx,Ûi¤šÖ ã\®0Á>»ÙæPhó°™HÄÒyù”1)]3RÊ$=KìÚÚÖjïlj!-¡§£éá4_—ž6ÎÞÜJ+Zwè;õ¦¸a6ñ›b½+¢ñ¨¹R¡¤nñ÷šD·AÀ­Ñ¸Ñžéë2Rgé]1R*[=¶EOEåÛ&ºÍÞhZaÉ1ŒÉŽÆ{ˆj}4fZöLÏùOØÓz·6z7·†7©§Œ¸©P=“Bý¸ý/}}ùkkKï›è1L›¬0¿nñ±Î¯‡&¥é³™Ãõ·Ä“³#‘IE K²'*…š1¹\QC¬›döp›>ë±u©TB|X×1’»ižóáy…©uüfŠ·aéó§w§M£¯¥[®x‡B¹mʺ¸5w+¬*"§ˆä£ ÷'3]±hD4úmá\ú¢9b&³¾Í”¡÷yN|4a˱Ȕ£ gÏRíØÌ=-ž0­Ü]kD(lÙ¸@w;®÷IügâÖvç‘“»á-Ê-®ÉÝniÔÒ¦ž2×ÅŒ>+Î|«º obµIbWÆ4Ò–Fº:ªP“ÔÎ)õ\’›Ýºi2³§uš®O¦Jêh‰§ÍT&’«•µã IrÚÇ<’lv3Oxé‘|N¹s„’d‚(T‹Ë$L‰Ž¾ ÇàPkÓcÛ©>£›õlX¤ 3“l¶ Ï—Dv1ÊÜ<½„z ©îQ¢õ¯ˆÄìÈ T®YljJ ›p¦/hø)^Ôðvœ®¡ghØ C+Ökh“¡ßTÑ2œ£á|\ ágxIÃuèÕp!."¤1ò]à 9?Ç/È8Fî‰lòü½ôNaÐð+üZÃoð[6À" ¥áwxY¡jä-6g¶o—’:{½N§uÍD0Âä4`Ö`†Wðª¿×ð¼ÄÛ\ìÃ5ü ÖÁN ýØ­á2¼#ß»‰½ÑŽþ¢á¯øoʦœ¦áïø‡†×ðº†7ðOYýKLû7=*4üÿU˜2JKpS %0.”Ò”Kü³Ð9”´§±ÁQ§ÂAZ¡Jæmj½´ †tÊpØŠ2E{≔Ñ- 'eHD"™9‚ÑxPsܩǢÝA†oÄï»ééïR§|Ê­)òjX‡õ>åÓ”_•*„œ.dÖvÒî $2G”Ý¥w™%¢Ã§š*œ²>‘ ýz_2f4S†¥2XÛ”NôM,µÁ]Q³7X»w¢§pü›}(Ì-ŒÙ^#–4Ré&g¿…ò¡)}`£s;,Q…';Vo-ØZ4¾Ž®0‘e¨CjoÄ!…ŽÝÔ‡ÞwerÞé£Sx´H'D&;×»óÝôÔqvÓ"âÊXß694Hñ|ǬÎÕ3Ëy¨y·iä9§Õe´"ÝFW†•¸vL7ä¯i­0ÊSROÁ4{kŒ"åªÇòa%ç¬ÞTbWîmé79>&ã¸È#ýˆW·y]Ëx»ÐÄ‘Tb\’Ñcé¦];Œˆ¹|q§ý¡C(Ý:€’AȲߒÚÁqÑ€òÜX…24c"±M%ªéÄ2‡zëDœÅ?@ËéÃÙØÂY°œcc¹†ç]œO Õ¢ìÿ³‚ÑfÁTÌ ‚ ÌBl£úN LUN¡ FV[¹«,X6¬Û°–ËEõ²;´/8ŠŸ.Äb\„S¡À[æÀ[†sɃwž ï6J+áŸ×ŽÏ8Šë¶“§‡8z-|Áœf_ØvŸ¬©‹k>m¤K,ä ˆpg¡ísôz-z¼ >üN|ðÅH.9gÑ77ä›ê³(D…˜=am6aRÃÃûy¬•tíD[Átª®¦a×rç:u=fóµÄ†Ìu ™Ë 袔*:$‚nJ1,˜.: ÇÕkƒÊØ fØ lD•(k“… 'À¼«ç¹;·c2îÄ4ÜEúÞ8383ÅJ™Ì¼/çbÄr>VŒ÷®ÊÝ;]ßÅäöÆ#˜Â/Ïa”Ëd£ó¦lkÄÔ°»ÆMVBµ|O {j„YÛ1»rNÁ^å\Εó8d1¿1‹jŸÚG@u4¶ƒàsF‡QÁñn}q/ÝÇ€¿Ÿ\Yý£ ¹ÇXÆgx¡ñOàr<…+ñ´å”Í æ8å*ôYN‘•¸ÇE©)Ñ:o o0Át[AœdáóPn—ÃK !¤aZ¥ïvû&Ïç·›syÎuõ táܨ°îä9 zž1ú‚)”;à@*Ç.R¹Îe­¢$¹1Q(÷Åß ¶Ò(åy¤*;Jk܃X4RíËdz…ëW-µKsGµµµlµ²º”+÷0ürTµ#¼F¦×¹~c —;®p\éx'¯h8>ös\1Òx±*^_Y—Åâ=JWí •¡,êOöLõÜŠÞ÷TÏDÿEYX;Y4º÷¢£Æ]Âåq¢n{GBÕ>³”ÛS=²/aë?Œ)Ú²›ÚP.ù˜ÆOØÇ=ï<"AžÅ {p³î¾Ê%L—Ì–ˆC©c˜ŸH¢d½ô¡¥¬RÜR)»$±Äå¸NÀ¢°×>ëÍ'ÏÉ̗ܾ¤M§ 8òžS¹ÙPÀМgX6‚aîH á ¥¼âA,ßOïw2®Äñ¬9Ï2žóiz) #øÓ±T• L¹Q¡¼¨V>ÌT~Ô©Rœ ówU³Ò°A•óÇf:ÕDèjRj2®R3qµš…ÕlÜ¡‚Ø«æá šÕB<¢á)µ/ªzåVMj¡Z¢Ö«“TZ¦úÔr+¶Î“ö­âùØâê=¹Øâê½Vl•©mxSº„ضàýVpW«6–÷k—a¾‡®%͢>€²¾Èr ï-ˆA—üCÂîLÏØIЬÚ*W<€ÓÚàmWm! Öðilœ¨mo8ŒY­Ä&‹[m–+¿5ï'*㹌~­`‰›ÅyšXŽ/|ž¨Up©fhj-m8³Õ˜§Z±TmÄ ÕÕ´K|±ÒêÍNž5Û}ÀÅþü!zÀÅJä²l,á­Í·W’×s%Ï–“2 á>¬¼ îê|ˆ¼áQŸ‘Õܨlæì¾+‡ª@•øGu«ÎÅujÕ¨W¼R” 6J?ŸNùwæ,«:ž[¬*hü+8Þh©úÈÿPK Åzt5WJ"øÖ6org/apache/xml/resolver/tools/ResolvingXMLReader.class•TÛRA=Ã6 +ˆ¨ˆˆ( ä«ˆWE‹ª"^ÞÆ0†ÕÍnjwüß}ðY­ –~€ey&IQñ†‡™î™>ÝgNwöû¯ß``’èÂ…$.b,#Hi+­­Œ¶²zÉ%7‘„K&.'1‰+4e⪉k]ž¬¨°*Kjn[J@<HnI×Ù‘ã•:fωfŒTz] 6ïo0¬;ïxjùMå… Šò…Ë“cy¿$Ýu8ÚoÆ¢M'˜ÌûAÙ–,³©ìŠk*ôÝ-ؑﻡ½ZwYîi!¿ªä† ¦Y/¬¾Í¿’[r§ŽªÊ TAh¯Í=]©›‹²ùÁ[w4î÷‹g`›Ú8Q²]é•í…’ªFŽïñ2›ú'ÑyI×/¤'ËL¤¥0+ GàÀ0øLÉm š\óß%µèh¥úþÔ`B“´p ½&®[¸›ºqÔÂ-L[èÑÖŒ¶ncÖÄ w1gâž…yÜèýË M,XXD¯Î9$pé°M9„ÏŠ4døÿýèôÔö’FÒ+Q‹‹©ôÁºÞªhù·Ž¥žëæáÕzË[¬°—A`hÿÌ=°Ï5Ó•UÔ¢K?ÓiittHTëŸo½ØTnU§Úh©RudËÔÊ‹N§þ‘J?«¥­ÅÍÀßnüͺ«ãEk‘,½.”çùèІ„Z =0Ü =Q\Ó{ǃ{.³ ñmùì'5ĸµ×Б­Á,dr5ÄkH|@¼@³ó#±'1ÂK’èD#Îu1ÎcœãØYFÜÅæ0ÆqÌb>ak¡§¸Ç™£§™m€öÎ0Û#q––f9Ôdùž¾FŽg²»°H³kÐÌ5h’•¹œߣ¹<Þ¤Ù‡Q¦ü•æC´c…r<¢«Œ(²ðc¤ð„ÄžÕiN1‚Åš4µuŽ‚²IMÂmD4Ä5<Þ“5Í]ÿ±Ï0ŒÏhÿHGÔItÕõž ì2!<©÷iô'PK Äzt5ågMETA-INF/INDEX.LISTóJ,òÌKI­Ð K-*ÎÌϳR0Ô3àåâå*J-ÎÏ)K-ÒËJ,âåÊ/Jú‰‰É©ÈlýÔ¼2~En:_fN  XA1nÙÔ’dÜ’©9@×ãVP”š˜‚WAI~~N1È×PK Åzt5 íAMETA-INF/þÊPK Äzt5щþߤ+META-INF/MANIFEST.MFPK Ãzt5íA<org/PK Åzt5 íA^org/apache/PK Åzt5íA‡org/apache/env/PK Ãzt5íA´org/apache/xml/PK Åzt5íAáorg/apache/xml/resolver/PK Åzt5íAorg/apache/xml/resolver/apps/PK Åzt5íARorg/apache/xml/resolver/etc/PK Åzt5 íAŒorg/apache/xml/resolver/helpers/PK Åzt5 íAÊorg/apache/xml/resolver/readers/PK Åzt5íAorg/apache/xml/resolver/tools/PK Åzt5t uµñd&¤Dorg/apache/env/WhichFactory.propertiesPK Åzt5×⥳Tþ"¤yorg/apache/env/WhichJar.propertiesPK Åzt5$EÅ._%¤ org/apache/xml/resolver/Catalog.classPK Åzt5[îjG *¤`9org/apache/xml/resolver/CatalogEntry.classPK Åzt5‡ã$Ϩ¯.¤?org/apache/xml/resolver/CatalogException.classPK Åzt5žÔ³dÜ,,¤Corg/apache/xml/resolver/CatalogManager.classPK Åzt5ç§Qù…ö'&¤´Vorg/apache/xml/resolver/Resolver.classPK Åzt5=ÀLÊ ¸%¤}iorg/apache/xml/resolver/Version.classPK Åzt5h‘oŽ .¤Ékorg/apache/xml/resolver/apps/XParseError.classPK Åzt5£;; ‘+¤„qorg/apache/xml/resolver/apps/resolver.classPK Åzt56ðf° Ý)¤org/apache/xml/resolver/apps/xparse.classPK Åzt5ܶ5ÅA 9(¤ÿ‰org/apache/xml/resolver/apps/xread.classPK Åzt5¾ÛÈ®Õ'¤†•org/apache/xml/resolver/etc/catalog.dtdPK Åzt5Rª×”¿A'¤Ì˜org/apache/xml/resolver/etc/catalog.rngPK Åzt5,ÞT!'¤Ðœorg/apache/xml/resolver/etc/catalog.xsdPK Åzt5 Ml3ÑD(¤i¡org/apache/xml/resolver/etc/xcatalog.dtdPK Åzt5&þ@¼Gå7¤€¢org/apache/xml/resolver/helpers/BootstrapResolver.classPK Åzt5¾¡q´†+¤«org/apache/xml/resolver/helpers/Debug.classPK Åzt5šêjmt-¤®org/apache/xml/resolver/helpers/FileURL.classPK Åzt5Ò7NrÅ0¤Ñ°org/apache/xml/resolver/helpers/Namespaces.classPK Åzt5€Àch.¤ ´org/apache/xml/resolver/helpers/PublicId.classPK Åzt5-c}ò°3¤T¹org/apache/xml/resolver/readers/CatalogReader.classPK Åzt5k†V!«æ6¤—ºorg/apache/xml/resolver/readers/DOMCatalogParser.classPK Åzt5¡š}Ñ+6¤–»org/apache/xml/resolver/readers/DOMCatalogReader.classPK Åzt5]T½a>¤wÄorg/apache/xml/resolver/readers/ExtendedXMLCatalogReader.classPK Åzt5õ0}‹¢½';¤Ëorg/apache/xml/resolver/readers/OASISXMLCatalogReader.classPK Åzt5À¾T]Á6¤‹Ýorg/apache/xml/resolver/readers/SAXCatalogParser.classPK Åzt5 Hì¡(6¤ Þorg/apache/xml/resolver/readers/SAXCatalogReader.classPK Åzt5ßp›;3à 6¤sïorg/apache/xml/resolver/readers/SAXParserHandler.classPK Åzt5UãÆ Ù 9¤úôorg/apache/xml/resolver/readers/TR9401CatalogReader.classPK Åzt5y_Fá ;7¤qúorg/apache/xml/resolver/readers/TextCatalogReader.classPK Åzt5×FØÆJë4¤Õorg/apache/xml/resolver/readers/XCatalogReader.classPK Åzt5 g50R w3¤q org/apache/xml/resolver/tools/CatalogResolver.classPK Åzt5€RÚAé"3¤org/apache/xml/resolver/tools/ResolvingParser.classPK Åzt5b‚ê|½ ì6¤ò'org/apache/xml/resolver/tools/ResolvingXMLFilter.classPK Åzt5WJ"øÖ6¤4org/apache/xml/resolver/tools/ResolvingXMLReader.classPK Äzt5åg¤O7META-INF/INDEX.LISTPK11~ç7xml-commons-resolver-1.2/resolver.xml100644 0 0 27413 10530407253 15224 0ustar 0 0 Build file for org.apache.xml.resolver. Dependencies: none for building code (except using Ant 1.5+ to build). For documentation, see comments - requires forrest and requires that you build the xml-commons overall site first. Also, you probably want to set -Ddocbook.dir=/somewhere/docbook Also, you may need to adjust src/documentation/sitemap.xmap near "wild assumption about location of DocBook stylesheets". @author Norman.Walsh@Sun.COM @author shane_curcuru@yahoo.com xml-commons-resolver-1.2/src/manifest.resolver100644 0 0 527 10530407252 16755 0ustar 0 0 Manifest-Version: 1.0 Main-Class: org.apache.xml.resolver.apps.resolver Name: org/apache/xml/resolver Comment: xml-commons Resolver code Implementation-Title: org.apache.xml.resolver.Catalog Implementation-Version: @impl.version@ Implementation-Vendor: Apache Software Foundation Implementation-URL: http://xml.apache.org/commons/ xml-commons-resolver-1.2/src/org/apache/xml/resolver/Catalog.java100644 0 0 220057 10530407252 22334 0ustar 0 0 // Catalog.java - Represents OASIS Open Catalog files. /* * 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.xml.resolver; import java.io.IOException; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.io.DataInputStream; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; import java.net.URL; import java.net.MalformedURLException; import javax.xml.parsers.SAXParserFactory; import org.apache.xml.resolver.CatalogManager; import org.apache.xml.resolver.helpers.PublicId; import org.apache.xml.resolver.readers.CatalogReader; import org.apache.xml.resolver.readers.SAXCatalogReader; import org.apache.xml.resolver.readers.TR9401CatalogReader; import org.apache.xml.resolver.readers.OASISXMLCatalogReader; import org.apache.xml.resolver.helpers.FileURL; /** * Represents OASIS Open Catalog files. * *

This class implements the semantics of OASIS Open Catalog files * (defined by * OASIS Technical * Resolution 9401:1997 (Amendment 2 to TR 9401)).

* *

The primary purpose of the Catalog is to associate resources in the * document with local system identifiers. Some entities * (document types, XML entities, and notations) have names and all of them * can have either public or system identifiers or both. (In XML, only a * notation can have a public identifier without a system identifier, but * the methods implemented in this class obey the Catalog semantics * from the SGML * days when system identifiers were optional.)

* *

The system identifiers returned by the resolution methods in this * class are valid, i.e. usable by, and in fact constructed by, the * java.net.URL class. Unfortunately, this class seems to behave in * somewhat non-standard ways and the system identifiers returned may * not be directly usable in a browser or filesystem context. * *

This class recognizes all of the Catalog entries defined in * TR9401:1997:

* *
    *
  • BASE * changes the base URI for resolving relative system identifiers. The * initial base URI is the URI of the location of the catalog (which is, * in turn, relative to the location of the current working directory * at startup, as returned by the user.dir system property).
  • *
  • CATALOG * processes other catalog files. An included catalog occurs logically * at the end of the including catalog.
  • *
  • DELEGATE_PUBLIC * specifies alternate catalogs for some public identifiers. The delegated * catalogs are not loaded until they are needed, but they are cached * once loaded.
  • *
  • DELEGATE_SYSTEM * specifies alternate catalogs for some system identifiers. The delegated * catalogs are not loaded until they are needed, but they are cached * once loaded.
  • *
  • DELEGATE_URI * specifies alternate catalogs for some URIs. The delegated * catalogs are not loaded until they are needed, but they are cached * once loaded.
  • *
  • REWRITE_SYSTEM * specifies alternate prefix for a system identifier.
  • *
  • REWRITE_URI * specifies alternate prefix for a URI.
  • *
  • SYSTEM_SUFFIX * maps any system identifier that ends with a particular suffix to another * system identifier.
  • *
  • URI_SUFFIX * maps any URI that ends with a particular suffix to another URI.
  • *
  • DOCTYPE * associates the names of root elements with URIs. (In other words, an XML * processor might infer the doctype of an XML document that does not include * a doctype declaration by looking for the DOCTYPE entry in the * catalog which matches the name of the root element of the document.)
  • *
  • DOCUMENT * provides a default document.
  • *
  • DTDDECL * recognized and silently ignored. Not relevant for XML.
  • *
  • ENTITY * associates entity names with URIs.
  • *
  • LINKTYPE * recognized and silently ignored. Not relevant for XML.
  • *
  • NOTATION * associates notation names with URIs.
  • *
  • OVERRIDE * changes the override behavior. Initial behavior is set by the * system property xml.catalog.override. The default initial * behavior is 'YES', that is, entries in the catalog override * system identifiers specified in the document.
  • *
  • PUBLIC * maps a public identifier to a system identifier.
  • *
  • SGMLDECL * recognized and silently ignored. Not relevant for XML.
  • *
  • SYSTEM * maps a system identifier to another system identifier.
  • *
  • URI * maps a URI to another URI.
  • *
* *

Note that BASE entries are treated as described by RFC2396. In * particular, this has the counter-intuitive property that after a BASE * entry identifing "http://example.com/a/b/c" as the base URI, * the relative URI "foo" is resolved to the absolute URI * "http://example.com/a/b/foo". You must provide the trailing slash if * you do not want the final component of the path to be discarded as a * filename would in a URI for a resource: "http://example.com/a/b/c/". *

* *

Note that subordinate catalogs (all catalogs except the first, * including CATALOG and DELEGATE* catalogs) are only loaded if and when * they are required.

* *

This class relies on classes which implement the CatalogReader * interface to actually load catalog files. This allows the catalog * semantics to be implemented for TR9401 text-based catalogs, XML * catalogs, or any number of other storage formats.

* *

Additional catalogs may also be loaded with the * {@link #parseCatalog} method.

* * * *

Change Log:

*
*
2.0
*

Rewrite to use CatalogReaders.

*
1.1
*

Allow quoted components in xml.catalog.files * so that URLs containing colons can be used on Unix. * The string passed to xml.catalog.files can now have the form:

*
 * unquoted-path-with-no-sep-chars:"double-quoted path with or without sep chars":'single-quoted path with or without sep chars'
 * 
*

(Where ":" is the separater character in this example.)

*

If an unquoted path contains an embedded double or single quote * character, no special processig is performed on that character. No * path can contain separater characters, double, and single quotes * simultaneously.

*

Fix bug in calculation of BASE entries: if * a catalog contains multiple BASE entries, each is relative to the preceding * base, not the default base URI of the catalog.

*
*
1.0.1
*

Fixed a bug in the calculation of the list of subordinate catalogs. * This bug caused an infinite loop where parsing would alternately process * two catalogs indefinitely.

*
*
* * @see CatalogReader * @see CatalogEntry * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 * *

Derived from public domain code originally published by Arbortext, * Inc.

*/ public class Catalog { /** The BASE Catalog Entry type. */ public static final int BASE = CatalogEntry.addEntryType("BASE", 1); /** The CATALOG Catalog Entry type. */ public static final int CATALOG = CatalogEntry.addEntryType("CATALOG", 1); /** The DOCUMENT Catalog Entry type. */ public static final int DOCUMENT = CatalogEntry.addEntryType("DOCUMENT", 1); /** The OVERRIDE Catalog Entry type. */ public static final int OVERRIDE = CatalogEntry.addEntryType("OVERRIDE", 1); /** The SGMLDECL Catalog Entry type. */ public static final int SGMLDECL = CatalogEntry.addEntryType("SGMLDECL", 1); /** The DELEGATE_PUBLIC Catalog Entry type. */ public static final int DELEGATE_PUBLIC = CatalogEntry.addEntryType("DELEGATE_PUBLIC", 2); /** The DELEGATE_SYSTEM Catalog Entry type. */ public static final int DELEGATE_SYSTEM = CatalogEntry.addEntryType("DELEGATE_SYSTEM", 2); /** The DELEGATE_URI Catalog Entry type. */ public static final int DELEGATE_URI = CatalogEntry.addEntryType("DELEGATE_URI", 2); /** The DOCTYPE Catalog Entry type. */ public static final int DOCTYPE = CatalogEntry.addEntryType("DOCTYPE", 2); /** The DTDDECL Catalog Entry type. */ public static final int DTDDECL = CatalogEntry.addEntryType("DTDDECL", 2); /** The ENTITY Catalog Entry type. */ public static final int ENTITY = CatalogEntry.addEntryType("ENTITY", 2); /** The LINKTYPE Catalog Entry type. */ public static final int LINKTYPE = CatalogEntry.addEntryType("LINKTYPE", 2); /** The NOTATION Catalog Entry type. */ public static final int NOTATION = CatalogEntry.addEntryType("NOTATION", 2); /** The PUBLIC Catalog Entry type. */ public static final int PUBLIC = CatalogEntry.addEntryType("PUBLIC", 2); /** The SYSTEM Catalog Entry type. */ public static final int SYSTEM = CatalogEntry.addEntryType("SYSTEM", 2); /** The URI Catalog Entry type. */ public static final int URI = CatalogEntry.addEntryType("URI", 2); /** The REWRITE_SYSTEM Catalog Entry type. */ public static final int REWRITE_SYSTEM = CatalogEntry.addEntryType("REWRITE_SYSTEM", 2); /** The REWRITE_URI Catalog Entry type. */ public static final int REWRITE_URI = CatalogEntry.addEntryType("REWRITE_URI", 2); /** The SYSTEM_SUFFIX Catalog Entry type. */ public static final int SYSTEM_SUFFIX = CatalogEntry.addEntryType("SYSTEM_SUFFIX", 2); /** The URI_SUFFIX Catalog Entry type. */ public static final int URI_SUFFIX = CatalogEntry.addEntryType("URI_SUFFIX", 2); /** * The base URI for relative system identifiers in the catalog. * This may be changed by BASE entries in the catalog. */ protected URL base; /** The base URI of the Catalog file currently being parsed. */ protected URL catalogCwd; /** The catalog entries currently known to the system. */ protected Vector catalogEntries = new Vector(); /** The default initial override setting. */ protected boolean default_override = true; /** The catalog manager in use for this instance. */ protected CatalogManager catalogManager = CatalogManager.getStaticManager(); /** * A vector of catalog files to be loaded. * *

This list is initially established by * loadSystemCatalogs when * it parses the system catalog list, but CATALOG entries may * contribute to it during the course of parsing.

* * @see #loadSystemCatalogs * @see #localCatalogFiles */ protected Vector catalogFiles = new Vector(); /** * A vector of catalog files constructed during processing of * CATALOG entries in the current catalog. * *

This two-level system is actually necessary to correctly implement * the semantics of the CATALOG entry. If one catalog file includes * another with a CATALOG entry, the included catalog logically * occurs at the end of the including catalog, and after any * preceding CATALOG entries. In other words, the CATALOG entry * cannot insert anything into the middle of a catalog file.

* *

When processing reaches the end of each catalog files, any * elements on this vector are added to the front of the * catalogFiles vector.

* * @see #catalogFiles */ protected Vector localCatalogFiles = new Vector(); /** * A vector of Catalogs. * *

The semantics of Catalog resolution are such that each * catalog is effectively a list of Catalogs (in other words, * a recursive list of Catalog instances).

* *

Catalogs that are processed as the result of CATALOG or * DELEGATE* entries are subordinate to the catalog that contained * them, but they may in turn have subordinate catalogs.

* *

Catalogs are only loaded when they are needed, so this vector * initially contains a list of Catalog filenames (URLs). If, during * processing, one of these catalogs has to be loaded, the resulting * Catalog object is placed in the vector, effectively caching it * for the next query.

*/ protected Vector catalogs = new Vector(); /** * A vector of DELEGATE* Catalog entries constructed during * processing of the Catalog. * *

This two-level system has two purposes; first, it allows * us to sort the DELEGATE* entries by the length of the partial * public identifier so that a linear search encounters them in * the correct order and second, it puts them all at the end of * the Catalog.

* *

When processing reaches the end of each catalog file, any * elements on this vector are added to the end of the * catalogEntries vector. This assures that matching * PUBLIC keywords are encountered before DELEGATE* entries.

*/ protected Vector localDelegate = new Vector(); /** * A hash of CatalogReaders. * *

This hash maps MIME types to elements in the readerArr * vector. This allows the Catalog to quickly locate the reader * for a particular MIME type.

*/ protected Hashtable readerMap = new Hashtable(); /** * A vector of CatalogReaders. * *

This vector contains all of the readers in the order that they * were added. In the event that a catalog is read from a file, where * the MIME type is unknown, each reader is attempted in turn until * one succeeds.

*/ protected Vector readerArr = new Vector(); /** * Constructs an empty Catalog. * *

The constructor interrogates the relevant system properties * using the default (static) CatalogManager * and initializes the catalog data structures.

*/ public Catalog() { // nop; } /** * Constructs an empty Catalog with a specific CatalogManager. * *

The constructor interrogates the relevant system properties * using the specified Catalog Manager * and initializes the catalog data structures.

*/ public Catalog(CatalogManager manager) { catalogManager = manager; } /** * Return the CatalogManager used by this catalog. * */ public CatalogManager getCatalogManager() { return catalogManager; } /** * Establish the CatalogManager used by this catalog. * */ public void setCatalogManager(CatalogManager manager) { catalogManager = manager; } /** * Setup readers. */ public void setupReaders() { SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(true); spf.setValidating(false); SAXCatalogReader saxReader = new SAXCatalogReader(spf); saxReader.setCatalogParser(null, "XCatalog", "org.apache.xml.resolver.readers.XCatalogReader"); saxReader.setCatalogParser(OASISXMLCatalogReader.namespaceName, "catalog", "org.apache.xml.resolver.readers.OASISXMLCatalogReader"); addReader("application/xml", saxReader); TR9401CatalogReader textReader = new TR9401CatalogReader(); addReader("text/plain", textReader); } /** * Add a new CatalogReader to the Catalog. * *

This method allows you to add a new CatalogReader to the * catalog. The reader will be associated with the specified mimeType. * You can only have one reader per mimeType.

* *

In the absence of a mimeType (e.g., when reading a catalog * directly from a file on the local system), the readers are attempted * in the order that you add them to the Catalog.

* *

Note that subordinate catalogs (created by CATALOG or * DELEGATE* entries) get a copy of the set of readers present in * the primary catalog when they are created. Readers added subsequently * will not be available. For this reason, it is best to add all * of the readers before the first call to parse a catalog.

* * @param mimeType The MIME type associated with this reader. * @param reader The CatalogReader to use. */ public void addReader(String mimeType, CatalogReader reader) { if (readerMap.containsKey(mimeType)) { Integer pos = (Integer) readerMap.get(mimeType); readerArr.set(pos.intValue(), reader); } else { readerArr.add(reader); Integer pos = new Integer(readerArr.size()-1); readerMap.put(mimeType, pos); } } /** * Copies the reader list from the current Catalog to a new Catalog. * *

This method is used internally when constructing a new catalog. * It copies the current reader associations over to the new catalog. *

* * @param newCatalog The new Catalog. */ protected void copyReaders(Catalog newCatalog) { // Have to copy the readers in the right order...convert hash to arr Vector mapArr = new Vector(readerMap.size()); // Pad the mapArr out to the right length for (int count = 0; count < readerMap.size(); count++) { mapArr.add(null); } Enumeration en = readerMap.keys(); while (en.hasMoreElements()) { String mimeType = (String) en.nextElement(); Integer pos = (Integer) readerMap.get(mimeType); mapArr.set(pos.intValue(), mimeType); } for (int count = 0; count < mapArr.size(); count++) { String mimeType = (String) mapArr.get(count); Integer pos = (Integer) readerMap.get(mimeType); newCatalog.addReader(mimeType, (CatalogReader) readerArr.get(pos.intValue())); } } /** * Create a new Catalog object. * *

This method constructs a new instance of the running Catalog * class (which might be a subtype of org.apache.xml.resolver.Catalog). * All new catalogs are managed by the same CatalogManager. *

* *

N.B. All Catalog subtypes should call newCatalog() to construct * a new Catalog. Do not simply use "new Subclass()" since that will * confuse future subclasses.

*/ protected Catalog newCatalog() { String catalogClass = this.getClass().getName(); try { Catalog c = (Catalog) (Class.forName(catalogClass).newInstance()); c.setCatalogManager(catalogManager); copyReaders(c); return c; } catch (ClassNotFoundException cnfe) { catalogManager.debug.message(1, "Class Not Found Exception: " + catalogClass); } catch (IllegalAccessException iae) { catalogManager.debug.message(1, "Illegal Access Exception: " + catalogClass); } catch (InstantiationException ie) { catalogManager.debug.message(1, "Instantiation Exception: " + catalogClass); } catch (ClassCastException cce) { catalogManager.debug.message(1, "Class Cast Exception: " + catalogClass); } catch (Exception e) { catalogManager.debug.message(1, "Other Exception: " + catalogClass); } Catalog c = new Catalog(); c.setCatalogManager(catalogManager); copyReaders(c); return c; } /** * Returns the current base URI. */ public String getCurrentBase() { return base.toString(); } /** * Returns the default override setting associated with this * catalog. * *

All catalog files loaded by this catalog will have the * initial override setting specified by this default.

*/ public String getDefaultOverride() { if (default_override) { return "yes"; } else { return "no"; } } /** * Load the system catalog files. * *

The method adds all of the * catalogs specified in the xml.catalog.files property * to the Catalog list.

* * @throws MalformedURLException One of the system catalogs is * identified with a filename that is not a valid URL. * @throws IOException One of the system catalogs cannot be read. */ public void loadSystemCatalogs() throws MalformedURLException, IOException { Vector catalogs = catalogManager.getCatalogFiles(); if (catalogs != null) { for (int count = 0; count < catalogs.size(); count++) { catalogFiles.addElement(catalogs.elementAt(count)); } } if (catalogFiles.size() > 0) { // This is a little odd. The parseCatalog() method expects // a filename, but it adds that name to the end of the // catalogFiles vector, and then processes that vector. // This allows the system to handle CATALOG entries // correctly. // // In this init case, we take the last element off the // catalogFiles vector and pass it to parseCatalog. This // will "do the right thing" in the init case, and allow // parseCatalog() to do the right thing in the non-init // case. Honest. // String catfile = (String) catalogFiles.lastElement(); catalogFiles.removeElement(catfile); parseCatalog(catfile); } } /** * Parse a catalog file, augmenting internal data structures. * * @param fileName The filename of the catalog file to process * * @throws MalformedURLException The fileName cannot be turned into * a valid URL. * @throws IOException Error reading catalog file. */ public synchronized void parseCatalog(String fileName) throws MalformedURLException, IOException { default_override = catalogManager.getPreferPublic(); catalogManager.debug.message(4, "Parse catalog: " + fileName); // Put the file into the list of catalogs to process... // In all cases except the case when initCatalog() is the // caller, this will be the only catalog initially in the list... catalogFiles.addElement(fileName); // Now process all the pending catalogs... parsePendingCatalogs(); } /** * Parse a catalog file, augmenting internal data structures. * *

Catalogs retrieved over the net may have an associated MIME type. * The MIME type can be used to select an appropriate reader.

* * @param mimeType The MIME type of the catalog file. * @param is The InputStream from which the catalog should be read * * @throws CatalogException Failed to load catalog * mimeType. * @throws IOException Error reading catalog file. */ public synchronized void parseCatalog(String mimeType, InputStream is) throws IOException, CatalogException { default_override = catalogManager.getPreferPublic(); catalogManager.debug.message(4, "Parse " + mimeType + " catalog on input stream"); CatalogReader reader = null; if (readerMap.containsKey(mimeType)) { int arrayPos = ((Integer) readerMap.get(mimeType)).intValue(); reader = (CatalogReader) readerArr.get(arrayPos); } if (reader == null) { String msg = "No CatalogReader for MIME type: " + mimeType; catalogManager.debug.message(2, msg); throw new CatalogException(CatalogException.UNPARSEABLE, msg); } reader.readCatalog(this, is); // Now process all the pending catalogs... parsePendingCatalogs(); } /** * Parse a catalog document, augmenting internal data structures. * *

This method supports catalog files stored in jar files: e.g., * jar:file:///path/to/filename.jar!/path/to/catalog.xml". That URI * doesn't survive transmogrification through the URI processing that * the parseCatalog(String) performs and passing it as an input stream * doesn't set the base URI appropriately.

* *

Written by Stefan Wachter (2002-09-26)

* * @param aUrl The URL of the catalog document to process * * @throws IOException Error reading catalog file. */ public synchronized void parseCatalog(URL aUrl) throws IOException { catalogCwd = aUrl; base = aUrl; default_override = catalogManager.getPreferPublic(); catalogManager.debug.message(4, "Parse catalog: " + aUrl.toString()); DataInputStream inStream = null; boolean parsed = false; for (int count = 0; !parsed && count < readerArr.size(); count++) { CatalogReader reader = (CatalogReader) readerArr.get(count); try { inStream = new DataInputStream(aUrl.openStream()); } catch (FileNotFoundException fnfe) { // No catalog; give up! break; } try { reader.readCatalog(this, inStream); parsed=true; } catch (CatalogException ce) { if (ce.getExceptionType() == CatalogException.PARSE_FAILED) { // give up! break; } else { // try again! } } try { inStream.close(); } catch (IOException e) { //nop } } if (parsed) parsePendingCatalogs(); } /** * Parse all of the pending catalogs. * *

Catalogs may refer to other catalogs, this method parses * all of the currently pending catalog files.

*/ protected synchronized void parsePendingCatalogs() throws MalformedURLException, IOException { if (!localCatalogFiles.isEmpty()) { // Move all the localCatalogFiles into the front of // the catalogFiles queue Vector newQueue = new Vector(); Enumeration q = localCatalogFiles.elements(); while (q.hasMoreElements()) { newQueue.addElement(q.nextElement()); } // Put the rest of the catalogs on the end of the new list for (int curCat = 0; curCat < catalogFiles.size(); curCat++) { String catfile = (String) catalogFiles.elementAt(curCat); newQueue.addElement(catfile); } catalogFiles = newQueue; localCatalogFiles.clear(); } // Suppose there are no catalog files to process, but the // single catalog already parsed included some delegate // entries? Make sure they don't get lost. if (catalogFiles.isEmpty() && !localDelegate.isEmpty()) { Enumeration e = localDelegate.elements(); while (e.hasMoreElements()) { catalogEntries.addElement(e.nextElement()); } localDelegate.clear(); } // Now process all the files on the catalogFiles vector. This // vector can grow during processing if CATALOG entries are // encountered in the catalog while (!catalogFiles.isEmpty()) { String catfile = (String) catalogFiles.elementAt(0); try { catalogFiles.remove(0); } catch (ArrayIndexOutOfBoundsException e) { // can't happen } if (catalogEntries.size() == 0 && catalogs.size() == 0) { // We haven't parsed any catalogs yet, let this // catalog be the first... try { parseCatalogFile(catfile); } catch (CatalogException ce) { System.out.println("FIXME: " + ce.toString()); } } else { // This is a subordinate catalog. We save its name, // but don't bother to load it unless it's necessary. catalogs.addElement(catfile); } if (!localCatalogFiles.isEmpty()) { // Move all the localCatalogFiles into the front of // the catalogFiles queue Vector newQueue = new Vector(); Enumeration q = localCatalogFiles.elements(); while (q.hasMoreElements()) { newQueue.addElement(q.nextElement()); } // Put the rest of the catalogs on the end of the new list for (int curCat = 0; curCat < catalogFiles.size(); curCat++) { catfile = (String) catalogFiles.elementAt(curCat); newQueue.addElement(catfile); } catalogFiles = newQueue; localCatalogFiles.clear(); } if (!localDelegate.isEmpty()) { Enumeration e = localDelegate.elements(); while (e.hasMoreElements()) { catalogEntries.addElement(e.nextElement()); } localDelegate.clear(); } } // We've parsed them all, reinit the vector... catalogFiles.clear(); } /** * Parse a single catalog file, augmenting internal data structures. * * @param fileName The filename of the catalog file to process * * @throws MalformedURLException The fileName cannot be turned into * a valid URL. * @throws IOException Error reading catalog file. */ protected synchronized void parseCatalogFile(String fileName) throws MalformedURLException, IOException, CatalogException { CatalogEntry entry; // The base-base is the cwd. If the catalog file is specified // with a relative path, this assures that it gets resolved // properly... try { // tack on a basename because URLs point to files not dirs catalogCwd = FileURL.makeURL("basename"); } catch (MalformedURLException e) { String userdir = System.getProperty("user.dir"); userdir = userdir.replace('\\', '/'); catalogManager.debug.message(1, "Malformed URL on cwd", userdir); catalogCwd = null; } // The initial base URI is the location of the catalog file try { base = new URL(catalogCwd, fixSlashes(fileName)); } catch (MalformedURLException e) { try { base = new URL("file:" + fixSlashes(fileName)); } catch (MalformedURLException e2) { catalogManager.debug.message(1, "Malformed URL on catalog filename", fixSlashes(fileName)); base = null; } } catalogManager.debug.message(2, "Loading catalog", fileName); catalogManager.debug.message(4, "Default BASE", base.toString()); fileName = base.toString(); DataInputStream inStream = null; boolean parsed = false; boolean notFound = false; for (int count = 0; !parsed && count < readerArr.size(); count++) { CatalogReader reader = (CatalogReader) readerArr.get(count); try { notFound = false; inStream = new DataInputStream(base.openStream()); } catch (FileNotFoundException fnfe) { // No catalog; give up! notFound = true; break; } try { reader.readCatalog(this, inStream); parsed = true; } catch (CatalogException ce) { if (ce.getExceptionType() == CatalogException.PARSE_FAILED) { // give up! break; } else { // try again! } } try { inStream.close(); } catch (IOException e) { //nop } } if (!parsed) { if (notFound) { catalogManager.debug.message(3, "Catalog does not exist", fileName); } else { catalogManager.debug.message(1, "Failed to parse catalog", fileName); } } } /** * Cleanup and process a Catalog entry. * *

This method processes each Catalog entry, changing mapped * relative system identifiers into absolute ones (based on the current * base URI), and maintaining other information about the current * catalog.

* * @param entry The CatalogEntry to process. */ public void addEntry(CatalogEntry entry) { int type = entry.getEntryType(); if (type == BASE) { String value = entry.getEntryArg(0); URL newbase = null; if (base == null) { catalogManager.debug.message(5, "BASE CUR", "null"); } else { catalogManager.debug.message(5, "BASE CUR", base.toString()); } catalogManager.debug.message(4, "BASE STR", value); try { value = fixSlashes(value); newbase = new URL(base, value); } catch (MalformedURLException e) { try { newbase = new URL("file:" + value); } catch (MalformedURLException e2) { catalogManager.debug.message(1, "Malformed URL on base", value); newbase = null; } } if (newbase != null) { base = newbase; } catalogManager.debug.message(5, "BASE NEW", base.toString()); } else if (type == CATALOG) { String fsi = makeAbsolute(entry.getEntryArg(0)); catalogManager.debug.message(4, "CATALOG", fsi); localCatalogFiles.addElement(fsi); } else if (type == PUBLIC) { String publicid = PublicId.normalize(entry.getEntryArg(0)); String systemid = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(0, publicid); entry.setEntryArg(1, systemid); catalogManager.debug.message(4, "PUBLIC", publicid, systemid); catalogEntries.addElement(entry); } else if (type == SYSTEM) { String systemid = normalizeURI(entry.getEntryArg(0)); String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(1, fsi); catalogManager.debug.message(4, "SYSTEM", systemid, fsi); catalogEntries.addElement(entry); } else if (type == URI) { String uri = normalizeURI(entry.getEntryArg(0)); String altURI = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(1, altURI); catalogManager.debug.message(4, "URI", uri, altURI); catalogEntries.addElement(entry); } else if (type == DOCUMENT) { String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(0))); entry.setEntryArg(0, fsi); catalogManager.debug.message(4, "DOCUMENT", fsi); catalogEntries.addElement(entry); } else if (type == OVERRIDE) { catalogManager.debug.message(4, "OVERRIDE", entry.getEntryArg(0)); catalogEntries.addElement(entry); } else if (type == SGMLDECL) { // meaningless in XML String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(0))); entry.setEntryArg(0, fsi); catalogManager.debug.message(4, "SGMLDECL", fsi); catalogEntries.addElement(entry); } else if (type == DELEGATE_PUBLIC) { String ppi = PublicId.normalize(entry.getEntryArg(0)); String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(0, ppi); entry.setEntryArg(1, fsi); catalogManager.debug.message(4, "DELEGATE_PUBLIC", ppi, fsi); addDelegate(entry); } else if (type == DELEGATE_SYSTEM) { String psi = normalizeURI(entry.getEntryArg(0)); String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(0, psi); entry.setEntryArg(1, fsi); catalogManager.debug.message(4, "DELEGATE_SYSTEM", psi, fsi); addDelegate(entry); } else if (type == DELEGATE_URI) { String pui = normalizeURI(entry.getEntryArg(0)); String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(0, pui); entry.setEntryArg(1, fsi); catalogManager.debug.message(4, "DELEGATE_URI", pui, fsi); addDelegate(entry); } else if (type == REWRITE_SYSTEM) { String psi = normalizeURI(entry.getEntryArg(0)); String rpx = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(0, psi); entry.setEntryArg(1, rpx); catalogManager.debug.message(4, "REWRITE_SYSTEM", psi, rpx); catalogEntries.addElement(entry); } else if (type == REWRITE_URI) { String pui = normalizeURI(entry.getEntryArg(0)); String upx = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(0, pui); entry.setEntryArg(1, upx); catalogManager.debug.message(4, "REWRITE_URI", pui, upx); catalogEntries.addElement(entry); } else if (type == SYSTEM_SUFFIX) { String pui = normalizeURI(entry.getEntryArg(0)); String upx = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(0, pui); entry.setEntryArg(1, upx); catalogManager.debug.message(4, "SYSTEM_SUFFIX", pui, upx); catalogEntries.addElement(entry); } else if (type == URI_SUFFIX) { String pui = normalizeURI(entry.getEntryArg(0)); String upx = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(0, pui); entry.setEntryArg(1, upx); catalogManager.debug.message(4, "URI_SUFFIX", pui, upx); catalogEntries.addElement(entry); } else if (type == DOCTYPE) { String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(1, fsi); catalogManager.debug.message(4, "DOCTYPE", entry.getEntryArg(0), fsi); catalogEntries.addElement(entry); } else if (type == DTDDECL) { // meaningless in XML String fpi = PublicId.normalize(entry.getEntryArg(0)); entry.setEntryArg(0, fpi); String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(1, fsi); catalogManager.debug.message(4, "DTDDECL", fpi, fsi); catalogEntries.addElement(entry); } else if (type == ENTITY) { String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(1, fsi); catalogManager.debug.message(4, "ENTITY", entry.getEntryArg(0), fsi); catalogEntries.addElement(entry); } else if (type == LINKTYPE) { // meaningless in XML String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(1, fsi); catalogManager.debug.message(4, "LINKTYPE", entry.getEntryArg(0), fsi); catalogEntries.addElement(entry); } else if (type == NOTATION) { String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(1, fsi); catalogManager.debug.message(4, "NOTATION", entry.getEntryArg(0), fsi); catalogEntries.addElement(entry); } else { catalogEntries.addElement(entry); } } /** * Handle unknown CatalogEntry types. * *

This method exists to allow subclasses to deal with unknown * entry types.

*/ public void unknownEntry(Vector strings) { if (strings != null && strings.size() > 0) { String keyword = (String) strings.elementAt(0); catalogManager.debug.message(2, "Unrecognized token parsing catalog", keyword); } } /** * Parse all subordinate catalogs. * *

This method recursively parses all of the subordinate catalogs. * If this method does not throw an exception, you can be confident that * no subsequent call to any resolve*() method will either, with two * possible exceptions:

* *
    *
  1. Delegated catalogs are re-parsed each time they are needed * (because a variable list of them may be needed in each case, * depending on the length of the matching partial public identifier).

    *

    But they are parsed by this method, so as long as they don't * change or disappear while the program is running, they shouldn't * generate errors later if they don't generate errors now.

    *
  2. If you add new catalogs with parseCatalog, they * won't be loaded until they are needed or until you call * parseAllCatalogs again.

    *
* *

On the other hand, if you don't call this method, you may * successfully parse documents without having to load all possible * catalogs.

* * @throws MalformedURLException The filename (URL) for a * subordinate or delegated catalog is not a valid URL. * @throws IOException Error reading some subordinate or delegated * catalog file. */ public void parseAllCatalogs() throws MalformedURLException, IOException { // Parse all the subordinate catalogs for (int catPos = 0; catPos < catalogs.size(); catPos++) { Catalog c = null; try { c = (Catalog) catalogs.elementAt(catPos); } catch (ClassCastException e) { String catfile = (String) catalogs.elementAt(catPos); c = newCatalog(); c.parseCatalog(catfile); catalogs.setElementAt(c, catPos); c.parseAllCatalogs(); } } // Parse all the DELEGATE catalogs Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == DELEGATE_PUBLIC || e.getEntryType() == DELEGATE_SYSTEM || e.getEntryType() == DELEGATE_URI) { Catalog dcat = newCatalog(); dcat.parseCatalog(e.getEntryArg(1)); } } } /** * Return the applicable DOCTYPE system identifier. * * @param entityName The name of the entity (element) for which * a doctype is required. * @param publicId The nominal public identifier for the doctype * (as provided in the source document). * @param systemId The nominal system identifier for the doctype * (as provided in the source document). * * @return The system identifier to use for the doctype. * * @throws MalformedURLException The formal system identifier of a * subordinate catalog cannot be turned into a valid URL. * @throws IOException Error reading subordinate catalog file. */ public String resolveDoctype(String entityName, String publicId, String systemId) throws MalformedURLException, IOException { String resolved = null; catalogManager.debug.message(3, "resolveDoctype(" +entityName+","+publicId+","+systemId+")"); systemId = normalizeURI(systemId); if (publicId != null && publicId.startsWith("urn:publicid:")) { publicId = PublicId.decodeURN(publicId); } if (systemId != null && systemId.startsWith("urn:publicid:")) { systemId = PublicId.decodeURN(systemId); if (publicId != null && !publicId.equals(systemId)) { catalogManager.debug.message(1, "urn:publicid: system identifier differs from public identifier; using public identifier"); systemId = null; } else { publicId = systemId; systemId = null; } } if (systemId != null) { // If there's a SYSTEM entry in this catalog, use it resolved = resolveLocalSystem(systemId); if (resolved != null) { return resolved; } } if (publicId != null) { // If there's a PUBLIC entry in this catalog, use it resolved = resolveLocalPublic(DOCTYPE, entityName, publicId, systemId); if (resolved != null) { return resolved; } } // If there's a DOCTYPE entry in this catalog, use it boolean over = default_override; Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == OVERRIDE) { over = e.getEntryArg(0).equalsIgnoreCase("YES"); continue; } if (e.getEntryType() == DOCTYPE && e.getEntryArg(0).equals(entityName)) { if (over || systemId == null) { return e.getEntryArg(1); } } } // Otherwise, look in the subordinate catalogs return resolveSubordinateCatalogs(DOCTYPE, entityName, publicId, systemId); } /** * Return the applicable DOCUMENT entry. * * @return The system identifier to use for the doctype. * * @throws MalformedURLException The formal system identifier of a * subordinate catalog cannot be turned into a valid URL. * @throws IOException Error reading subordinate catalog file. */ public String resolveDocument() throws MalformedURLException, IOException { // If there's a DOCUMENT entry, return it catalogManager.debug.message(3, "resolveDocument"); Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == DOCUMENT) { return e.getEntryArg(0); } } return resolveSubordinateCatalogs(DOCUMENT, null, null, null); } /** * Return the applicable ENTITY system identifier. * * @param entityName The name of the entity for which * a system identifier is required. * @param publicId The nominal public identifier for the entity * (as provided in the source document). * @param systemId The nominal system identifier for the entity * (as provided in the source document). * * @return The system identifier to use for the entity. * * @throws MalformedURLException The formal system identifier of a * subordinate catalog cannot be turned into a valid URL. * @throws IOException Error reading subordinate catalog file. */ public String resolveEntity(String entityName, String publicId, String systemId) throws MalformedURLException, IOException { String resolved = null; catalogManager.debug.message(3, "resolveEntity(" +entityName+","+publicId+","+systemId+")"); systemId = normalizeURI(systemId); if (publicId != null && publicId.startsWith("urn:publicid:")) { publicId = PublicId.decodeURN(publicId); } if (systemId != null && systemId.startsWith("urn:publicid:")) { systemId = PublicId.decodeURN(systemId); if (publicId != null && !publicId.equals(systemId)) { catalogManager.debug.message(1, "urn:publicid: system identifier differs from public identifier; using public identifier"); systemId = null; } else { publicId = systemId; systemId = null; } } if (systemId != null) { // If there's a SYSTEM entry in this catalog, use it resolved = resolveLocalSystem(systemId); if (resolved != null) { return resolved; } } if (publicId != null) { // If there's a PUBLIC entry in this catalog, use it resolved = resolveLocalPublic(ENTITY, entityName, publicId, systemId); if (resolved != null) { return resolved; } } // If there's a ENTITY entry in this catalog, use it boolean over = default_override; Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == OVERRIDE) { over = e.getEntryArg(0).equalsIgnoreCase("YES"); continue; } if (e.getEntryType() == ENTITY && e.getEntryArg(0).equals(entityName)) { if (over || systemId == null) { return e.getEntryArg(1); } } } // Otherwise, look in the subordinate catalogs return resolveSubordinateCatalogs(ENTITY, entityName, publicId, systemId); } /** * Return the applicable NOTATION system identifier. * * @param notationName The name of the notation for which * a doctype is required. * @param publicId The nominal public identifier for the notation * (as provided in the source document). * @param systemId The nominal system identifier for the notation * (as provided in the source document). * * @return The system identifier to use for the notation. * * @throws MalformedURLException The formal system identifier of a * subordinate catalog cannot be turned into a valid URL. * @throws IOException Error reading subordinate catalog file. */ public String resolveNotation(String notationName, String publicId, String systemId) throws MalformedURLException, IOException { String resolved = null; catalogManager.debug.message(3, "resolveNotation(" +notationName+","+publicId+","+systemId+")"); systemId = normalizeURI(systemId); if (publicId != null && publicId.startsWith("urn:publicid:")) { publicId = PublicId.decodeURN(publicId); } if (systemId != null && systemId.startsWith("urn:publicid:")) { systemId = PublicId.decodeURN(systemId); if (publicId != null && !publicId.equals(systemId)) { catalogManager.debug.message(1, "urn:publicid: system identifier differs from public identifier; using public identifier"); systemId = null; } else { publicId = systemId; systemId = null; } } if (systemId != null) { // If there's a SYSTEM entry in this catalog, use it resolved = resolveLocalSystem(systemId); if (resolved != null) { return resolved; } } if (publicId != null) { // If there's a PUBLIC entry in this catalog, use it resolved = resolveLocalPublic(NOTATION, notationName, publicId, systemId); if (resolved != null) { return resolved; } } // If there's a NOTATION entry in this catalog, use it boolean over = default_override; Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == OVERRIDE) { over = e.getEntryArg(0).equalsIgnoreCase("YES"); continue; } if (e.getEntryType() == NOTATION && e.getEntryArg(0).equals(notationName)) { if (over || systemId == null) { return e.getEntryArg(1); } } } // Otherwise, look in the subordinate catalogs return resolveSubordinateCatalogs(NOTATION, notationName, publicId, systemId); } /** * Return the applicable PUBLIC or SYSTEM identifier. * *

This method searches the Catalog and returns the system * identifier specified for the given system or * public identifiers. If * no appropriate PUBLIC or SYSTEM entry is found in the Catalog, * null is returned.

* * @param publicId The public identifier to locate in the catalog. * Public identifiers are normalized before comparison. * @param systemId The nominal system identifier for the entity * in question (as provided in the source document). * * @throws MalformedURLException The formal system identifier of a * subordinate catalog cannot be turned into a valid URL. * @throws IOException Error reading subordinate catalog file. * * @return The system identifier to use. * Note that the nominal system identifier is not returned if a * match is not found in the catalog, instead null is returned * to indicate that no match was found. */ public String resolvePublic(String publicId, String systemId) throws MalformedURLException, IOException { catalogManager.debug.message(3, "resolvePublic("+publicId+","+systemId+")"); systemId = normalizeURI(systemId); if (publicId != null && publicId.startsWith("urn:publicid:")) { publicId = PublicId.decodeURN(publicId); } if (systemId != null && systemId.startsWith("urn:publicid:")) { systemId = PublicId.decodeURN(systemId); if (publicId != null && !publicId.equals(systemId)) { catalogManager.debug.message(1, "urn:publicid: system identifier differs from public identifier; using public identifier"); systemId = null; } else { publicId = systemId; systemId = null; } } // If there's a SYSTEM entry in this catalog, use it if (systemId != null) { String resolved = resolveLocalSystem(systemId); if (resolved != null) { return resolved; } } // If there's a PUBLIC entry in this catalog, use it String resolved = resolveLocalPublic(PUBLIC, null, publicId, systemId); if (resolved != null) { return resolved; } // Otherwise, look in the subordinate catalogs return resolveSubordinateCatalogs(PUBLIC, null, publicId, systemId); } /** * Return the applicable PUBLIC or SYSTEM identifier. * *

This method searches the Catalog and returns the system * identifier specified for the given system or public identifiers. * If no appropriate PUBLIC or SYSTEM entry is found in the Catalog, * delegated Catalogs are interrogated.

* *

There are four possible cases:

* *
    *
  • If the system identifier provided matches a SYSTEM entry * in the current catalog, the SYSTEM entry is returned. *
  • If the system identifier is not null, the PUBLIC entries * that were encountered when OVERRIDE YES was in effect are * interrogated and the first matching entry is returned.
  • *
  • If the system identifier is null, then all of the PUBLIC * entries are interrogated and the first matching entry * is returned. This may not be the same as the preceding case, if * some PUBLIC entries are encountered when OVERRIDE NO is in effect. In * XML, the only place where a public identifier may occur without * a system identifier is in a notation declaration.
  • *
  • Finally, if the public identifier matches one of the partial * public identifiers specified in a DELEGATE* entry in * the Catalog, the delegated catalog is interrogated. The first * time that the delegated catalog is required, it will be * retrieved and parsed. It is subsequently cached. *
  • *
* * @param entityType The CatalogEntry type for which this query is * being conducted. This is necessary in order to do the approprate * query on a delegated catalog. * @param entityName The name of the entity being searched for, if * appropriate. * @param publicId The public identifier of the entity in question. * @param systemId The nominal system identifier for the entity * in question (as provided in the source document). * * @throws MalformedURLException The formal system identifier of a * delegated catalog cannot be turned into a valid URL. * @throws IOException Error reading delegated catalog file. * * @return The system identifier to use. * Note that the nominal system identifier is not returned if a * match is not found in the catalog, instead null is returned * to indicate that no match was found. */ protected synchronized String resolveLocalPublic(int entityType, String entityName, String publicId, String systemId) throws MalformedURLException, IOException { // Always normalize the public identifier before attempting a match publicId = PublicId.normalize(publicId); // If there's a SYSTEM entry in this catalog, use it if (systemId != null) { String resolved = resolveLocalSystem(systemId); if (resolved != null) { return resolved; } } // If there's a PUBLIC entry in this catalog, use it boolean over = default_override; Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == OVERRIDE) { over = e.getEntryArg(0).equalsIgnoreCase("YES"); continue; } if (e.getEntryType() == PUBLIC && e.getEntryArg(0).equals(publicId)) { if (over || systemId == null) { return e.getEntryArg(1); } } } // If there's a DELEGATE_PUBLIC entry in this catalog, use it over = default_override; en = catalogEntries.elements(); Vector delCats = new Vector(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == OVERRIDE) { over = e.getEntryArg(0).equalsIgnoreCase("YES"); continue; } if (e.getEntryType() == DELEGATE_PUBLIC && (over || systemId == null)) { String p = (String) e.getEntryArg(0); if (p.length() <= publicId.length() && p.equals(publicId.substring(0, p.length()))) { // delegate this match to the other catalog delCats.addElement(e.getEntryArg(1)); } } } if (delCats.size() > 0) { Enumeration enCats = delCats.elements(); if (catalogManager.debug.getDebug() > 1) { catalogManager.debug.message(2, "Switching to delegated catalog(s):"); while (enCats.hasMoreElements()) { String delegatedCatalog = (String) enCats.nextElement(); catalogManager.debug.message(2, "\t" + delegatedCatalog); } } Catalog dcat = newCatalog(); enCats = delCats.elements(); while (enCats.hasMoreElements()) { String delegatedCatalog = (String) enCats.nextElement(); dcat.parseCatalog(delegatedCatalog); } return dcat.resolvePublic(publicId, null); } // Nada! return null; } /** * Return the applicable SYSTEM system identifier. * *

If a SYSTEM entry exists in the Catalog * for the system ID specified, return the mapped value.

* *

On Windows-based operating systems, the comparison between * the system identifier provided and the SYSTEM entries in the * Catalog is case-insensitive.

* * @param systemId The system ID to locate in the catalog. * * @return The resolved system identifier. * * @throws MalformedURLException The formal system identifier of a * subordinate catalog cannot be turned into a valid URL. * @throws IOException Error reading subordinate catalog file. */ public String resolveSystem(String systemId) throws MalformedURLException, IOException { catalogManager.debug.message(3, "resolveSystem("+systemId+")"); systemId = normalizeURI(systemId); if (systemId != null && systemId.startsWith("urn:publicid:")) { systemId = PublicId.decodeURN(systemId); return resolvePublic(systemId, null); } // If there's a SYSTEM entry in this catalog, use it if (systemId != null) { String resolved = resolveLocalSystem(systemId); if (resolved != null) { return resolved; } } // Otherwise, look in the subordinate catalogs return resolveSubordinateCatalogs(SYSTEM, null, null, systemId); } /** * Return the applicable SYSTEM system identifier in this * catalog. * *

If a SYSTEM entry exists in the catalog file * for the system ID specified, return the mapped value.

* * @param systemId The system ID to locate in the catalog * * @return The mapped system identifier or null */ protected String resolveLocalSystem(String systemId) throws MalformedURLException, IOException { String osname = System.getProperty("os.name"); boolean windows = (osname.indexOf("Windows") >= 0); Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == SYSTEM && (e.getEntryArg(0).equals(systemId) || (windows && e.getEntryArg(0).equalsIgnoreCase(systemId)))) { return e.getEntryArg(1); } } // If there's a REWRITE_SYSTEM entry in this catalog, use it en = catalogEntries.elements(); String startString = null; String prefix = null; while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == REWRITE_SYSTEM) { String p = (String) e.getEntryArg(0); if (p.length() <= systemId.length() && p.equals(systemId.substring(0, p.length()))) { // Is this the longest prefix? if (startString == null || p.length() > startString.length()) { startString = p; prefix = e.getEntryArg(1); } } } } if (prefix != null) { // return the systemId with the new prefix return prefix + systemId.substring(startString.length()); } // If there's a SYSTEM_SUFFIX entry in this catalog, use it en = catalogEntries.elements(); String suffixString = null; String suffixURI = null; while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == SYSTEM_SUFFIX) { String p = (String) e.getEntryArg(0); if (p.length() <= systemId.length() && systemId.endsWith(p)) { // Is this the longest prefix? if (suffixString == null || p.length() > suffixString.length()) { suffixString = p; suffixURI = e.getEntryArg(1); } } } } if (suffixURI != null) { // return the systemId for the suffix return suffixURI; } // If there's a DELEGATE_SYSTEM entry in this catalog, use it en = catalogEntries.elements(); Vector delCats = new Vector(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == DELEGATE_SYSTEM) { String p = (String) e.getEntryArg(0); if (p.length() <= systemId.length() && p.equals(systemId.substring(0, p.length()))) { // delegate this match to the other catalog delCats.addElement(e.getEntryArg(1)); } } } if (delCats.size() > 0) { Enumeration enCats = delCats.elements(); if (catalogManager.debug.getDebug() > 1) { catalogManager.debug.message(2, "Switching to delegated catalog(s):"); while (enCats.hasMoreElements()) { String delegatedCatalog = (String) enCats.nextElement(); catalogManager.debug.message(2, "\t" + delegatedCatalog); } } Catalog dcat = newCatalog(); enCats = delCats.elements(); while (enCats.hasMoreElements()) { String delegatedCatalog = (String) enCats.nextElement(); dcat.parseCatalog(delegatedCatalog); } return dcat.resolveSystem(systemId); } return null; } /** * Return the applicable URI. * *

If a URI entry exists in the Catalog * for the URI specified, return the mapped value.

* *

URI comparison is case sensitive.

* * @param uri The URI to locate in the catalog. * * @return The resolved URI. * * @throws MalformedURLException The system identifier of a * subordinate catalog cannot be turned into a valid URL. * @throws IOException Error reading subordinate catalog file. */ public String resolveURI(String uri) throws MalformedURLException, IOException { catalogManager.debug.message(3, "resolveURI("+uri+")"); uri = normalizeURI(uri); if (uri != null && uri.startsWith("urn:publicid:")) { uri = PublicId.decodeURN(uri); return resolvePublic(uri, null); } // If there's a URI entry in this catalog, use it if (uri != null) { String resolved = resolveLocalURI(uri); if (resolved != null) { return resolved; } } // Otherwise, look in the subordinate catalogs return resolveSubordinateCatalogs(URI, null, null, uri); } /** * Return the applicable URI in this catalog. * *

If a URI entry exists in the catalog file * for the URI specified, return the mapped value.

* * @param uri The URI to locate in the catalog * * @return The mapped URI or null */ protected String resolveLocalURI(String uri) throws MalformedURLException, IOException { Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == URI && (e.getEntryArg(0).equals(uri))) { return e.getEntryArg(1); } } // If there's a REWRITE_URI entry in this catalog, use it en = catalogEntries.elements(); String startString = null; String prefix = null; while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == REWRITE_URI) { String p = (String) e.getEntryArg(0); if (p.length() <= uri.length() && p.equals(uri.substring(0, p.length()))) { // Is this the longest prefix? if (startString == null || p.length() > startString.length()) { startString = p; prefix = e.getEntryArg(1); } } } } if (prefix != null) { // return the uri with the new prefix return prefix + uri.substring(startString.length()); } // If there's a URI_SUFFIX entry in this catalog, use it en = catalogEntries.elements(); String suffixString = null; String suffixURI = null; while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == URI_SUFFIX) { String p = (String) e.getEntryArg(0); if (p.length() <= uri.length() && uri.endsWith(p)) { // Is this the longest prefix? if (suffixString == null || p.length() > suffixString.length()) { suffixString = p; suffixURI = e.getEntryArg(1); } } } } if (suffixURI != null) { // return the uri for the suffix return suffixURI; } // If there's a DELEGATE_URI entry in this catalog, use it en = catalogEntries.elements(); Vector delCats = new Vector(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == DELEGATE_URI) { String p = (String) e.getEntryArg(0); if (p.length() <= uri.length() && p.equals(uri.substring(0, p.length()))) { // delegate this match to the other catalog delCats.addElement(e.getEntryArg(1)); } } } if (delCats.size() > 0) { Enumeration enCats = delCats.elements(); if (catalogManager.debug.getDebug() > 1) { catalogManager.debug.message(2, "Switching to delegated catalog(s):"); while (enCats.hasMoreElements()) { String delegatedCatalog = (String) enCats.nextElement(); catalogManager.debug.message(2, "\t" + delegatedCatalog); } } Catalog dcat = newCatalog(); enCats = delCats.elements(); while (enCats.hasMoreElements()) { String delegatedCatalog = (String) enCats.nextElement(); dcat.parseCatalog(delegatedCatalog); } return dcat.resolveURI(uri); } return null; } /** * Search the subordinate catalogs, in order, looking for a match. * *

This method searches the Catalog and returns the system * identifier specified for the given entity type with the given * name, public, and system identifiers. In some contexts, these * may be null.

* * @param entityType The CatalogEntry type for which this query is * being conducted. This is necessary in order to do the approprate * query on a subordinate catalog. * @param entityName The name of the entity being searched for, if * appropriate. * @param publicId The public identifier of the entity in question * (as provided in the source document). * @param systemId The nominal system identifier for the entity * in question (as provided in the source document). This parameter is * overloaded for the URI entry type. * * @throws MalformedURLException The formal system identifier of a * delegated catalog cannot be turned into a valid URL. * @throws IOException Error reading delegated catalog file. * * @return The system identifier to use. * Note that the nominal system identifier is not returned if a * match is not found in the catalog, instead null is returned * to indicate that no match was found. */ protected synchronized String resolveSubordinateCatalogs(int entityType, String entityName, String publicId, String systemId) throws MalformedURLException, IOException { for (int catPos = 0; catPos < catalogs.size(); catPos++) { Catalog c = null; try { c = (Catalog) catalogs.elementAt(catPos); } catch (ClassCastException e) { String catfile = (String) catalogs.elementAt(catPos); c = newCatalog(); try { c.parseCatalog(catfile); } catch (MalformedURLException mue) { catalogManager.debug.message(1, "Malformed Catalog URL", catfile); } catch (FileNotFoundException fnfe) { catalogManager.debug.message(1, "Failed to load catalog, file not found", catfile); } catch (IOException ioe) { catalogManager.debug.message(1, "Failed to load catalog, I/O error", catfile); } catalogs.setElementAt(c, catPos); } String resolved = null; // Ok, now what are we supposed to call here? if (entityType == DOCTYPE) { resolved = c.resolveDoctype(entityName, publicId, systemId); } else if (entityType == DOCUMENT) { resolved = c.resolveDocument(); } else if (entityType == ENTITY) { resolved = c.resolveEntity(entityName, publicId, systemId); } else if (entityType == NOTATION) { resolved = c.resolveNotation(entityName, publicId, systemId); } else if (entityType == PUBLIC) { resolved = c.resolvePublic(publicId, systemId); } else if (entityType == SYSTEM) { resolved = c.resolveSystem(systemId); } else if (entityType == URI) { resolved = c.resolveURI(systemId); } if (resolved != null) { return resolved; } } return null; } // ----------------------------------------------------------------- /** * Replace backslashes with forward slashes. (URLs always use * forward slashes.) * * @param sysid The input system identifier. * @return The same system identifier with backslashes turned into * forward slashes. */ protected String fixSlashes (String sysid) { return sysid.replace('\\', '/'); } /** * Construct an absolute URI from a relative one, using the current * base URI. * * @param sysid The (possibly relative) system identifier * @return The system identifier made absolute with respect to the * current {@link #base}. */ protected String makeAbsolute(String sysid) { URL local = null; sysid = fixSlashes(sysid); try { local = new URL(base, sysid); } catch (MalformedURLException e) { catalogManager.debug.message(1, "Malformed URL on system identifier", sysid); } if (local != null) { return local.toString(); } else { return sysid; } } /** * Perform character normalization on a URI reference. * * @param uriref The URI reference * @return The normalized URI reference. */ protected String normalizeURI(String uriref) { String newRef = ""; byte[] bytes; if (uriref == null) { return null; } try { bytes = uriref.getBytes("UTF-8"); } catch (UnsupportedEncodingException uee) { // this can't happen catalogManager.debug.message(1, "UTF-8 is an unsupported encoding!?"); return uriref; } for (int count = 0; count < bytes.length; count++) { int ch = bytes[count] & 0xFF; if ((ch <= 0x20) // ctrl || (ch > 0x7F) // high ascii || (ch == 0x22) // " || (ch == 0x3C) // < || (ch == 0x3E) // > || (ch == 0x5C) // \ || (ch == 0x5E) // ^ || (ch == 0x60) // ` || (ch == 0x7B) // { || (ch == 0x7C) // | || (ch == 0x7D) // } || (ch == 0x7F)) { newRef += encodedByte(ch); } else { newRef += (char) bytes[count]; } } return newRef; } /** * Perform %-encoding on a single byte. * * @param b The 8-bit integer that represents th byte. (Bytes are signed but encoding needs to look at the bytes unsigned.) * @return The %-encoded string for the byte in question. */ protected String encodedByte (int b) { String hex = Integer.toHexString(b).toUpperCase(); if (hex.length() < 2) { return "%0" + hex; } else { return "%" + hex; } } // ----------------------------------------------------------------- /** * Add to the current list of delegated catalogs. * *

This method always constructs the {@link #localDelegate} * vector so that it is ordered by length of partial * public identifier.

* * @param entry The DELEGATE catalog entry */ protected void addDelegate(CatalogEntry entry) { int pos = 0; String partial = entry.getEntryArg(0); Enumeration local = localDelegate.elements(); while (local.hasMoreElements()) { CatalogEntry dpe = (CatalogEntry) local.nextElement(); String dp = dpe.getEntryArg(0); if (dp.equals(partial)) { // we already have this prefix return; } if (dp.length() > partial.length()) { pos++; } if (dp.length() < partial.length()) { break; } } // now insert partial into the vector at [pos] if (localDelegate.size() == 0) { localDelegate.addElement(entry); } else { localDelegate.insertElementAt(entry, pos); } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/CatalogEntry.java100644 0 0 17553 10530407252 23343 0ustar 0 0 // CatalogEntry.java - Represents Catalog entries /* * 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.xml.resolver; import java.util.Hashtable; import java.util.Vector; /** * Represents a Catalog entry. * *

Instances of this class represent individual entries * in a Catalog.

* *

Each catalog entry has a unique name and is associated with * an arbitrary number of arguments (all strings). For example, the * TR9401 catalog entry "PUBLIC" has two arguments, a public identifier * and a system identifier. Each entry has a unique numeric type, * assigned automatically when the entry type is created.

* *

The number and type of catalog entries is maintained * statically. Catalog classes, or their subclasses, can add * new entry types, but all Catalog objects share the same global pool * of types.

* *

Initially there are no valid entries.

* * @see Catalog * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class CatalogEntry { /** The nextEntry is the ordinal number of the next entry type. */ protected static int nextEntry = 0; /** * The entryTypes vector maps catalog entry names * (e.g., 'BASE' or 'SYSTEM') to their type (1, 2, etc.). * Names are case sensitive. */ protected static Hashtable entryTypes = new Hashtable(); /** The entryTypes vector maps catalog entry types to the number of arguments they're required to have. */ protected static Vector entryArgs = new Vector(); /** * Adds a new catalog entry type. * * @param name The name of the catalog entry type. This must be * unique among all types and is case-sensitive. (Adding a duplicate * name effectively replaces the old type with the new type.) * @param numArgs The number of arguments that this entry type * is required to have. There is no provision for variable numbers * of arguments. * @return The type for the new entry. */ public static int addEntryType(String name, int numArgs) { entryTypes.put(name, new Integer(nextEntry)); entryArgs.add(nextEntry, new Integer(numArgs)); nextEntry++; return nextEntry-1; } /** * Lookup an entry type * * @param name The name of the catalog entry type. * @return The type of the catalog entry with the specified name. * @throws InvalidCatalogEntryTypeException if no entry has the * specified name. */ public static int getEntryType(String name) throws CatalogException { if (!entryTypes.containsKey(name)) { throw new CatalogException(CatalogException.INVALID_ENTRY_TYPE); } Integer iType = (Integer) entryTypes.get(name); if (iType == null) { throw new CatalogException(CatalogException.INVALID_ENTRY_TYPE); } return iType.intValue(); } /** * Find out how many arguments an entry is required to have. * * @param name The name of the catalog entry type. * @return The number of arguments that entry type is required to have. * @throws InvalidCatalogEntryTypeException if no entry has the * specified name. */ public static int getEntryArgCount(String name) throws CatalogException { return getEntryArgCount(getEntryType(name)); } /** * Find out how many arguments an entry is required to have. * * @param type A valid catalog entry type. * @return The number of arguments that entry type is required to have. * @throws InvalidCatalogEntryTypeException if the type is invalid. */ public static int getEntryArgCount(int type) throws CatalogException { try { Integer iArgs = (Integer) entryArgs.get(type); return iArgs.intValue(); } catch (ArrayIndexOutOfBoundsException e) { throw new CatalogException(CatalogException.INVALID_ENTRY_TYPE); } } /** The entry type of this entry */ protected int entryType = 0; /** The arguments associated with this entry */ protected Vector args = null; /** * Null constructor; something for subclasses to call. */ public CatalogEntry() {} /** * Construct a catalog entry of the specified type. * * @param name The name of the entry type * @param args A String Vector of arguments * @throws InvalidCatalogEntryTypeException if no such entry type * exists. * @throws InvalidCatalogEntryException if the wrong number of arguments * is passed. */ public CatalogEntry(String name, Vector args) throws CatalogException { Integer iType = (Integer) entryTypes.get(name); if (iType == null) { throw new CatalogException(CatalogException.INVALID_ENTRY_TYPE); } int type = iType.intValue(); try { Integer iArgs = (Integer) entryArgs.get(type); if (iArgs.intValue() != args.size()) { throw new CatalogException(CatalogException.INVALID_ENTRY); } } catch (ArrayIndexOutOfBoundsException e) { throw new CatalogException(CatalogException.INVALID_ENTRY_TYPE); } entryType = type; this.args = args; } /** * Construct a catalog entry of the specified type. * * @param type The entry type * @param args A String Vector of arguments * @throws InvalidCatalogEntryTypeException if no such entry type * exists. * @throws InvalidCatalogEntryException if the wrong number of arguments * is passed. */ public CatalogEntry(int type, Vector args) throws CatalogException { try { Integer iArgs = (Integer) entryArgs.get(type); if (iArgs.intValue() != args.size()) { throw new CatalogException(CatalogException.INVALID_ENTRY); } } catch (ArrayIndexOutOfBoundsException e) { throw new CatalogException(CatalogException.INVALID_ENTRY_TYPE); } entryType = type; this.args = args; } /** * Get the entry type. * * @return The entry type of the CatalogEntry */ public int getEntryType() { return entryType; } /** * Get an entry argument. * * @param argNum The argument number (arguments are numbered from 0). * @return The specified argument or null if an invalid argNum is * provided. */ public String getEntryArg(int argNum) { try { String arg = (String) args.get(argNum); return arg; } catch (ArrayIndexOutOfBoundsException e) { return null; } } /** * Set an entry argument. * *

Catalogs sometimes need to adjust the catlog entry parameters, * for example to make a relative URI absolute with respect to the * current base URI. But in general, this function should only be * called shortly after object creation to do some sort of cleanup. * Catalog entries should not mutate over time.

* * @param argNum The argument number (arguments are numbered from 0). * @throws ArrayIndexOutOfBoundsException if an invalid argument * number is provided. */ public void setEntryArg(int argNum, String newspec) throws ArrayIndexOutOfBoundsException { args.set(argNum, newspec); } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/CatalogException.java100644 0 0 11060 10530407252 24163 0ustar 0 0 // CatalogException.java - Catalog exception /* * 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.xml.resolver; /** * Signal Catalog exception. * *

This exception is thrown if an error occurs loading a * catalog file.

* * @see Catalog * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class CatalogException extends Exception { /** A wrapper around another exception */ public static final int WRAPPER = 1; /** An invalid entry */ public static final int INVALID_ENTRY = 2; /** An invalid entry type */ public static final int INVALID_ENTRY_TYPE = 3; /** Could not instantiate an XML parser */ public static final int NO_XML_PARSER = 4; /** Unknown XML format */ public static final int UNKNOWN_FORMAT = 5; /** Unparseable XML catalog (not XML)*/ public static final int UNPARSEABLE = 6; /** XML but parse failed */ public static final int PARSE_FAILED = 7; /** Text catalog ended in mid-comment */ public static final int UNENDED_COMMENT = 8; /** * The embedded exception if tunnelling, or null. */ private Exception exception = null; private int exceptionType = 0; /** * Create a new CatalogException. * * @param type The exception type * @param message The error or warning message. */ public CatalogException (int type, String message) { super(message); this.exceptionType = type; this.exception = null; } /** * Create a new CatalogException. * * @param type The exception type */ public CatalogException (int type) { super("Catalog Exception " + type); this.exceptionType = type; this.exception = null; } /** * Create a new CatalogException wrapping an existing exception. * *

The existing exception will be embedded in the new * one, and its message will become the default message for * the CatalogException.

* * @param e The exception to be wrapped in a CatalogException. */ public CatalogException (Exception e) { super(); this.exceptionType = WRAPPER; this.exception = e; } /** * Create a new CatalogException from an existing exception. * *

The existing exception will be embedded in the new * one, but the new exception will have its own message.

* * @param message The detail message. * @param e The exception to be wrapped in a CatalogException. */ public CatalogException (String message, Exception e) { super(message); this.exceptionType = WRAPPER; this.exception = e; } /** * Return a detail message for this exception. * *

If there is an embedded exception, and if the CatalogException * has no detail message of its own, this method will return * the detail message from the embedded exception.

* * @return The error or warning message. */ public String getMessage () { String message = super.getMessage(); if (message == null && exception != null) { return exception.getMessage(); } else { return message; } } /** * Return the embedded exception, if any. * * @return The embedded exception, or null if there is none. */ public Exception getException () { return exception; } /** * Return the exception type * * @return The exception type */ public int getExceptionType () { return exceptionType; } /** * Override toString to pick up any embedded exception. * * @return A string representation of this exception. */ public String toString () { if (exception != null) { return exception.toString(); } else { return super.toString(); } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/CatalogManager.java100644 0 0 57022 10530407252 23607 0ustar 0 0 // CatalogManager.java - Access CatalogManager.properties /* * 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.xml.resolver; import java.io.InputStream; import java.net.URL; import java.net.MalformedURLException; import java.util.MissingResourceException; import java.util.PropertyResourceBundle; import java.util.ResourceBundle; import java.util.StringTokenizer; import java.util.Vector; import org.apache.xml.resolver.helpers.Debug; import org.apache.xml.resolver.helpers.BootstrapResolver; import org.apache.xml.resolver.Catalog; /** * CatalogManager provides an interface to the catalog properties. * *

Properties can come from two places: from system properties or * from a CatalogManager.properties file. This class provides a transparent * interface to both, with system properties preferred over property file values.

* *

The following table summarizes the properties:

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
System PropertyCatalogManager.properties
Property
Description
xml.catalog.ignoreMissing If true, a missing CatalogManager.properties file or missing properties * within that file will not generate warning messages. See also the * ignoreMissingProperties method.
xml.catalog.filescatalogsThe semicolon-delimited list of catalog files.
 relative-catalogsIf false, relative catalog URIs are made absolute with respect to the base URI of * the CatalogManager.properties file. This setting only applies to catalog * URIs obtained from the catalogs property in the * CatalogManager.properties file
xml.catalog.verbosityverbosityIf non-zero, the Catalog classes will print informative and debugging messages. * The higher the number, the more messages.
xml.catalog.preferpreferWhich identifier is preferred, "public" or "system"?
xml.catalog.staticCatalogstatic-catalogShould a single catalog be constructed for all parsing, or should a different * catalog be created for each parser?
xml.catalog.allowPIallow-oasis-xml-catalog-piIf the source document contains "oasis-xml-catalog" processing instructions, * should they be used?
xml.catalog.classNamecatalog-class-nameIf you're using the convenience classes * org.apache.xml.resolver.tools.*), this setting * allows you to specify an alternate class name to use for the underlying * catalog.
* * @see Catalog * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class CatalogManager { private static String pFiles = "xml.catalog.files"; private static String pVerbosity = "xml.catalog.verbosity"; private static String pPrefer = "xml.catalog.prefer"; private static String pStatic = "xml.catalog.staticCatalog"; private static String pAllowPI = "xml.catalog.allowPI"; private static String pClassname = "xml.catalog.className"; private static String pIgnoreMissing = "xml.catalog.ignoreMissing"; /** A static CatalogManager instance for sharing */ private static CatalogManager staticManager = new CatalogManager(); /** The bootstrap resolver to use when loading XML Catalogs. */ private BootstrapResolver bResolver = new BootstrapResolver(); /** Flag to ignore missing property files and/or properties */ private boolean ignoreMissingProperties = (System.getProperty(pIgnoreMissing) != null || System.getProperty(pFiles) != null); /** Holds the resources after they are loaded from the file. */ private ResourceBundle resources; /** The name of the CatalogManager properties file. */ private String propertyFile = "CatalogManager.properties"; /** The location of the propertyFile */ private URL propertyFileURI = null; /** Default catalog files list. */ private String defaultCatalogFiles = "./xcatalog"; /** Current catalog files list. */ private String catalogFiles = null; /** Did the catalogFiles come from the properties file? */ private boolean fromPropertiesFile = false; /** Default verbosity level if there is no property setting for it. */ private int defaultVerbosity = 1; /** Current verbosity level. */ private Integer verbosity = null; /** Default preference setting. */ private boolean defaultPreferPublic = true; /** Current preference setting. */ private Boolean preferPublic = null; /** Default setting of the static catalog flag. */ private boolean defaultUseStaticCatalog = true; /** Current setting of the static catalog flag. */ private Boolean useStaticCatalog = null; /** The static catalog used by this manager. */ private static Catalog staticCatalog = null; /** Default setting of the oasisXMLCatalogPI flag. */ private boolean defaultOasisXMLCatalogPI = true; /** Current setting of the oasisXMLCatalogPI flag. */ private Boolean oasisXMLCatalogPI = null; /** Default setting of the relativeCatalogs flag. */ private boolean defaultRelativeCatalogs = true; /** Current setting of the relativeCatalogs flag. */ private Boolean relativeCatalogs = null; /** Current catalog class name. */ private String catalogClassName = null; /** The manager's debug object. Used for printing debugging messages. * *

This field is public so that objects that have access to this * CatalogManager can use this debug object.

*/ public Debug debug = null; /** Constructor. */ public CatalogManager() { debug = new Debug(); // Note that we don't setDebug() here; we do that lazily. Either the // user will set it explicitly, or we'll do it automagically if they // read from the propertyFile for some other reason. That way, there's // no attempt to read from the file before the caller has had a chance // to avoid it. } /** Constructor that specifies an explicit property file. */ public CatalogManager(String propertyFile) { this.propertyFile = propertyFile; debug = new Debug(); // Note that we don't setDebug() here; we do that lazily. Either the // user will set it explicitly, or we'll do it automagically if they // read from the propertyFile for some other reason. That way, there's // no attempt to read from the file before the caller has had a chance // to avoid it. } /** Set the bootstrap resolver.*/ public void setBootstrapResolver(BootstrapResolver resolver) { bResolver = resolver; } /** Get the bootstrap resolver.*/ public BootstrapResolver getBootstrapResolver() { return bResolver; } /** * Load the properties from the propertyFile and build the * resources from it. */ private synchronized void readProperties() { try { propertyFileURI = CatalogManager.class.getResource("/"+propertyFile); InputStream in = CatalogManager.class.getResourceAsStream("/"+propertyFile); if (in==null) { if (!ignoreMissingProperties) { System.err.println("Cannot find "+propertyFile); // there's no reason to give this warning more than once ignoreMissingProperties = true; } return; } resources = new PropertyResourceBundle(in); } catch (MissingResourceException mre) { if (!ignoreMissingProperties) { System.err.println("Cannot read "+propertyFile); } } catch (java.io.IOException e) { if (!ignoreMissingProperties) { System.err.println("Failure trying to read "+propertyFile); } } // This is a bit of a hack. After we've successfully read the properties, // use them to set the default debug level, if the user hasn't already set // the default debug level. if (verbosity == null) { try { String verbStr = resources.getString("verbosity"); int verb = Integer.parseInt(verbStr.trim()); debug.setDebug(verb); verbosity = new Integer(verb); } catch (Exception e) { // nop } } } /** * Allow access to the static CatalogManager */ public static CatalogManager getStaticManager() { return staticManager; } /** * How are missing properties handled? * *

If true, missing or unreadable property files will * not be reported. Otherwise, a message will be sent to System.err. *

*/ public boolean getIgnoreMissingProperties() { return ignoreMissingProperties; } /** * How should missing properties be handled? * *

If ignore is true, missing or unreadable property files will * not be reported. Otherwise, a message will be sent to System.err. *

*/ public void setIgnoreMissingProperties(boolean ignore) { ignoreMissingProperties = ignore; } /** * How are missing properties handled? * *

If ignore is true, missing or unreadable property files will * not be reported. Otherwise, a message will be sent to System.err. *

* * @deprecated No longer static; use get/set methods. */ public void ignoreMissingProperties(boolean ignore) { setIgnoreMissingProperties(ignore); } /** * Obtain the verbosity setting from the properties. * * @return The verbosity level from the propertyFile or the * defaultVerbosity. */ private int queryVerbosity () { String defaultVerbStr = Integer.toString(defaultVerbosity); String verbStr = System.getProperty(pVerbosity); if (verbStr == null) { if (resources==null) readProperties(); if (resources != null) { try { verbStr = resources.getString("verbosity"); } catch (MissingResourceException e) { verbStr = defaultVerbStr; } } else { verbStr = defaultVerbStr; } } int verb = defaultVerbosity; try { verb = Integer.parseInt(verbStr.trim()); } catch (Exception e) { System.err.println("Cannot parse verbosity: \"" + verbStr + "\""); } // This is a bit of a hack. After we've successfully got the verbosity, // we have to use it to set the default debug level, // if the user hasn't already set the default debug level. if (verbosity == null) { debug.setDebug(verb); verbosity = new Integer(verb); } return verb; } /** * What is the current verbosity? */ public int getVerbosity() { if (verbosity == null) { verbosity = new Integer(queryVerbosity()); } return verbosity.intValue(); } /** * Set the current verbosity. */ public void setVerbosity (int verbosity) { this.verbosity = new Integer(verbosity); debug.setDebug(verbosity); } /** * What is the current verbosity? * * @deprecated No longer static; use get/set methods. */ public int verbosity () { return getVerbosity(); } /** * Obtain the relativeCatalogs setting from the properties. * * @return The relativeCatalogs setting from the propertyFile or the * defaultRelativeCatalogs. */ private boolean queryRelativeCatalogs () { if (resources==null) readProperties(); if (resources==null) return defaultRelativeCatalogs; try { String allow = resources.getString("relative-catalogs"); return (allow.equalsIgnoreCase("true") || allow.equalsIgnoreCase("yes") || allow.equalsIgnoreCase("1")); } catch (MissingResourceException e) { return defaultRelativeCatalogs; } } /** * Get the relativeCatalogs setting. * *

This property is used when the catalogFiles property is * interrogated. If true, then relative catalog entry file names * are returned. If false, relative catalog entry file names are * made absolute with respect to the properties file before returning * them.

* *

This property only applies when the catalog files * come from a properties file. If they come from a system property or * the default list, they are never considered relative. (What would * they be relative to?)

* *

In the properties, a value of 'yes', 'true', or '1' is considered * true, anything else is false.

* * @return The relativeCatalogs setting from the propertyFile or the * defaultRelativeCatalogs. */ public boolean getRelativeCatalogs () { if (relativeCatalogs == null) { relativeCatalogs = new Boolean(queryRelativeCatalogs()); } return relativeCatalogs.booleanValue(); } /** * Set the relativeCatalogs setting. * * @see #getRelativeCatalogs() */ public void setRelativeCatalogs (boolean relative) { relativeCatalogs = new Boolean(relative); } /** * Get the relativeCatalogs setting. * * @deprecated No longer static; use get/set methods. */ public boolean relativeCatalogs () { return getRelativeCatalogs(); } /** * Obtain the list of catalog files from the properties. * * @return A semicolon delimited list of catlog file URIs */ private String queryCatalogFiles () { String catalogList = System.getProperty(pFiles); fromPropertiesFile = false; if (catalogList == null) { if (resources == null) readProperties(); if (resources != null) { try { catalogList = resources.getString("catalogs"); fromPropertiesFile = true; } catch (MissingResourceException e) { System.err.println(propertyFile + ": catalogs not found."); catalogList = null; } } } if (catalogList == null) { catalogList = defaultCatalogFiles; } return catalogList; } /** * Return the current list of catalog files. * * @return A vector of the catalog file names or null if no catalogs * are available in the properties. */ public Vector getCatalogFiles() { if (catalogFiles == null) { catalogFiles = queryCatalogFiles(); } StringTokenizer files = new StringTokenizer(catalogFiles, ";"); Vector catalogs = new Vector(); while (files.hasMoreTokens()) { String catalogFile = files.nextToken(); URL absURI = null; if (fromPropertiesFile && !relativeCatalogs()) { try { absURI = new URL(propertyFileURI, catalogFile); catalogFile = absURI.toString(); } catch (MalformedURLException mue) { absURI = null; } } catalogs.add(catalogFile); } return catalogs; } /** * Set the list of catalog files. */ public void setCatalogFiles(String fileList) { catalogFiles = fileList; fromPropertiesFile = false; } /** * Return the current list of catalog files. * * @return A vector of the catalog file names or null if no catalogs * are available in the properties. * * @deprecated No longer static; use get/set methods. */ public Vector catalogFiles() { return getCatalogFiles(); } /** * Obtain the preferPublic setting from the properties. * *

In the properties, a value of 'public' is true, * anything else is false.

* * @return True if prefer is public or the * defaultPreferSetting. */ private boolean queryPreferPublic () { String prefer = System.getProperty(pPrefer); if (prefer == null) { if (resources==null) readProperties(); if (resources==null) return defaultPreferPublic; try { prefer = resources.getString("prefer"); } catch (MissingResourceException e) { return defaultPreferPublic; } } if (prefer == null) { return defaultPreferPublic; } return (prefer.equalsIgnoreCase("public")); } /** * Return the current prefer public setting. * * @return True if public identifiers are preferred. */ public boolean getPreferPublic () { if (preferPublic == null) { preferPublic = new Boolean(queryPreferPublic()); } return preferPublic.booleanValue(); } /** * Set the prefer public setting. */ public void setPreferPublic (boolean preferPublic) { this.preferPublic = new Boolean(preferPublic); } /** * Return the current prefer public setting. * * @return True if public identifiers are preferred. * * @deprecated No longer static; use get/set methods. */ public boolean preferPublic () { return getPreferPublic(); } /** * Obtain the static-catalog setting from the properties. * *

In the properties, a value of 'yes', 'true', or '1' is considered * true, anything else is false.

* * @return The static-catalog setting from the propertyFile or the * defaultUseStaticCatalog. */ private boolean queryUseStaticCatalog () { String staticCatalog = System.getProperty(pStatic); if (staticCatalog == null) { if (resources==null) readProperties(); if (resources==null) return defaultUseStaticCatalog; try { staticCatalog = resources.getString("static-catalog"); } catch (MissingResourceException e) { return defaultUseStaticCatalog; } } if (staticCatalog == null) { return defaultUseStaticCatalog; } return (staticCatalog.equalsIgnoreCase("true") || staticCatalog.equalsIgnoreCase("yes") || staticCatalog.equalsIgnoreCase("1")); } /** * Get the current use static catalog setting. */ public boolean getUseStaticCatalog() { if (useStaticCatalog == null) { useStaticCatalog = new Boolean(queryUseStaticCatalog()); } return useStaticCatalog.booleanValue(); } /** * Set the use static catalog setting. */ public void setUseStaticCatalog(boolean useStatic) { useStaticCatalog = new Boolean(useStatic); } /** * Get the current use static catalog setting. * * @deprecated No longer static; use get/set methods. */ public boolean staticCatalog() { return getUseStaticCatalog(); } /** * Get a new catalog instance. * * This method always returns a new instance of the underlying catalog class. */ public Catalog getPrivateCatalog() { Catalog catalog = staticCatalog; if (useStaticCatalog == null) { useStaticCatalog = new Boolean(getUseStaticCatalog()); } if (catalog == null || !useStaticCatalog.booleanValue()) { try { String catalogClassName = getCatalogClassName(); if (catalogClassName == null) { catalog = new Catalog(); } else { try { catalog = (Catalog) Class.forName(catalogClassName).newInstance(); } catch (ClassNotFoundException cnfe) { debug.message(1,"Catalog class named '" + catalogClassName + "' could not be found. Using default."); catalog = new Catalog(); } catch (ClassCastException cnfe) { debug.message(1,"Class named '" + catalogClassName + "' is not a Catalog. Using default."); catalog = new Catalog(); } } catalog.setCatalogManager(this); catalog.setupReaders(); catalog.loadSystemCatalogs(); } catch (Exception ex) { ex.printStackTrace(); } if (useStaticCatalog.booleanValue()) { staticCatalog = catalog; } } return catalog; } /** * Get a catalog instance. * * If this manager uses static catalogs, the same static catalog will * always be returned. Otherwise a new catalog will be returned. */ public Catalog getCatalog() { Catalog catalog = staticCatalog; if (useStaticCatalog == null) { useStaticCatalog = new Boolean(getUseStaticCatalog()); } if (catalog == null || !useStaticCatalog.booleanValue()) { catalog = getPrivateCatalog(); if (useStaticCatalog.booleanValue()) { staticCatalog = catalog; } } return catalog; } /** *

Obtain the oasisXMLCatalogPI setting from the properties.

* *

In the properties, a value of 'yes', 'true', or '1' is considered * true, anything else is false.

* * @return The oasisXMLCatalogPI setting from the propertyFile or the * defaultOasisXMLCatalogPI. */ public boolean queryAllowOasisXMLCatalogPI () { String allow = System.getProperty(pAllowPI); if (allow == null) { if (resources==null) readProperties(); if (resources==null) return defaultOasisXMLCatalogPI; try { allow = resources.getString("allow-oasis-xml-catalog-pi"); } catch (MissingResourceException e) { return defaultOasisXMLCatalogPI; } } if (allow == null) { return defaultOasisXMLCatalogPI; } return (allow.equalsIgnoreCase("true") || allow.equalsIgnoreCase("yes") || allow.equalsIgnoreCase("1")); } /** * Get the current XML Catalog PI setting. */ public boolean getAllowOasisXMLCatalogPI () { if (oasisXMLCatalogPI == null) { oasisXMLCatalogPI = new Boolean(queryAllowOasisXMLCatalogPI()); } return oasisXMLCatalogPI.booleanValue(); } /** * Set the XML Catalog PI setting */ public void setAllowOasisXMLCatalogPI(boolean allowPI) { oasisXMLCatalogPI = new Boolean(allowPI); } /** * Get the current XML Catalog PI setting. * * @deprecated No longer static; use get/set methods. */ public boolean allowOasisXMLCatalogPI() { return getAllowOasisXMLCatalogPI(); } /** * Obtain the Catalog class name setting from the properties. * */ public String queryCatalogClassName () { String className = System.getProperty(pClassname); if (className == null) { if (resources==null) readProperties(); if (resources==null) return null; try { return resources.getString("catalog-class-name"); } catch (MissingResourceException e) { return null; } } return className; } /** * Get the current Catalog class name. */ public String getCatalogClassName() { if (catalogClassName == null) { catalogClassName = queryCatalogClassName(); } return catalogClassName; } /** * Set the Catalog class name. */ public void setCatalogClassName(String className) { catalogClassName = className; } /** * Get the current Catalog class name. * * @deprecated No longer static; use get/set methods. */ public String catalogClassName() { return getCatalogClassName(); } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/LICENSE.resolver.txt100644 0 0 26446 10530407252 23570 0ustar 0 0 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed 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. xml-commons-resolver-1.2/src/org/apache/xml/resolver/NOTICE-resolver.txt100644 0 0 604 10530407252 23412 0ustar 0 0 Apache XML Commons Resolver Copyright 2006 The Apache Software Foundation. This product includes software developed at The Apache Software Foundation http://www.apache.org/ Portions of this code are derived from classes placed in the public domain by Arbortext on 10 Apr 2000. See: http://www.arbortext.com/customer_support/updates_and_technical_notes/catalogs/docs/README.htm xml-commons-resolver-1.2/src/org/apache/xml/resolver/Resolver.java100644 0 0 54116 10530407252 22544 0ustar 0 0 // Resolver.java - Represents an extension of OASIS Open Catalog files. /* * 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.xml.resolver; import java.io.IOException; import java.io.InputStream; import java.io.FileNotFoundException; import java.util.Enumeration; import java.util.Vector; import java.net.URL; import java.net.URLConnection; import java.net.MalformedURLException; import org.apache.xml.resolver.readers.SAXCatalogReader; import org.apache.xml.resolver.readers.OASISXMLCatalogReader; import org.apache.xml.resolver.readers.TR9401CatalogReader; import javax.xml.parsers.SAXParserFactory; /** * An extension to OASIS Open Catalog files, this class supports * suffix-based matching and an external RFC2483 resolver. * * @see Catalog * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class Resolver extends Catalog { /** * The URISUFFIX Catalog Entry type. * *

URI suffix entries match URIs that end in a specified suffix.

*/ public static final int URISUFFIX = CatalogEntry.addEntryType("URISUFFIX", 2); /** * The SYSTEMSUFFIX Catalog Entry type. * *

System suffix entries match system identifiers that end in a * specified suffix.

*/ public static final int SYSTEMSUFFIX = CatalogEntry.addEntryType("SYSTEMSUFFIX", 2); /** * The RESOLVER Catalog Entry type. * *

A hook for providing support for web-based backup resolvers.

*/ public static final int RESOLVER = CatalogEntry.addEntryType("RESOLVER", 1); /** * The SYSTEMREVERSE Catalog Entry type. * *

This is a bit of a hack. There's no actual SYSTEMREVERSE entry, * but this entry type is used to indicate that a reverse lookup is * being performed. (This allows the Resolver to implement * RFC2483 I2N and I2NS.) */ public static final int SYSTEMREVERSE = CatalogEntry.addEntryType("SYSTEMREVERSE", 1); /** * Setup readers. */ public void setupReaders() { SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(true); spf.setValidating(false); SAXCatalogReader saxReader = new SAXCatalogReader(spf); saxReader.setCatalogParser(null, "XCatalog", "org.apache.xml.resolver.readers.XCatalogReader"); saxReader.setCatalogParser(OASISXMLCatalogReader.namespaceName, "catalog", "org.apache.xml.resolver.readers.ExtendedXMLCatalogReader"); addReader("application/xml", saxReader); TR9401CatalogReader textReader = new TR9401CatalogReader(); addReader("text/plain", textReader); } /** * Cleanup and process a Catalog entry. * *

This method processes each Catalog entry, changing mapped * relative system identifiers into absolute ones (based on the current * base URI), and maintaining other information about the current * catalog.

* * @param entry The CatalogEntry to process. */ public void addEntry(CatalogEntry entry) { int type = entry.getEntryType(); if (type == URISUFFIX) { String suffix = normalizeURI(entry.getEntryArg(0)); String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(1, fsi); catalogManager.debug.message(4, "URISUFFIX", suffix, fsi); } else if (type == SYSTEMSUFFIX) { String suffix = normalizeURI(entry.getEntryArg(0)); String fsi = makeAbsolute(normalizeURI(entry.getEntryArg(1))); entry.setEntryArg(1, fsi); catalogManager.debug.message(4, "SYSTEMSUFFIX", suffix, fsi); } super.addEntry(entry); } /** * Return the applicable URI. * *

If a URI entry exists in the Catalog * for the URI specified, return the mapped value.

* *

In the Resolver (as opposed to the Catalog) class, if the * URI isn't found by the usual algorithm, URISUFFIX entries are * considered.

* *

URI comparison is case sensitive.

* * @param uri The URI to locate in the catalog. * * @return The resolved URI. * * @throws MalformedURLException The system identifier of a * subordinate catalog cannot be turned into a valid URL. * @throws IOException Error reading subordinate catalog file. */ public String resolveURI(String uri) throws MalformedURLException, IOException { String resolved = super.resolveURI(uri); if (resolved != null) { return resolved; } Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == RESOLVER) { resolved = resolveExternalSystem(uri, e.getEntryArg(0)); if (resolved != null) { return resolved; } } else if (e.getEntryType() == URISUFFIX) { String suffix = e.getEntryArg(0); String result = e.getEntryArg(1); if (suffix.length() <= uri.length() && uri.substring(uri.length()-suffix.length()).equals(suffix)) { return result; } } } // Otherwise, look in the subordinate catalogs return resolveSubordinateCatalogs(Catalog.URI, null, null, uri); } /** * Return the applicable SYSTEM system identifier, resorting * to external RESOLVERs if necessary. * *

If a SYSTEM entry exists in the Catalog * for the system ID specified, return the mapped value.

* *

In the Resolver (as opposed to the Catalog) class, if the * URI isn't found by the usual algorithm, SYSTEMSUFFIX entries are * considered.

* *

On Windows-based operating systems, the comparison between * the system identifier provided and the SYSTEM entries in the * Catalog is case-insensitive.

* * @param systemId The system ID to locate in the catalog. * * @return The system identifier to use for systemId. * * @throws MalformedURLException The formal system identifier of a * subordinate catalog cannot be turned into a valid URL. * @throws IOException Error reading subordinate catalog file. */ public String resolveSystem(String systemId) throws MalformedURLException, IOException { String resolved = super.resolveSystem(systemId); if (resolved != null) { return resolved; } Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == RESOLVER) { resolved = resolveExternalSystem(systemId, e.getEntryArg(0)); if (resolved != null) { return resolved; } } else if (e.getEntryType() == SYSTEMSUFFIX) { String suffix = e.getEntryArg(0); String result = e.getEntryArg(1); if (suffix.length() <= systemId.length() && systemId.substring(systemId.length()-suffix.length()).equals(suffix)) { return result; } } } return resolveSubordinateCatalogs(Catalog.SYSTEM, null, null, systemId); } /** * Return the applicable PUBLIC or SYSTEM identifier, resorting * to external resolvers if necessary. * *

This method searches the Catalog and returns the system * identifier specified for the given system or * public identifiers. If * no appropriate PUBLIC or SYSTEM entry is found in the Catalog, * null is returned.

* *

Note that a system or public identifier in the current catalog * (or subordinate catalogs) will be used in preference to an * external resolver. Further, if a systemId is present, the external * resolver(s) will be queried for that before the publicId.

* * @param publicId The public identifier to locate in the catalog. * Public identifiers are normalized before comparison. * @param systemId The nominal system identifier for the entity * in question (as provided in the source document). * * @throws MalformedURLException The formal system identifier of a * subordinate catalog cannot be turned into a valid URL. * @throws IOException Error reading subordinate catalog file. * * @return The system identifier to use. * Note that the nominal system identifier is not returned if a * match is not found in the catalog, instead null is returned * to indicate that no match was found. */ public String resolvePublic(String publicId, String systemId) throws MalformedURLException, IOException { String resolved = super.resolvePublic(publicId, systemId); if (resolved != null) { return resolved; } Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == RESOLVER) { if (systemId != null) { resolved = resolveExternalSystem(systemId, e.getEntryArg(0)); if (resolved != null) { return resolved; } } resolved = resolveExternalPublic(publicId, e.getEntryArg(0)); if (resolved != null) { return resolved; } } } return resolveSubordinateCatalogs(Catalog.PUBLIC, null, publicId, systemId); } /** * Query an external RFC2483 resolver for a system identifier. * * @param systemId The system ID to locate. * @param resolver The name of the resolver to use. * * @return The system identifier to use for the systemId. */ protected String resolveExternalSystem(String systemId, String resolver) throws MalformedURLException, IOException { Resolver r = queryResolver(resolver, "i2l", systemId, null); if (r != null) { return r.resolveSystem(systemId); } else { return null; } } /** * Query an external RFC2483 resolver for a public identifier. * * @param publicId The system ID to locate. * @param resolver The name of the resolver to use. * * @return The system identifier to use for the systemId. */ protected String resolveExternalPublic(String publicId, String resolver) throws MalformedURLException, IOException { Resolver r = queryResolver(resolver, "fpi2l", publicId, null); if (r != null) { return r.resolvePublic(publicId, null); } else { return null; } } /** * Query an external RFC2483 resolver. * * @param resolver The URL of the RFC2483 resolver. * @param command The command to send the resolver. * @param arg1 The first argument to the resolver. * @param arg2 The second argument to the resolver, usually null. * * @return The Resolver constructed. */ protected Resolver queryResolver(String resolver, String command, String arg1, String arg2) { InputStream iStream = null; String RFC2483 = resolver + "?command=" + command + "&format=tr9401&uri=" + arg1 + "&uri2=" + arg2; String line = null; try { URL url = new URL(RFC2483); URLConnection urlCon = url.openConnection(); urlCon.setUseCaches(false); Resolver r = (Resolver) newCatalog(); String cType = urlCon.getContentType(); // I don't care about the character set or subtype if (cType.indexOf(";") > 0) { cType = cType.substring(0, cType.indexOf(";")); } r.parseCatalog(cType, urlCon.getInputStream()); return r; } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.UNPARSEABLE) { catalogManager.debug.message(1, "Unparseable catalog: " + RFC2483); } else if (cex.getExceptionType() == CatalogException.UNKNOWN_FORMAT) { catalogManager.debug.message(1, "Unknown catalog format: " + RFC2483); } return null; } catch (MalformedURLException mue) { catalogManager.debug.message(1, "Malformed resolver URL: " + RFC2483); return null; } catch (IOException ie) { catalogManager.debug.message(1, "I/O Exception opening resolver: " + RFC2483); return null; } } /** * Append two vectors, returning the result. * * @param vec The first vector * @param appvec The vector to be appended * @return The vector vec, with appvec's elements appended to it */ private Vector appendVector(Vector vec, Vector appvec) { if (appvec != null) { for (int count = 0; count < appvec.size(); count++) { vec.addElement(appvec.elementAt(count)); } } return vec; } /** * Find the URNs for a given system identifier in all catalogs. * * @param systemId The system ID to locate. * * @return A vector of URNs that map to the systemId. */ public Vector resolveAllSystemReverse(String systemId) throws MalformedURLException, IOException { Vector resolved = new Vector(); // If there's a SYSTEM entry in this catalog, use it if (systemId != null) { Vector localResolved = resolveLocalSystemReverse(systemId); resolved = appendVector(resolved, localResolved); } // Otherwise, look in the subordinate catalogs Vector subResolved = resolveAllSubordinateCatalogs(SYSTEMREVERSE, null, null, systemId); return appendVector(resolved, subResolved); } /** * Find the URN for a given system identifier. * * @param systemId The system ID to locate. * * @return A (single) URN that maps to the systemId. */ public String resolveSystemReverse(String systemId) throws MalformedURLException, IOException { Vector resolved = resolveAllSystemReverse(systemId); if (resolved != null && resolved.size() > 0) { return (String) resolved.elementAt(0); } else { return null; } } /** * Return the applicable SYSTEM system identifiers. * *

If one or more SYSTEM entries exists in the Catalog * for the system ID specified, return the mapped values.

* *

The caller is responsible for doing any necessary * normalization of the system identifier before calling * this method. For example, a relative system identifier in * a document might be converted to an absolute system identifier * before attempting to resolve it.

* *

Note that this function will force all subordinate catalogs * to be loaded.

* *

On Windows-based operating systems, the comparison between * the system identifier provided and the SYSTEM entries in the * Catalog is case-insensitive.

* * @param systemId The system ID to locate in the catalog. * * @return The system identifier to use for the notation. * * @throws MalformedURLException The formal system identifier of a * subordinate catalog cannot be turned into a valid URL. * @throws IOException Error reading subordinate catalog file. */ public Vector resolveAllSystem(String systemId) throws MalformedURLException, IOException { Vector resolutions = new Vector(); // If there are SYSTEM entries in this catalog, start with them if (systemId != null) { Vector localResolutions = resolveAllLocalSystem(systemId); resolutions = appendVector(resolutions, localResolutions); } // Then look in the subordinate catalogs Vector subResolutions = resolveAllSubordinateCatalogs(SYSTEM, null, null, systemId); resolutions = appendVector(resolutions, subResolutions); if (resolutions.size() > 0) { return resolutions; } else { return null; } } /** * Return all applicable SYSTEM system identifiers in this * catalog. * *

If one or more SYSTEM entries exists in the catalog file * for the system ID specified, return the mapped values.

* * @param systemId The system ID to locate in the catalog * * @return A vector of the mapped system identifiers or null */ private Vector resolveAllLocalSystem(String systemId) { Vector map = new Vector(); String osname = System.getProperty("os.name"); boolean windows = (osname.indexOf("Windows") >= 0); Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == SYSTEM && (e.getEntryArg(0).equals(systemId) || (windows && e.getEntryArg(0).equalsIgnoreCase(systemId)))) { map.addElement(e.getEntryArg(1)); } } if (map.size() == 0) { return null; } else { return map; } } /** * Find the URNs for a given system identifier in the current catalog. * * @param systemId The system ID to locate. * * @return A vector of URNs that map to the systemId. */ private Vector resolveLocalSystemReverse(String systemId) { Vector map = new Vector(); String osname = System.getProperty("os.name"); boolean windows = (osname.indexOf("Windows") >= 0); Enumeration en = catalogEntries.elements(); while (en.hasMoreElements()) { CatalogEntry e = (CatalogEntry) en.nextElement(); if (e.getEntryType() == SYSTEM && (e.getEntryArg(1).equals(systemId) || (windows && e.getEntryArg(1).equalsIgnoreCase(systemId)))) { map.addElement(e.getEntryArg(0)); } } if (map.size() == 0) { return null; } else { return map; } } /** * Search the subordinate catalogs, in order, looking for all * match. * *

This method searches the Catalog and returns all of the system * identifiers specified for the given entity type with the given * name, public, and system identifiers. In some contexts, these * may be null.

* * @param entityType The CatalogEntry type for which this query is * being conducted. This is necessary in order to do the approprate * query on a subordinate catalog. * @param entityName The name of the entity being searched for, if * appropriate. * @param publicId The public identifier of the entity in question * (as provided in the source document). * @param systemId The nominal system identifier for the entity * in question (as provided in the source document). * * @throws MalformedURLException The formal system identifier of a * delegated catalog cannot be turned into a valid URL. * @throws IOException Error reading delegated catalog file. * * @return The system identifier to use. * Note that the nominal system identifier is not returned if a * match is not found in the catalog, instead null is returned * to indicate that no match was found. */ private synchronized Vector resolveAllSubordinateCatalogs(int entityType, String entityName, String publicId, String systemId) throws MalformedURLException, IOException { Vector resolutions = new Vector(); for (int catPos = 0; catPos < catalogs.size(); catPos++) { Resolver c = null; try { c = (Resolver) catalogs.elementAt(catPos); } catch (ClassCastException e) { String catfile = (String) catalogs.elementAt(catPos); c = (Resolver) newCatalog(); try { c.parseCatalog(catfile); } catch (MalformedURLException mue) { catalogManager.debug.message(1, "Malformed Catalog URL", catfile); } catch (FileNotFoundException fnfe) { catalogManager.debug.message(1, "Failed to load catalog, file not found", catfile); } catch (IOException ioe) { catalogManager.debug.message(1, "Failed to load catalog, I/O error", catfile); } catalogs.setElementAt(c, catPos); } String resolved = null; // Ok, now what are we supposed to call here? if (entityType == DOCTYPE) { resolved = c.resolveDoctype(entityName, publicId, systemId); if (resolved != null) { // Only find one DOCTYPE resolution resolutions.addElement(resolved); return resolutions; } } else if (entityType == DOCUMENT) { resolved = c.resolveDocument(); if (resolved != null) { // Only find one DOCUMENT resolution resolutions.addElement(resolved); return resolutions; } } else if (entityType == ENTITY) { resolved = c.resolveEntity(entityName, publicId, systemId); if (resolved != null) { // Only find one ENTITY resolution resolutions.addElement(resolved); return resolutions; } } else if (entityType == NOTATION) { resolved = c.resolveNotation(entityName, publicId, systemId); if (resolved != null) { // Only find one NOTATION resolution resolutions.addElement(resolved); return resolutions; } } else if (entityType == PUBLIC) { resolved = c.resolvePublic(publicId, systemId); if (resolved != null) { // Only find one PUBLIC resolution resolutions.addElement(resolved); return resolutions; } } else if (entityType == SYSTEM) { Vector localResolutions = c.resolveAllSystem(systemId); resolutions = appendVector(resolutions, localResolutions); break; } else if (entityType == SYSTEMREVERSE) { Vector localResolutions = c.resolveAllSystemReverse(systemId); resolutions = appendVector(resolutions, localResolutions); } } if (resolutions != null) { return resolutions; } else { return null; } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/Version.java100644 0 0 3667 10530407252 22355 0ustar 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.xml.resolver; /** * * Administrative class to keep track of the version number of * xml-commons external sources releases. * See xml-commons/java/resolver.xml for filtering on 1.0, etc. */ public class Version { /** * Get the version string for xml-commons-resolver. * Version String formatted like: * "XmlResolver v.r". * * @return String denoting our current version */ public static String getVersion() { return getProduct()+" "+getVersionNum(); } /** * Get just the product name. * * @return String denoting our product name */ public static String getProduct() { return "XmlResolver"; } /** * Get just the version number v.r. * @return String denoting our current version number */ public static String getVersionNum() { return "1.2"; } /** * Print the release version to the command line. * @param argv command line arguments, unused. */ public static void main(String argv[]) { System.out.println(getVersion()); } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/Version.src100644 0 0 3702 10530407252 22211 0ustar 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.xml.resolver; /** * * Administrative class to keep track of the version number of * xml-commons external sources releases. * See xml-commons/java/resolver.xml for filtering on 1.0, etc. */ public class Version { /** * Get the version string for xml-commons-resolver. * Version String formatted like: * "@impl.name@ v.r". * * @return String denoting our current version */ public static String getVersion() { return getProduct()+" "+getVersionNum(); } /** * Get just the product name. * * @return String denoting our product name */ public static String getProduct() { return "@impl.name@"; } /** * Get just the version number v.r. * @return String denoting our current version number */ public static String getVersionNum() { return "@impl.version@"; } /** * Print the release version to the command line. * @param argv command line arguments, unused. */ public static void main(String argv[]) { System.out.println(getVersion()); } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/apps/XParseError.java100644 0 0 7604 10530407252 24102 0ustar 0 0 // XParseError.java - An error handler for xparse /* * 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.xml.resolver.apps; import java.net.URL; import java.net.MalformedURLException; import org.xml.sax.SAXParseException; import org.xml.sax.ErrorHandler; import org.apache.xml.resolver.helpers.FileURL; /** * An ErrorHandler for xparse. * *

This class is just the error handler for xparse.

* * @see xparse * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class XParseError implements ErrorHandler { /** Show errors? */ private boolean showErrors = true; /** Show warnings? */ private boolean showWarnings = false; /** How many messages should be presented? */ private int maxMessages = 10; /** The number of fatal errors seen so far. */ private int fatalCount = 0; /** The number of errors seen so far. */ private int errorCount = 0; /** The number of warnings seen so far. */ private int warningCount = 0; /** The base URI of the running application. */ private String baseURI = ""; /** Constructor */ public XParseError(boolean errors, boolean warnings) { showErrors = errors; showWarnings = warnings; try { URL url = FileURL.makeURL("basename"); baseURI = url.toString(); } catch (MalformedURLException mue) { // nop; } } /** Return the error count */ public int getErrorCount() { return errorCount; } /** Return the fatal error count */ public int getFatalCount() { return fatalCount; } /** Return the warning count */ public int getWarningCount() { return warningCount; } /** Return the number of messages to display */ public int getMaxMessages() { return maxMessages; } /** Set the number of messages to display */ public void setMaxMessages(int max) { maxMessages = max; } /** SAX2 API */ public void error(SAXParseException exception) { errorCount++; if (showErrors && (errorCount+warningCount < maxMessages)) { message("Error", exception); } } /** SAX2 API */ public void fatalError(SAXParseException exception) { errorCount++; fatalCount++; if (showErrors && (errorCount+warningCount < maxMessages)) { message("Fatal error", exception); } } /** SAX2 API */ public void warning(SAXParseException exception) { warningCount++; if (showWarnings && (errorCount+warningCount < maxMessages)) { message("Warning", exception); } } /** Display a message to the user */ private void message(String type, SAXParseException exception) { String filename = exception.getSystemId(); if (filename.startsWith(baseURI)) { filename = filename.substring(baseURI.length()); } System.out.print(type + ":" + filename + ":" + exception.getLineNumber()); if (exception.getColumnNumber() > 0) { System.out.print(":" + exception.getColumnNumber()); } System.out.println(":" + exception.getMessage()); } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/apps/package.html100644 0 0 2103 10530407252 23271 0ustar 0 0 Apache XML Commons Resolver Applications package

Apache XML Commons Resolver Applications package.

This package provides a few simple command-line tools for exploring the facilities of the resolver.

xml-commons-resolver-1.2/src/org/apache/xml/resolver/apps/resolver.java100644 0 0 23326 10530407252 23546 0ustar 0 0 // resolver.java - A simple command-line test tool for the resolver /* * 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.xml.resolver.apps; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URL; import java.net.MalformedURLException; import java.util.Vector; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogManager; import org.apache.xml.resolver.helpers.Debug; import org.apache.xml.resolver.helpers.FileURL; import org.apache.xml.resolver.tools.CatalogResolver; /** * A simple command-line resolver. * *

This class implements a simple command-line resolver. It takes * some parameters and passes them through the resolver, printing the * result. *

* *

Usage: resolver [options] keyword

* *

Where options are:

* *
*
-c catalogfile
*
Load a particular catalog file.
*
-n name
*
Sets the name.
*
-p publicId
*
Sets the public identifier.
*
-s systemId
*
Sets the system identifier.
*
-a
*
Absolute system URI.
*
-u uri
*
Sets the URI.
*
-d integer
*
Set the debug level.
*
* *

And keyword is one of: doctype, document, entity, notation, public, * system, or uri.

* *

The process ends with error-level 1, if there errors.

* * @see org.apache.xml.resolver.tools.ResolvingParser * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class resolver { private static Debug debug = CatalogManager.getStaticManager().debug; /** The main entry point */ public static void main (String[] args) throws FileNotFoundException, IOException { int debuglevel = 0; Vector catalogFiles = new Vector(); int resType = 0; String resTypeStr = null; String name = null; String publicId = null; String systemId = null; String uri = null; boolean absoluteSystem = false; for (int i=0; i 0) { debug.setDebug(debuglevel); } } catch (Exception e) { // nop } continue; } resTypeStr = args[i]; } if (resTypeStr == null) { usage(); } if (resTypeStr.equalsIgnoreCase("doctype")) { resType = Catalog.DOCTYPE; if (publicId == null && systemId == null) { System.out.println("DOCTYPE requires public or system identifier."); usage(); } } else if (resTypeStr.equalsIgnoreCase("document")) { resType = Catalog.DOCUMENT; } else if (resTypeStr.equalsIgnoreCase("entity")) { resType = Catalog.ENTITY; if (publicId == null && systemId == null && name == null) { System.out.println("ENTITY requires name or public or system identifier."); usage(); } } else if (resTypeStr.equalsIgnoreCase("notation")) { resType = Catalog.NOTATION; if (publicId == null && systemId == null && name == null) { System.out.println("NOTATION requires name or public or system identifier."); usage(); } } else if (resTypeStr.equalsIgnoreCase("public")) { resType = Catalog.PUBLIC; if (publicId == null) { System.out.println("PUBLIC requires public identifier."); usage(); } } else if (resTypeStr.equalsIgnoreCase("system")) { resType = Catalog.SYSTEM; if (systemId == null) { System.out.println("SYSTEM requires system identifier."); usage(); } } else if (resTypeStr.equalsIgnoreCase("uri")) { resType = Catalog.URI; if (uri == null) { System.out.println("URI requires a uri."); usage(); } } else { System.out.println(resTypeStr + " is not a recognized keyword."); usage(); } if (absoluteSystem) { URL base = null; URL sysid = null; // Calculate the appropriate BASE URI try { // tack on a basename because URLs point to files not dirs base = FileURL.makeURL("basename"); } catch (MalformedURLException e) { String userdir = System.getProperty("user.dir"); userdir = userdir.replace('\\', '/'); debug.message(1, "Malformed URL on cwd", userdir); base = null; } try { sysid = new URL(base, systemId); systemId = sysid.toString(); } catch (MalformedURLException e) { try { sysid = new URL("file:///" + systemId); } catch (MalformedURLException e2) { debug.message(1, "Malformed URL on system id", systemId); } } } CatalogResolver catalogResolver = new CatalogResolver(); Catalog resolver = catalogResolver.getCatalog(); for (int count = 0; count < catalogFiles.size(); count++) { String file = (String) catalogFiles.elementAt(count); resolver.parseCatalog(file); } String result = null; if (resType == Catalog.DOCTYPE) { System.out.println("Resolve DOCTYPE (name, publicid, systemid):"); if (name != null) { System.out.println(" name: " + name); } if (publicId != null) { System.out.println(" public id: " + publicId); } if (systemId != null) { System.out.println(" system id: " + systemId); } if (uri != null) { System.out.println(" uri: " + uri); } result = resolver.resolveDoctype(name, publicId, systemId); } else if (resType == Catalog.DOCUMENT) { System.out.println("Resolve DOCUMENT ():"); result = resolver.resolveDocument(); } else if (resType == Catalog.ENTITY) { System.out.println("Resolve ENTITY (name, publicid, systemid):"); if (name != null) { System.out.println(" name: " + name); } if (publicId != null) { System.out.println(" public id: " + publicId); } if (systemId != null) { System.out.println(" system id: " + systemId); } result = resolver.resolveEntity(name, publicId, systemId); } else if (resType == Catalog.NOTATION) { System.out.println("Resolve NOTATION (name, publicid, systemid):"); if (name != null) { System.out.println(" name: " + name); } if (publicId != null) { System.out.println(" public id: " + publicId); } if (systemId != null) { System.out.println(" system id: " + systemId); } result = resolver.resolveNotation(name, publicId, systemId); } else if (resType == Catalog.PUBLIC) { System.out.println("Resolve PUBLIC (publicid, systemid):"); if (publicId != null) { System.out.println(" public id: " + publicId); } if (systemId != null) { System.out.println(" system id: " + systemId); } result = resolver.resolvePublic(publicId, systemId); } else if (resType == Catalog.SYSTEM) { System.out.println("Resolve SYSTEM (systemid):"); if (systemId != null) { System.out.println(" system id: " + systemId); } result = resolver.resolveSystem(systemId); } else if (resType == Catalog.URI) { System.out.println("Resolve URI (uri):"); if (uri != null) { System.out.println(" uri: " + uri); } result = resolver.resolveURI(uri); } else { System.out.println("resType is wrong!? This can't happen!"); usage(); } System.out.println("Result: " + result); } public static void usage() { System.out.println("Usage: resolver [options] keyword"); System.out.println(""); System.out.println("Where:"); System.out.println(""); System.out.println("-c catalogfile Loads a particular catalog file."); System.out.println("-n name Sets the name."); System.out.println("-p publicId Sets the public identifier."); System.out.println("-s systemId Sets the system identifier."); System.out.println("-a Makes the system URI absolute before resolution"); System.out.println("-u uri Sets the URI."); System.out.println("-d integer Set the debug level."); System.out.println("keyword Identifies the type of resolution to perform:"); System.out.println(" doctype, document, entity, notation, public, system,"); System.out.println(" or uri."); System.exit(1); } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/apps/xparse.java100644 0 0 15276 10530407252 23214 0ustar 0 0 // xparse.java - A simple command-line XML parser /* * 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.xml.resolver.apps; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Vector; import java.util.Date; import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.parsers.*; import org.apache.xml.resolver.tools.ResolvingParser; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogManager; import org.apache.xml.resolver.helpers.Debug; /** * A simple command-line XML parsing application. * *

This class implements a simple command-line XML Parser. It's * just a little wrapper around the JAXP Parser with support for * catalogs. *

* *

Usage: xparse [options] document.xml

* *

Where:

* *
*
-c catalogfile
*
Load a particular catalog file.
*
-w
*
Perform a well-formed parse, not a validating parse.
*
-v (the default)
*
Perform a validating parse.
*
-n
*
Perform a namespace-ignorant parse.
*
-N (the default)
*
Perform a namespace-aware parse.
*
-d integer
*
Set the debug level. Warnings are shown if the debug level * is > 2.
*
-E integer
*
Set the maximum number of errors to display.
*
* *

The process ends with error-level 1, if there errors.

* * @deprecated This interface has been replaced by the * {@link org.apache.xml.resolver.tools.ResolvingXMLReader} for SAX2. * * @see org.apache.xml.resolver.tools.ResolvingParser * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class xparse { private static Debug debug = CatalogManager.getStaticManager().debug; /** The main entry point */ public static void main (String[] args) throws FileNotFoundException, IOException { String xmlfile = null; int debuglevel = 0; int maxErrs = 10; boolean nsAware = true; boolean validating = true; boolean showWarnings = (debuglevel > 2); boolean showErrors = true; Vector catalogFiles = new Vector(); for (int i=0; i= 0) { debug.setDebug(debuglevel); showWarnings = (debuglevel > 2); } } catch (Exception e) { // nop } continue; } if (args[i].equals("-E")) { ++i; String errstr = args[i]; try { int errs = Integer.parseInt(errstr); if (errs >= 0) { maxErrs = errs; } } catch (Exception e) { // nop } continue; } xmlfile = args[i]; } if (xmlfile == null) { System.out.println("Usage: org.apache.xml.resolver.apps.xparse [opts] xmlfile"); System.exit(1); } ResolvingParser.validating = validating; ResolvingParser.namespaceAware = nsAware; ResolvingParser reader = new ResolvingParser(); Catalog catalog = reader.getCatalog(); for (int count = 0; count < catalogFiles.size(); count++) { String file = (String) catalogFiles.elementAt(count); catalog.parseCatalog(file); } XParseError xpe = new XParseError(showErrors, showWarnings); xpe.setMaxMessages(maxErrs); reader.setErrorHandler(xpe); String parseType = validating ? "validating" : "well-formed"; String nsType = nsAware ? "namespace-aware" : "namespace-ignorant"; if (maxErrs > 0) { System.out.println("Attempting " + parseType + ", " + nsType + " parse"); } Date startTime = new Date(); try { reader.parse(xmlfile); } catch (SAXException sx) { System.out.println("SAX Exception: " + sx); } catch (Exception e) { e.printStackTrace(); } Date endTime = new Date(); long millisec = endTime.getTime() - startTime.getTime(); long secs = 0; long mins = 0; long hours = 0; if (millisec > 1000) { secs = millisec / 1000; millisec = millisec % 1000; } if (secs > 60) { mins = secs / 60; secs = secs % 60; } if (mins > 60) { hours = mins / 60; mins = mins % 60; } if (maxErrs > 0) { System.out.print("Parse "); if (xpe.getFatalCount() > 0) { System.out.print("failed "); } else { System.out.print("succeeded "); System.out.print("("); if (hours > 0) { System.out.print(hours + ":"); } if (hours > 0 || mins > 0) { System.out.print(mins + ":"); } System.out.print(secs + "." + millisec); System.out.print(") "); } System.out.print("with "); int errCount = xpe.getErrorCount(); int warnCount = xpe.getWarningCount(); if (errCount > 0) { System.out.print(errCount + " error"); System.out.print(errCount > 1 ? "s" : ""); System.out.print(" and "); } else { System.out.print("no errors and "); } if (warnCount > 0) { System.out.print(warnCount + " warning"); System.out.print(warnCount > 1 ? "s" : ""); System.out.print("."); } else { System.out.print("no warnings."); } System.out.println(""); } if (xpe.getErrorCount() > 0) { System.exit(1); } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/apps/xread.java100644 0 0 15753 10530407252 23015 0ustar 0 0 // xread.java - A simple command-line XML parser /* * 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.xml.resolver.apps; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Vector; import java.util.Date; import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.parsers.*; import org.apache.xml.resolver.tools.ResolvingXMLReader; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogManager; import org.apache.xml.resolver.helpers.Debug; /** * A simple command-line XML parsing application. * *

This class implements a simple command-line XML Parser. It's * just a little wrapper around the JAXP XMLReader with support for * catalogs. *

* *

Usage: xread [options] document.xml

* *

Where:

* *
*
-c catalogfile
*
Load a particular catalog file.
*
-w
*
Perform a well-formed parse, not a validating parse.
*
-v (the default)
*
Perform a validating parse.
*
-s
*
Enable W3C XML Schema validation.
*
-n
*
Perform a namespace-ignorant parse.
*
-N (the default)
*
Perform a namespace-aware parse.
*
-d integer
*
Set the debug level. Warnings are shown if the debug level * is > 2.
*
-E integer
*
Set the maximum number of errors to display.
*
* *

The process ends with error-level 1, if there errors.

* * @see org.apache.xml.resolver.tools.ResolvingXMLReader * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class xread { private static Debug debug = CatalogManager.getStaticManager().debug; /** The main entry point */ public static void main (String[] args) throws FileNotFoundException, IOException { String xmlfile = null; int debuglevel = 0; int maxErrs = 10; boolean nsAware = true; boolean validating = true; boolean useSchema = false; boolean showWarnings = (debuglevel > 2); boolean showErrors = true; Vector catalogFiles = new Vector(); for (int i=0; i= 0) { debug.setDebug(debuglevel); showWarnings = (debuglevel > 2); } } catch (Exception e) { // nop } continue; } if (args[i].equals("-E")) { ++i; String errstr = args[i]; try { int errs = Integer.parseInt(errstr); if (errs >= 0) { maxErrs = errs; } } catch (Exception e) { // nop } continue; } xmlfile = args[i]; } if (xmlfile == null) { System.out.println("Usage: org.apache.xml.resolver.apps.xread [opts] xmlfile"); System.exit(1); } ResolvingXMLReader reader = new ResolvingXMLReader(); try { reader.setFeature("http://xml.org/sax/features/namespaces", nsAware); reader.setFeature("http://xml.org/sax/features/validation", validating); if (useSchema) { reader.setFeature("http://apache.org/xml/features/validation/schema", true); } } catch (SAXException e) { // nop; } Catalog catalog = reader.getCatalog(); for (int count = 0; count < catalogFiles.size(); count++) { String file = (String) catalogFiles.elementAt(count); catalog.parseCatalog(file); } XParseError xpe = new XParseError(showErrors, showWarnings); xpe.setMaxMessages(maxErrs); reader.setErrorHandler(xpe); String parseType = validating ? "validating" : "well-formed"; String nsType = nsAware ? "namespace-aware" : "namespace-ignorant"; if (maxErrs > 0) { System.out.println("Attempting " + parseType + ", " + nsType + " parse"); } Date startTime = new Date(); try { reader.parse(xmlfile); } catch (SAXException sx) { System.out.println("SAX Exception: " + sx); } catch (Exception e) { e.printStackTrace(); } Date endTime = new Date(); long millisec = endTime.getTime() - startTime.getTime(); long secs = 0; long mins = 0; long hours = 0; if (millisec > 1000) { secs = millisec / 1000; millisec = millisec % 1000; } if (secs > 60) { mins = secs / 60; secs = secs % 60; } if (mins > 60) { hours = mins / 60; mins = mins % 60; } if (maxErrs > 0) { System.out.print("Parse "); if (xpe.getFatalCount() > 0) { System.out.print("failed "); } else { System.out.print("succeeded "); System.out.print("("); if (hours > 0) { System.out.print(hours + ":"); } if (hours > 0 || mins > 0) { System.out.print(mins + ":"); } System.out.print(secs + "." + millisec); System.out.print(") "); } System.out.print("with "); int errCount = xpe.getErrorCount(); int warnCount = xpe.getWarningCount(); if (errCount > 0) { System.out.print(errCount + " error"); System.out.print(errCount > 1 ? "s" : ""); System.out.print(" and "); } else { System.out.print("no errors and "); } if (warnCount > 0) { System.out.print(warnCount + " warning"); System.out.print(warnCount > 1 ? "s" : ""); System.out.print("."); } else { System.out.print("no warnings."); } System.out.println(""); } if (xpe.getErrorCount() > 0) { System.exit(1); } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/helpers/BootstrapResolver.java100644 0 0 15271 10530407252 26103 0ustar 0 0 // BootstrapResolver.java - Resolve entities and URIs internally /* * 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.xml.resolver.helpers; import java.util.Hashtable; import java.net.URL; import java.net.MalformedURLException; import java.io.InputStream; import javax.xml.transform.URIResolver; import javax.xml.transform.Source; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.TransformerException; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; /** * A simple bootstrapping resolver. * *

This class is used as the entity resolver when reading XML Catalogs. * It searches for the OASIS XML Catalog DTD, Relax NG Grammar and W3C XML Schema * as resources (e.g., in the resolver jar file).

* *

If you have your own DTDs or schemas, you can extend this class and * set the BootstrapResolver in your CatalogManager.

* * @see org.apache.xml.resolver.CatalogManager * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class BootstrapResolver implements EntityResolver, URIResolver { /** URI of the W3C XML Schema for OASIS XML Catalog files. */ public static final String xmlCatalogXSD = "http://www.oasis-open.org/committees/entity/release/1.0/catalog.xsd"; /** URI of the RELAX NG Grammar for OASIS XML Catalog files. */ public static final String xmlCatalogRNG = "http://www.oasis-open.org/committees/entity/release/1.0/catalog.rng"; /** Public identifier for OASIS XML Catalog files. */ public static final String xmlCatalogPubId = "-//OASIS//DTD XML Catalogs V1.0//EN"; /** System identifier for OASIS XML Catalog files. */ public static final String xmlCatalogSysId = "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"; /** Public identifier for legacy Apache XCatalog files. There is no official system identifier for XCatalog files. */ public static final String xCatalogPubId = "-//DTD XCatalog//EN"; /** Private hash used for public identifiers. */ private Hashtable publicMap = new Hashtable(); /** Private hash used for system identifiers. */ private Hashtable systemMap = new Hashtable(); /** Private hash used for URIs. */ private Hashtable uriMap = new Hashtable(); /** Constructor. */ public BootstrapResolver() { URL url = this.getClass().getResource("/org/apache/xml/resolver/etc/catalog.dtd"); if (url != null) { publicMap.put(xmlCatalogPubId, url.toString()); systemMap.put(xmlCatalogSysId, url.toString()); } url = this.getClass().getResource("/org/apache/xml/resolver/etc/catalog.rng"); if (url != null) { uriMap.put(xmlCatalogRNG, url.toString()); } url = this.getClass().getResource("/org/apache/xml/resolver/etc/catalog.xsd"); if (url != null) { uriMap.put(xmlCatalogXSD, url.toString()); } url = this.getClass().getResource("/org/apache/xml/resolver/etc/xcatalog.dtd"); if (url != null) { publicMap.put(xCatalogPubId, url.toString()); } } /** SAX resolveEntity API. */ public InputSource resolveEntity (String publicId, String systemId) { String resolved = null; if (systemId != null && systemMap.containsKey(systemId)) { resolved = (String) systemMap.get(systemId); } else if (publicId != null && publicMap.containsKey(publicId)) { resolved = (String) publicMap.get(publicId); } if (resolved != null) { try { InputSource iSource = new InputSource(resolved); iSource.setPublicId(publicId); // Ideally this method would not attempt to open the // InputStream, but there is a bug (in Xerces, at least) // that causes the parser to mistakenly open the wrong // system identifier if the returned InputSource does // not have a byteStream. // // It could be argued that we still shouldn't do this here, // but since the purpose of calling the entityResolver is // almost certainly to open the input stream, it seems to // do little harm. // URL url = new URL(resolved); InputStream iStream = url.openStream(); iSource.setByteStream(iStream); return iSource; } catch (Exception e) { // FIXME: silently fail? return null; } } return null; } /** Transformer resolve API. */ public Source resolve(String href, String base) throws TransformerException { String uri = href; String fragment = null; int hashPos = href.indexOf("#"); if (hashPos >= 0) { uri = href.substring(0, hashPos); fragment = href.substring(hashPos+1); } String result = null; if (href != null && uriMap.containsKey(href)) { result = (String) uriMap.get(href); } if (result == null) { try { URL url = null; if (base==null) { url = new URL(uri); result = url.toString(); } else { URL baseURL = new URL(base); url = (href.length()==0 ? baseURL : new URL(baseURL, uri)); result = url.toString(); } } catch (java.net.MalformedURLException mue) { // try to make an absolute URI from the current base String absBase = makeAbsolute(base); if (!absBase.equals(base)) { // don't bother if the absBase isn't different! return resolve(href, absBase); } else { throw new TransformerException("Malformed URL " + href + "(base " + base + ")", mue); } } } SAXSource source = new SAXSource(); source.setInputSource(new InputSource(result)); return source; } /** Attempt to construct an absolute URI */ private String makeAbsolute(String uri) { if (uri == null) { uri = ""; } try { URL url = new URL(uri); return url.toString(); } catch (MalformedURLException mue) { try { URL fileURL = FileURL.makeURL(uri); return fileURL.toString(); } catch (MalformedURLException mue2) { // bail return uri; } } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/helpers/Debug.java100644 0 0 6455 10530407252 23416 0ustar 0 0 // Debug.java - Print debug messages /* * 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.xml.resolver.helpers; /** * Static debugging/messaging class for Catalogs. * *

This class defines a set of static methods that can be called * to produce debugging messages. Messages have an associated "debug * level" and messages below the current setting are not displayed.

* * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class Debug { /** The internal debug level. */ protected int debug = 0; /** Constructor */ public Debug() { // nop } /** Set the debug level for future messages. */ public void setDebug(int newDebug) { debug = newDebug; } /** Get the current debug level. */ public int getDebug() { return debug; } /** * Print debug message (if the debug level is high enough). * *

Prints "the message"

* * @param level The debug level of this message. This message * will only be * displayed if the current debug level is at least equal to this * value. * @param message The text of the message. */ public void message(int level, String message) { if (debug >= level) { System.out.println(message); } } /** * Print debug message (if the debug level is high enough). * *

Prints "the message: spec"

* * @param level The debug level of this message. This message * will only be * displayed if the current debug level is at least equal to this * value. * @param message The text of the message. * @param spec An argument to the message. */ public void message(int level, String message, String spec) { if (debug >= level) { System.out.println(message + ": " + spec); } } /** * Print debug message (if the debug level is high enough). * *

Prints "the message: spec1" and "spec2" indented on the next line.

* * @param level The debug level of this message. This message * will only be * displayed if the current debug level is at least equal to this * value. * @param message The text of the message. * @param spec1 An argument to the message. * @param spec2 Another argument to the message. */ public void message(int level, String message, String spec1, String spec2) { if (debug >= level) { System.out.println(message + ": " + spec1); System.out.println("\t" + spec2); } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/helpers/FileURL.java100644 0 0 5644 10530407252 23631 0ustar 0 0 // FileURL.java - Construct a file: scheme URL /* * 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.xml.resolver.helpers; import java.net.URL; import java.net.MalformedURLException; /** * Static method for dealing with file: URLs. * *

This class defines a static method that can be used to construct * an appropriate file: URL from parts. It's defined here so that it * can be reused throught the resolver.

* *

(Yes, I'd rather have called this class FileURI, but * given that a jave.net.URL is returned, it seemed...even more * confusing.)

* * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public abstract class FileURL { protected FileURL() { } /** * Construct a file: URL for a path name. * *

URLs in the file: scheme can be constructed for paths on * the local file system. Several possibilities need to be considered: *

* *
    *
  • If the path does not begin with a slash, then it is assumed * to reside in the users current working directory * (System.getProperty("user.dir")).
  • *
  • On Windows machines, the current working directory uses * backslashes (\\, instead of /).
  • *
  • If the current working directory is "/", don't add an extra * slash before the base name.
  • *
* *

This method is declared static so that other classes * can use it directly.

* * @param pathname The path name component for which to construct a URL. * * @return The appropriate file: URL. * * @throws MalformedURLException if the pathname can't be turned into * a proper URL. */ public static URL makeURL(String pathname) throws MalformedURLException { if (pathname.startsWith("/")) { return new URL("file://" + pathname); } String userdir = System.getProperty("user.dir"); userdir = userdir.replace('\\', '/'); if (userdir.endsWith("/")) { return new URL("file:///" + userdir + pathname); } else { return new URL("file:///" + userdir + "/" + pathname); } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/helpers/Namespaces.java100644 0 0 6616 10530407252 24446 0ustar 0 0 // Namespaces.java - Analyze namespace nodes in a DOM tree /* * 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.xml.resolver.helpers; import org.w3c.dom.*; /** * Static Namespace query methods. * *

This class defines a set of static methods that can be called * to analyze the namespace properties of DOM nodes.

* * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class Namespaces { /** * Returns the "prefix" part of a QName or the empty string (not * null) if the name has no prefix. * * @param element The QName of an element. * @return The prefix part of the element name. */ public static String getPrefix(Element element) { String name = element.getTagName(); String prefix = ""; if (name.indexOf(':') > 0) { prefix = name.substring(0, name.indexOf(':')); } return prefix; } /** * Returns the "localname" part of a QName, which is the whole * name if it has no prefix. * * @param element The QName of an element. * @return The local part of a QName. */ public static String getLocalName(Element element) { String name = element.getTagName(); if (name.indexOf(':') > 0) { name = name.substring(name.indexOf(':')+1); } return name; } /** * Returns the namespace URI for the specified prefix at the * specified context node. * * @param node The context node. * @param prefix The prefix. * @return The namespace URI associated with the prefix, or * null if no namespace declaration exists for the prefix. */ public static String getNamespaceURI(Node node, String prefix) { if (node == null || node.getNodeType() != Node.ELEMENT_NODE) { return null; } if (prefix.equals("")) { if (((Element) node).hasAttribute("xmlns")) { return ((Element) node).getAttribute("xmlns"); } } else { String nsattr = "xmlns:" + prefix; if (((Element) node).hasAttribute(nsattr)) { return ((Element) node).getAttribute(nsattr); } } return getNamespaceURI(node.getParentNode(), prefix); } /** * Returns the namespace URI for the namespace to which the * element belongs. * * @param element The element. * @return The namespace URI associated with the namespace of the * element, or null if no namespace declaration exists for it. */ public static String getNamespaceURI(Element element) { String prefix = getPrefix(element); return getNamespaceURI(element, prefix); } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/helpers/PublicId.java100644 0 0 11736 10530407252 24101 0ustar 0 0 // PublicId.java - Information about public identifiers /* * 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.xml.resolver.helpers; /** * Static methods for dealing with public identifiers. * *

This class defines a set of static methods that can be called * to handle public identifiers.

* * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public abstract class PublicId { protected PublicId() { } /** * Normalize a public identifier. * *

Public identifiers must be normalized according to the following * rules before comparisons between them can be made:

* *
    *
  • Whitespace characters are normalized to spaces (e.g., line feeds, * tabs, etc. become spaces).
  • *
  • Leading and trailing whitespace is removed.
  • *
  • Multiple internal whitespaces are normalized to a single * space.
  • *
* *

This method is declared static so that other classes * can use it directly.

* * @param publicId The unnormalized public identifier. * * @return The normalized identifier. */ public static String normalize(String publicId) { String normal = publicId.replace('\t', ' '); normal = normal.replace('\r', ' '); normal = normal.replace('\n', ' '); normal = normal.trim(); int pos; while ((pos = normal.indexOf(" ")) >= 0) { normal = normal.substring(0, pos) + normal.substring(pos+1); } return normal; } /** * Encode a public identifier as a "publicid" URN. * *

This method is declared static so that other classes * can use it directly.

* * @param publicId The unnormalized public identifier. * * @return The normalized identifier. */ public static String encodeURN(String publicId) { String urn = PublicId.normalize(publicId); urn = PublicId.stringReplace(urn, "%", "%25"); urn = PublicId.stringReplace(urn, ";", "%3B"); urn = PublicId.stringReplace(urn, "'", "%27"); urn = PublicId.stringReplace(urn, "?", "%3F"); urn = PublicId.stringReplace(urn, "#", "%23"); urn = PublicId.stringReplace(urn, "+", "%2B"); urn = PublicId.stringReplace(urn, " ", "+"); urn = PublicId.stringReplace(urn, "::", ";"); urn = PublicId.stringReplace(urn, ":", "%3A"); urn = PublicId.stringReplace(urn, "//", ":"); urn = PublicId.stringReplace(urn, "/", "%2F"); return "urn:publicid:" + urn; } /** * Decode a "publicid" URN into a public identifier. * *

This method is declared static so that other classes * can use it directly.

* * @param urn The urn:publicid: URN * * @return The normalized identifier. */ public static String decodeURN(String urn) { String publicId = ""; if (urn.startsWith("urn:publicid:")) { publicId = urn.substring(13); } else { return urn; } publicId = PublicId.stringReplace(publicId, "%2F", "/"); publicId = PublicId.stringReplace(publicId, ":", "//"); publicId = PublicId.stringReplace(publicId, "%3A", ":"); publicId = PublicId.stringReplace(publicId, ";", "::"); publicId = PublicId.stringReplace(publicId, "+", " "); publicId = PublicId.stringReplace(publicId, "%2B", "+"); publicId = PublicId.stringReplace(publicId, "%23", "#"); publicId = PublicId.stringReplace(publicId, "%3F", "?"); publicId = PublicId.stringReplace(publicId, "%27", "'"); publicId = PublicId.stringReplace(publicId, "%3B", ";"); publicId = PublicId.stringReplace(publicId, "%25", "%"); return publicId; } /** * Replace one string with another. * */ private static String stringReplace(String str, String oldStr, String newStr) { String result = ""; int pos = str.indexOf(oldStr); // System.out.println(str + ": " + oldStr + " => " + newStr); while (pos >= 0) { // System.out.println(str + " (" + pos + ")"); result += str.substring(0, pos); result += newStr; str = str.substring(pos+1); pos = str.indexOf(oldStr); } return result + str; } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/helpers/package.html100644 0 0 2076 10530407252 24001 0ustar 0 0 Apache XML Commons Resolver Helpers package

Apache XML Commons Resolver Helpers package.

This package provides a collection of static helper functions used across a number of different classes.

xml-commons-resolver-1.2/src/org/apache/xml/resolver/overview.html100644 0 0 4070 10530407252 22606 0ustar 0 0 Apache XML Common Resolver

The Apache XML Commons Resolver classes implement Catalog-based entity and URI resolution.

Overview

The resolver class implements the full semantics of OASIS Technical Resolution 9401:1997 (Amendment 2 to TR 9401) catalogs and the 06 Aug 2001 Committee Specification of OASIS XML Catalogs.

It also includes a framework of classes designed to read catalog files in a number of formats:

  1. The plain-text flavor described by TR9401.
  2. The XCatalog XML format defined by John Cowan
  3. The XML Catalog format defined by the OASIS Entity Resolution Technical Committee.

Quick Start

The tools classes provide "out-of-the-box" SAX1 Parser, SAX2 XMLReader, and JAXP URIResolvers. If you're just interested in hooking a parser or URI resolver into your application, this is the place to start.

xml-commons-resolver-1.2/src/org/apache/xml/resolver/package.html100644 0 0 3756 10530407252 22345 0ustar 0 0 Apache XML Commons Resolver package

Apache XML Commons Resolver package.

The classes in this package implement the full semantics of OASIS Technical Resolution 9401:1997 (Amendment 2 to TR 9401) catalogs. Also included are a framework of classes designed to read catalog files in a number of formats.

The principal classes in this package are:

  • Catalog, implements the semantics of OASIS Catalogs.
  • Resolver, demonstrates how the semantics of OASIS Catalogs can be extended with these classes.
  • CatalogManager, interfaces with the Catalog properties file (that controls the default values of certain properties).
  • TR9401CatalogReader, reads plain text TR9401 catalog files
  • OASISXMLCatalogReader, reads OASIS XML Catalogs (as defined in the 2001-08-01 committee draft)
  • XCatalogReader, reads John Cowan's XCatalog files
xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/CatalogReader.java100644 0 0 5732 10530407252 25045 0ustar 0 0 // CatalogReader.java - An interface for reading catalog files /* * 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.xml.resolver.readers; import java.io.IOException; import java.net.MalformedURLException; import org.apache.xml.resolver.CatalogException; import java.io.InputStream; import org.apache.xml.resolver.Catalog; /** * The CatalogReader interface. * *

The Catalog class requires that classes implement this interface * in order to be used to read catalogs. Examples of CatalogReaders * include the TextCatalogReader, the SAXCatalogReader, and the * DOMCatalogReader.

* * @see Catalog * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public interface CatalogReader { /** * Read a catalog from a file. * *

This class reads a catalog from a URL.

* * @param catalog The catalog for which this reader is called. * @param fileUrl The URL of a document to be read. * @throws MalformedURLException if the specified URL cannot be * turned into a URL object. * @throws IOException if the URL cannot be read. * @throws UnknownCatalogFormatException if the catalog format is * not recognized. * @throws UnparseableCatalogException if the catalog cannot be parsed. * (For example, if it is supposed to be XML and isn't well-formed.) */ public void readCatalog(Catalog catalog, String fileUrl) throws MalformedURLException, IOException, CatalogException; /** * Read a catalog from an input stream. * *

This class reads a catalog from an input stream.

* * @param catalog The catalog for which this reader is called. * @param is The input stream that is to be read. * @throws IOException if the URL cannot be read. * @throws UnknownCatalogFormatException if the catalog format is * not recognized. * @throws UnparseableCatalogException if the catalog cannot be parsed. * (For example, if it is supposed to be XML and isn't well-formed.) */ public void readCatalog(Catalog catalog, InputStream is) throws IOException, CatalogException; } xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/DOMCatalogParser.java100644 0 0 3364 10530407252 25436 0ustar 0 0 // DOMCatalogParser.java - An interface for reading catalog files /* * 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.xml.resolver.readers; import org.apache.xml.resolver.Catalog; import org.w3c.dom.Node; /** * The DOMCatalogParser interface. * *

This interface must be implemented in order for a class to * participate as a parser for the DOMCatalogReader. * * @see Catalog * @see DOMCatalogReader * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public interface DOMCatalogParser { /** * Parse a DOM node as a catalog entry. * *

This method is expected to analyze the specified node and * construct appropriate catalog entry(ies) from it.

* * @param catalog The catalog for which this node is being considered. * @param node The DOM Node from the catalog. */ public void parseCatalogEntry(Catalog catalog, Node node); } xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/DOMCatalogReader.java100644 0 0 21646 10530407252 25427 0ustar 0 0 // DOMCatalogReader.java - Read XML Catalog files /* * 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.xml.resolver.readers; import java.util.Hashtable; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.net.MalformedURLException; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.ParserConfigurationException; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogException; import org.apache.xml.resolver.readers.CatalogReader; import org.apache.xml.resolver.helpers.Namespaces; import org.xml.sax.SAXException; import org.w3c.dom.*; /** * A DOM-based CatalogReader. * *

This class is used to read XML Catalogs using the DOM. This reader * has an advantage over the SAX-based reader that it can analyze the * DOM tree rather than simply a series of SAX events. It has the disadvantage * that it requires all of the code necessary to build and walk a DOM * tree.

* *

Since the choice of CatalogReaders (in the InputStream case) can only * be made on the basis of MIME type, the following problem occurs: only * one CatalogReader can exist for all XML mime types. In order to get * around this problem, the DOMCatalogReader relies on a set of external * CatalogParsers to actually build the catalog.

* *

The selection of CatalogParsers is made on the basis of the QName * of the root element of the document.

* *

This class requires the Java API for XML Parsing.

* * @see Catalog * @see CatalogReader * @see SAXCatalogReader * @see TextCatalogReader * @see DOMCatalogParser * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class DOMCatalogReader implements CatalogReader { /** * Mapping table from QNames to CatalogParser classes. * *

Each key in this hash table has the form "elementname" * or "{namespaceuri}elementname". The former is used if the * namespace URI is null.

*/ protected Hashtable namespaceMap = new Hashtable(); /** * Add a new parser to the reader. * *

This method associates the specified parserClass with the * namespaceURI/rootElement names specified.

* * @param namespaceURI The namespace URI. Not the prefix. * @param rootElement The name of the root element. * @param parserClass The name of the parserClass to instantiate * for this kind of catalog. */ public void setCatalogParser(String namespaceURI, String rootElement, String parserClass) { if (namespaceURI == null) { namespaceMap.put(rootElement, parserClass); } else { namespaceMap.put("{"+namespaceURI+"}"+rootElement, parserClass); } } /** * Get the name of the parser class for a given catalog type. * *

This method returns the parserClass associated with the * namespaceURI/rootElement names specified.

* * @param namespaceURI The namespace URI. Not the prefix. * @param rootElement The name of the root element. * @return The parser class. */ public String getCatalogParser(String namespaceURI, String rootElement) { if (namespaceURI == null) { return (String) namespaceMap.get(rootElement); } else { return (String) namespaceMap.get("{"+namespaceURI+"}"+rootElement); } } /** * Null constructor; something for subclasses to call. */ public DOMCatalogReader() { } /** * Read a catalog from an input stream. * *

This class reads a catalog from an input stream:

* *
    *
  • Based on the QName of the root element, it determines which * parser to instantiate for this catalog.
  • *
  • It constructs a DOM Document from the catalog and
  • *
  • For each child of the root node, it calls the parser's * parseCatalogEntry method. This method is expected to make * appropriate calls back into the catalog to add entries for the * entries in the catalog. It is free to do this in whatever manner * is appropriate (perhaps using just the node passed in, perhaps * wandering arbitrarily throughout the tree).
  • *
* * @param catalog The catalog for which this reader is called. * @param is The input stream that is to be read. * @throws IOException if the URL cannot be read. * @throws UnknownCatalogFormatException if the catalog format is * not recognized. * @throws UnparseableCatalogException if the catalog cannot be parsed. * (For example, if it is supposed to be XML and isn't well-formed or * if the parser class cannot be instantiated.) */ public void readCatalog(Catalog catalog, InputStream is) throws IOException, CatalogException { DocumentBuilderFactory factory = null; DocumentBuilder builder = null; factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(false); factory.setValidating(false); try { builder = factory.newDocumentBuilder(); } catch (ParserConfigurationException pce) { throw new CatalogException(CatalogException.UNPARSEABLE); } Document doc = null; try { doc = builder.parse(is); } catch (SAXException se) { throw new CatalogException(CatalogException.UNKNOWN_FORMAT); } Element root = doc.getDocumentElement(); String namespaceURI = Namespaces.getNamespaceURI(root); String localName = Namespaces.getLocalName(root); String domParserClass = getCatalogParser(namespaceURI, localName); if (domParserClass == null) { if (namespaceURI == null) { catalog.getCatalogManager().debug.message(1, "No Catalog parser for " + localName); } else { catalog.getCatalogManager().debug.message(1, "No Catalog parser for " + "{" + namespaceURI + "}" + localName); } return; } DOMCatalogParser domParser = null; try { domParser = (DOMCatalogParser) Class.forName(domParserClass).newInstance(); } catch (ClassNotFoundException cnfe) { catalog.getCatalogManager().debug.message(1, "Cannot load XML Catalog Parser class", domParserClass); throw new CatalogException(CatalogException.UNPARSEABLE); } catch (InstantiationException ie) { catalog.getCatalogManager().debug.message(1, "Cannot instantiate XML Catalog Parser class", domParserClass); throw new CatalogException(CatalogException.UNPARSEABLE); } catch (IllegalAccessException iae) { catalog.getCatalogManager().debug.message(1, "Cannot access XML Catalog Parser class", domParserClass); throw new CatalogException(CatalogException.UNPARSEABLE); } catch (ClassCastException cce ) { catalog.getCatalogManager().debug.message(1, "Cannot cast XML Catalog Parser class", domParserClass); throw new CatalogException(CatalogException.UNPARSEABLE); } Node node = root.getFirstChild(); while (node != null) { domParser.parseCatalogEntry(catalog, node); node = node.getNextSibling(); } } /** * Read the catalog behind the specified URL. * * @see #readCatalog(Catalog, InputStream) * * @param catalog The catalog for which we are reading. * @param fileUrl The URL of the document that should be read. * * @throws MalformedURLException if the specified URL cannot be * turned into a URL object. * @throws IOException if the URL cannot be read. * @throws UnknownCatalogFormatException if the catalog format is * not recognized. * @throws UnparseableCatalogException if the catalog cannot be parsed. * (For example, if it is supposed to be XML and isn't well-formed.) */ public void readCatalog(Catalog catalog, String fileUrl) throws MalformedURLException, IOException, CatalogException { URL url = new URL(fileUrl); URLConnection urlCon = url.openConnection(); readCatalog(catalog, urlCon.getInputStream()); } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/ExtendedXMLCatalogReader.java100644 0 0 13543 10530407252 27126 0ustar 0 0 // ExtendedXMLCatalogReader.java - Read XML Catalog files /* * 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.xml.resolver.readers; import java.util.Vector; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.Resolver; import org.apache.xml.resolver.CatalogEntry; import org.apache.xml.resolver.CatalogException; import org.xml.sax.*; import org.w3c.dom.*; /** * Parse Extended OASIS Entity Resolution Technical Committee * XML Catalog files. * * @see Catalog * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class ExtendedXMLCatalogReader extends OASISXMLCatalogReader { /** The namespace name of extended catalog elements */ public static final String extendedNamespaceName = "http://nwalsh.com/xcatalog/1.0"; /** * The SAX startElement method recognizes elements * from the plain catalog format and instantiates CatalogEntry * objects for them. * * @param namespaceURI The namespace name of the element. * @param localName The local name of the element. * @param qName The QName of the element. * @param atts The list of attributes on the element. * * @see CatalogEntry */ public void startElement (String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { // Check before calling the super because super will report our // namespace as an extension namespace, but that doesn't count // for this element. boolean inExtension = inExtensionNamespace(); super.startElement(namespaceURI, localName, qName, atts); int entryType = -1; Vector entryArgs = new Vector(); if (namespaceURI != null && extendedNamespaceName.equals(namespaceURI) && !inExtension) { // This is an Extended XML Catalog entry if (atts.getValue("xml:base") != null) { String baseURI = atts.getValue("xml:base"); entryType = Catalog.BASE; entryArgs.add(baseURI); baseURIStack.push(baseURI); debug.message(4, "xml:base", baseURI); try { CatalogEntry ce = new CatalogEntry(entryType, entryArgs); catalog.addEntry(ce); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { debug.message(1, "Invalid catalog entry type", localName); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { debug.message(1, "Invalid catalog entry (base)", localName); } } entryType = -1; entryArgs = new Vector(); } else { baseURIStack.push(baseURIStack.peek()); } if (localName.equals("uriSuffix")) { if (checkAttributes(atts, "suffix", "uri")) { entryType = Resolver.URISUFFIX; entryArgs.add(atts.getValue("suffix")); entryArgs.add(atts.getValue("uri")); debug.message(4, "uriSuffix", atts.getValue("suffix"), atts.getValue("uri")); } } else if (localName.equals("systemSuffix")) { if (checkAttributes(atts, "suffix", "uri")) { entryType = Resolver.SYSTEMSUFFIX; entryArgs.add(atts.getValue("suffix")); entryArgs.add(atts.getValue("uri")); debug.message(4, "systemSuffix", atts.getValue("suffix"), atts.getValue("uri")); } } else { // This is equivalent to an invalid catalog entry type debug.message(1, "Invalid catalog entry type", localName); } if (entryType >= 0) { try { CatalogEntry ce = new CatalogEntry(entryType, entryArgs); catalog.addEntry(ce); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { debug.message(1, "Invalid catalog entry type", localName); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { debug.message(1, "Invalid catalog entry", localName); } } } } } /** The SAX endElement method does nothing. */ public void endElement (String namespaceURI, String localName, String qName) throws SAXException { super.endElement(namespaceURI, localName, qName); // Check after popping the stack so we don't erroneously think we // are our own extension namespace... boolean inExtension = inExtensionNamespace(); int entryType = -1; Vector entryArgs = new Vector(); if (namespaceURI != null && (extendedNamespaceName.equals(namespaceURI)) && !inExtension) { String popURI = (String) baseURIStack.pop(); String baseURI = (String) baseURIStack.peek(); if (!baseURI.equals(popURI)) { entryType = catalog.BASE; entryArgs.add(baseURI); debug.message(4, "(reset) xml:base", baseURI); try { CatalogEntry ce = new CatalogEntry(entryType, entryArgs); catalog.addEntry(ce); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { debug.message(1, "Invalid catalog entry type", localName); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { debug.message(1, "Invalid catalog entry (rbase)", localName); } } } } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/OASISXMLCatalogReader.java100644 0 0 41767 10530407252 26255 0ustar 0 0 // OASISXMLCatalogReader.java - Read XML Catalog files /* * 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.xml.resolver.readers; import java.util.Stack; import java.util.Vector; import java.util.Enumeration; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogEntry; import org.apache.xml.resolver.CatalogException; import org.apache.xml.resolver.helpers.PublicId; import org.xml.sax.*; import javax.xml.parsers.*; /** * Parse OASIS Entity Resolution Technical Committee * XML Catalog files. * * @see Catalog * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class OASISXMLCatalogReader extends SAXCatalogReader implements SAXCatalogParser { /** The catalog object needs to be stored by the object so that * SAX callbacks can use it. */ protected Catalog catalog = null; /** The namespace name of OASIS ERTC catalogs */ public static final String namespaceName = "urn:oasis:names:tc:entity:xmlns:xml:catalog"; /** The namespace name of OASIS ERTC TR9401 catalog extension */ public static final String tr9401NamespaceName = "urn:oasis:names:tc:entity:xmlns:tr9401:catalog"; protected Stack baseURIStack = new Stack(); protected Stack overrideStack = new Stack(); protected Stack namespaceStack = new Stack(); /** Set the current catalog. */ public void setCatalog (Catalog catalog) { this.catalog = catalog; debug = catalog.getCatalogManager().debug; } /** Get the current catalog. */ public Catalog getCatalog () { return catalog; } /** Default constructor */ public OASISXMLCatalogReader() { super(); } /** Constructor allowing for providing custom SAX parser factory */ public OASISXMLCatalogReader(SAXParserFactory parserFactory, Catalog catalog) { super(parserFactory); setCatalog(catalog); } /** * Are we in an extension namespace? * * @return true if the current stack of open namespaces includes * an extension namespace. */ protected boolean inExtensionNamespace() { boolean inExtension = false; Enumeration elements = namespaceStack.elements(); while (!inExtension && elements.hasMoreElements()) { String ns = (String) elements.nextElement(); if (ns == null) { inExtension = true; } else { inExtension = (!ns.equals(tr9401NamespaceName) && !ns.equals(namespaceName)); } } return inExtension; } // ---------------------------------------------------------------------- // Implement the SAX ContentHandler interface /** The SAX setDocumentLocator method does nothing. */ public void setDocumentLocator (Locator locator) { return; } /** The SAX startDocument */ public void startDocument () throws SAXException { baseURIStack.push(catalog.getCurrentBase()); overrideStack.push(catalog.getDefaultOverride()); return; } /** The SAX endDocument method does nothing. */ public void endDocument () throws SAXException { return; } /** * The SAX startElement method recognizes elements * from the plain catalog format and instantiates CatalogEntry * objects for them. * * @param namespaceURI The namespace name of the element. * @param localName The local name of the element. * @param qName The QName of the element. * @param atts The list of attributes on the element. * * @see CatalogEntry */ public void startElement (String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { int entryType = -1; Vector entryArgs = new Vector(); namespaceStack.push(namespaceURI); boolean inExtension = inExtensionNamespace(); if (namespaceURI != null && namespaceName.equals(namespaceURI) && !inExtension) { // This is an XML Catalog entry if (atts.getValue("xml:base") != null) { String baseURI = atts.getValue("xml:base"); entryType = Catalog.BASE; entryArgs.add(baseURI); baseURIStack.push(baseURI); debug.message(4, "xml:base", baseURI); try { CatalogEntry ce = new CatalogEntry(entryType, entryArgs); catalog.addEntry(ce); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { debug.message(1, "Invalid catalog entry type", localName); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { debug.message(1, "Invalid catalog entry (base)", localName); } } entryType = -1; entryArgs = new Vector(); } else { baseURIStack.push(baseURIStack.peek()); } if ((localName.equals("catalog") || localName.equals("group")) && atts.getValue("prefer") != null) { String override = atts.getValue("prefer"); if (override.equals("public")) { override = "yes"; } else if (override.equals("system")) { override = "no"; } else { debug.message(1, "Invalid prefer: must be 'system' or 'public'", localName); override = catalog.getDefaultOverride(); } entryType = Catalog.OVERRIDE; entryArgs.add(override); overrideStack.push(override); debug.message(4, "override", override); try { CatalogEntry ce = new CatalogEntry(entryType, entryArgs); catalog.addEntry(ce); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { debug.message(1, "Invalid catalog entry type", localName); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { debug.message(1, "Invalid catalog entry (override)", localName); } } entryType = -1; entryArgs = new Vector(); } else { overrideStack.push(overrideStack.peek()); } if (localName.equals("delegatePublic")) { if (checkAttributes(atts, "publicIdStartString", "catalog")) { entryType = Catalog.DELEGATE_PUBLIC; entryArgs.add(atts.getValue("publicIdStartString")); entryArgs.add(atts.getValue("catalog")); debug.message(4, "delegatePublic", PublicId.normalize(atts.getValue("publicIdStartString")), atts.getValue("catalog")); } } else if (localName.equals("delegateSystem")) { if (checkAttributes(atts, "systemIdStartString", "catalog")) { entryType = Catalog.DELEGATE_SYSTEM; entryArgs.add(atts.getValue("systemIdStartString")); entryArgs.add(atts.getValue("catalog")); debug.message(4, "delegateSystem", atts.getValue("systemIdStartString"), atts.getValue("catalog")); } } else if (localName.equals("delegateURI")) { if (checkAttributes(atts, "uriStartString", "catalog")) { entryType = Catalog.DELEGATE_URI; entryArgs.add(atts.getValue("uriStartString")); entryArgs.add(atts.getValue("catalog")); debug.message(4, "delegateURI", atts.getValue("uriStartString"), atts.getValue("catalog")); } } else if (localName.equals("rewriteSystem")) { if (checkAttributes(atts, "systemIdStartString", "rewritePrefix")) { entryType = Catalog.REWRITE_SYSTEM; entryArgs.add(atts.getValue("systemIdStartString")); entryArgs.add(atts.getValue("rewritePrefix")); debug.message(4, "rewriteSystem", atts.getValue("systemIdStartString"), atts.getValue("rewritePrefix")); } } else if (localName.equals("systemSuffix")) { if (checkAttributes(atts, "systemIdSuffix", "uri")) { entryType = Catalog.SYSTEM_SUFFIX; entryArgs.add(atts.getValue("systemIdSuffix")); entryArgs.add(atts.getValue("uri")); debug.message(4, "systemSuffix", atts.getValue("systemIdSuffix"), atts.getValue("uri")); } } else if (localName.equals("rewriteURI")) { if (checkAttributes(atts, "uriStartString", "rewritePrefix")) { entryType = Catalog.REWRITE_URI; entryArgs.add(atts.getValue("uriStartString")); entryArgs.add(atts.getValue("rewritePrefix")); debug.message(4, "rewriteURI", atts.getValue("uriStartString"), atts.getValue("rewritePrefix")); } } else if (localName.equals("uriSuffix")) { if (checkAttributes(atts, "uriSuffix", "uri")) { entryType = Catalog.URI_SUFFIX; entryArgs.add(atts.getValue("uriSuffix")); entryArgs.add(atts.getValue("uri")); debug.message(4, "uriSuffix", atts.getValue("uriSuffix"), atts.getValue("uri")); } } else if (localName.equals("nextCatalog")) { if (checkAttributes(atts, "catalog")) { entryType = Catalog.CATALOG; entryArgs.add(atts.getValue("catalog")); debug.message(4, "nextCatalog", atts.getValue("catalog")); } } else if (localName.equals("public")) { if (checkAttributes(atts, "publicId", "uri")) { entryType = Catalog.PUBLIC; entryArgs.add(atts.getValue("publicId")); entryArgs.add(atts.getValue("uri")); debug.message(4, "public", PublicId.normalize(atts.getValue("publicId")), atts.getValue("uri")); } } else if (localName.equals("system")) { if (checkAttributes(atts, "systemId", "uri")) { entryType = Catalog.SYSTEM; entryArgs.add(atts.getValue("systemId")); entryArgs.add(atts.getValue("uri")); debug.message(4, "system", atts.getValue("systemId"), atts.getValue("uri")); } } else if (localName.equals("uri")) { if (checkAttributes(atts, "name", "uri")) { entryType = Catalog.URI; entryArgs.add(atts.getValue("name")); entryArgs.add(atts.getValue("uri")); debug.message(4, "uri", atts.getValue("name"), atts.getValue("uri")); } } else if (localName.equals("catalog")) { // nop, start of catalog } else if (localName.equals("group")) { // nop, a group } else { // This is equivalent to an invalid catalog entry type debug.message(1, "Invalid catalog entry type", localName); } if (entryType >= 0) { try { CatalogEntry ce = new CatalogEntry(entryType, entryArgs); catalog.addEntry(ce); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { debug.message(1, "Invalid catalog entry type", localName); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { debug.message(1, "Invalid catalog entry", localName); } } } } if (namespaceURI != null && tr9401NamespaceName.equals(namespaceURI) && !inExtension) { // This is a TR9401 Catalog entry if (atts.getValue("xml:base") != null) { String baseURI = atts.getValue("xml:base"); entryType = Catalog.BASE; entryArgs.add(baseURI); baseURIStack.push(baseURI); debug.message(4, "xml:base", baseURI); try { CatalogEntry ce = new CatalogEntry(entryType, entryArgs); catalog.addEntry(ce); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { debug.message(1, "Invalid catalog entry type", localName); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { debug.message(1, "Invalid catalog entry (base)", localName); } } entryType = -1; entryArgs = new Vector(); } else { baseURIStack.push(baseURIStack.peek()); } if (localName.equals("doctype")) { entryType = catalog.DOCTYPE; entryArgs.add(atts.getValue("name")); entryArgs.add(atts.getValue("uri")); } else if (localName.equals("document")) { entryType = catalog.DOCUMENT; entryArgs.add(atts.getValue("uri")); } else if (localName.equals("dtddecl")) { entryType = catalog.DTDDECL; entryArgs.add(atts.getValue("publicId")); entryArgs.add(atts.getValue("uri")); } else if (localName.equals("entity")) { entryType = Catalog.ENTITY; entryArgs.add(atts.getValue("name")); entryArgs.add(atts.getValue("uri")); } else if (localName.equals("linktype")) { entryType = Catalog.LINKTYPE; entryArgs.add(atts.getValue("name")); entryArgs.add(atts.getValue("uri")); } else if (localName.equals("notation")) { entryType = Catalog.NOTATION; entryArgs.add(atts.getValue("name")); entryArgs.add(atts.getValue("uri")); } else if (localName.equals("sgmldecl")) { entryType = Catalog.SGMLDECL; entryArgs.add(atts.getValue("uri")); } else { // This is equivalent to an invalid catalog entry type debug.message(1, "Invalid catalog entry type", localName); } if (entryType >= 0) { try { CatalogEntry ce = new CatalogEntry(entryType, entryArgs); catalog.addEntry(ce); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { debug.message(1, "Invalid catalog entry type", localName); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { debug.message(1, "Invalid catalog entry", localName); } } } } } public boolean checkAttributes (Attributes atts, String attName) { if (atts.getValue(attName) == null) { debug.message(1, "Error: required attribute " + attName + " missing."); return false; } else { return true; } } public boolean checkAttributes (Attributes atts, String attName1, String attName2) { return checkAttributes(atts, attName1) && checkAttributes(atts, attName2); } /** The SAX endElement */ public void endElement (String namespaceURI, String localName, String qName) throws SAXException { int entryType = -1; Vector entryArgs = new Vector(); boolean inExtension = inExtensionNamespace(); if (namespaceURI != null && !inExtension && (namespaceName.equals(namespaceURI) || tr9401NamespaceName.equals(namespaceURI))) { String popURI = (String) baseURIStack.pop(); String baseURI = (String) baseURIStack.peek(); if (!baseURI.equals(popURI)) { entryType = catalog.BASE; entryArgs.add(baseURI); debug.message(4, "(reset) xml:base", baseURI); try { CatalogEntry ce = new CatalogEntry(entryType, entryArgs); catalog.addEntry(ce); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { debug.message(1, "Invalid catalog entry type", localName); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { debug.message(1, "Invalid catalog entry (rbase)", localName); } } } } if (namespaceURI != null && namespaceName.equals(namespaceURI) && !inExtension) { if (localName.equals("catalog") || localName.equals("group")) { String popOverride = (String) overrideStack.pop(); String override = (String) overrideStack.peek(); if (!override.equals(popOverride)) { entryType = catalog.OVERRIDE; entryArgs.add(override); overrideStack.push(override); debug.message(4, "(reset) override", override); try { CatalogEntry ce = new CatalogEntry(entryType, entryArgs); catalog.addEntry(ce); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { debug.message(1, "Invalid catalog entry type", localName); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { debug.message(1, "Invalid catalog entry (roverride)", localName); } } } } } namespaceStack.pop(); return; } /** The SAX characters method does nothing. */ public void characters (char ch[], int start, int length) throws SAXException { return; } /** The SAX ignorableWhitespace method does nothing. */ public void ignorableWhitespace (char ch[], int start, int length) throws SAXException { return; } /** The SAX processingInstruction method does nothing. */ public void processingInstruction (String target, String data) throws SAXException { return; } /** The SAX skippedEntity method does nothing. */ public void skippedEntity (String name) throws SAXException { return; } /** The SAX startPrefixMapping method does nothing. */ public void startPrefixMapping(String prefix, String uri) throws SAXException { return; } /** The SAX endPrefixMapping method does nothing. */ public void endPrefixMapping(String prefix) throws SAXException { return; } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/SAXCatalogParser.java100644 0 0 2770 10530407252 25452 0ustar 0 0 // SAXCatalogParser.java - An interface for reading catalog files /* * 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.xml.resolver.readers; import org.apache.xml.resolver.Catalog; import org.xml.sax.*; /** * The SAXCatalogParser interface. * *

This interface must be implemented in order for a class to * participate as a parser for the SAXCatalogReader. * * @see Catalog * @see SAXCatalogReader * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public interface SAXCatalogParser extends ContentHandler, DocumentHandler { /** Set the Catalog for which parsing is being performed. */ public void setCatalog(Catalog catalog); } xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/SAXCatalogReader.java100644 0 0 37250 10530407252 25441 0ustar 0 0 // SAXCatalogReader.java - Read XML Catalog files /* * 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.xml.resolver.readers; import java.util.Hashtable; import java.io.IOException; import java.io.FileNotFoundException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.net.MalformedURLException; import java.net.UnknownHostException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParser; import org.xml.sax.AttributeList; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.DocumentHandler; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.Locator; import org.xml.sax.Parser; import org.xml.sax.SAXException; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogManager; import org.apache.xml.resolver.CatalogException; import org.apache.xml.resolver.readers.CatalogReader; import org.apache.xml.resolver.helpers.Debug; /** * A SAX-based CatalogReader. * *

This class is used to read XML Catalogs using the SAX. This reader * has an advantage over the DOM-based reader in that it functions on * the stream of SAX events. It has the disadvantage * that it cannot look around in the tree.

* *

Since the choice of CatalogReaders (in the InputStream case) can only * be made on the basis of MIME type, the following problem occurs: only * one CatalogReader can exist for all XML mime types. In order to get * around this problem, the SAXCatalogReader relies on a set of external * CatalogParsers to actually build the catalog.

* *

The selection of CatalogParsers is made on the basis of the QName * of the root element of the document.

* * @see Catalog * @see CatalogReader * @see SAXCatalogReader * @see TextCatalogReader * @see DOMCatalogParser * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class SAXCatalogReader implements CatalogReader, ContentHandler, DocumentHandler { /** The SAX Parser Factory */ protected SAXParserFactory parserFactory = null; /** The SAX Parser Class */ protected String parserClass = null; /** * Mapping table from QNames to CatalogParser classes. * *

Each key in this hash table has the form "elementname" * or "{namespaceuri}elementname". The former is used if the * namespace URI is null.

*/ protected Hashtable namespaceMap = new Hashtable(); /** The parser in use for the current catalog. */ private SAXCatalogParser saxParser = null; /** Set if something goes horribly wrong. It allows the class to * ignore the rest of the events that are received. */ private boolean abandonHope = false; /** If set, used for loading classes by reflection */ private ClassLoader loader = null; /** The Catalog that we're working for. */ private Catalog catalog; /** Set the XML SAX Parser Factory. */ public void setParserFactory(SAXParserFactory parserFactory) { this.parserFactory = parserFactory; } /** Set the XML SAX Parser Class */ public void setParserClass(String parserClass) { this.parserClass = parserClass; } /** Get the parser factory currently in use. */ public SAXParserFactory getParserFactory() { return parserFactory; } /** Get the parser class currently in use. */ public String getParserClass() { return parserClass; } /** * Set the class loader to use when loading class by reflection. If not set, * the the class loader used to load this class is used. */ public void setClassLoader(ClassLoader loader) { this.loader = loader; } /** The debug class to use for this reader. * * This is a bit of a hack. Anyway, whenever we read for a catalog, * we extract the debug object * from the catalog's manager so that we can use it to print messages. * * In production, we don't really expect any messages so it doesn't * really matter. But it's still a bit of a hack. */ protected Debug debug = CatalogManager.getStaticManager().debug; /** The constructor */ public SAXCatalogReader() { parserFactory = null; parserClass = null; } /** The constructor */ public SAXCatalogReader(SAXParserFactory parserFactory) { this.parserFactory = parserFactory; } /** The constructor */ public SAXCatalogReader(String parserClass) { this.parserClass = parserClass; } /** * Set the SAXCatalogParser class for the given namespace/root * element type. */ public void setCatalogParser(String namespaceURI, String rootElement, String parserClass) { namespaceURI = namespaceURI != null ? namespaceURI.trim() : ""; namespaceMap.put("{"+namespaceURI+"}"+rootElement, parserClass); } /** * Get the SAXCatalogParser class for the given namespace/root * element type. */ public String getCatalogParser(String namespaceURI, String rootElement) { namespaceURI = namespaceURI != null ? namespaceURI.trim() : ""; return (String) namespaceMap.get("{"+namespaceURI+"}"+rootElement); } /** * Parse an XML Catalog file. * * @param catalog The catalog to which this catalog file belongs * @param fileUrl The URL or filename of the catalog file to process * * @throws MalformedURLException Improper fileUrl * @throws IOException Error reading catalog file */ public void readCatalog(Catalog catalog, String fileUrl) throws MalformedURLException, IOException, CatalogException { URL url = null; try { url = new URL(fileUrl); } catch (MalformedURLException e) { url = new URL("file:///" + fileUrl); } debug = catalog.getCatalogManager().debug; try { URLConnection urlCon = url.openConnection(); readCatalog(catalog, urlCon.getInputStream()); } catch (FileNotFoundException e) { catalog.getCatalogManager().debug.message(1, "Failed to load catalog, file not found", url.toString()); } } /** * Parse an XML Catalog stream. * * @param catalog The catalog to which this catalog file belongs * @param is The input stream from which the catalog will be read * * @throws MalformedURLException Improper fileUrl * @throws IOException Error reading catalog file * @throws CatalogException A Catalog exception */ public void readCatalog(Catalog catalog, InputStream is) throws IOException, CatalogException { // Create an instance of the parser if (parserFactory == null && parserClass == null) { debug.message(1, "Cannot read SAX catalog without a parser"); throw new CatalogException(CatalogException.UNPARSEABLE); } debug = catalog.getCatalogManager().debug; EntityResolver bResolver = catalog.getCatalogManager().getBootstrapResolver(); this.catalog = catalog; try { if (parserFactory != null) { SAXParser parser = parserFactory.newSAXParser(); SAXParserHandler spHandler = new SAXParserHandler(); spHandler.setContentHandler(this); if (bResolver != null) { spHandler.setEntityResolver(bResolver); } parser.parse(new InputSource(is), spHandler); } else { Parser parser = (Parser) Class.forName(parserClass, true, loader != null ? loader : this.getClass().getClassLoader()).newInstance(); parser.setDocumentHandler(this); if (bResolver != null) { parser.setEntityResolver(bResolver); } parser.parse(new InputSource(is)); } } catch (ClassNotFoundException cnfe) { throw new CatalogException(CatalogException.UNPARSEABLE); } catch (IllegalAccessException iae) { throw new CatalogException(CatalogException.UNPARSEABLE); } catch (InstantiationException ie) { throw new CatalogException(CatalogException.UNPARSEABLE); } catch (ParserConfigurationException pce) { throw new CatalogException(CatalogException.UNKNOWN_FORMAT); } catch (SAXException se) { Exception e = se.getException(); // FIXME: there must be a better way UnknownHostException uhe = new UnknownHostException(); FileNotFoundException fnfe = new FileNotFoundException(); if (e != null) { if (e.getClass() == uhe.getClass()) { throw new CatalogException(CatalogException.PARSE_FAILED, e.toString()); } else if (e.getClass() == fnfe.getClass()) { throw new CatalogException(CatalogException.PARSE_FAILED, e.toString()); } } throw new CatalogException(se); } } // ---------------------------------------------------------------------- // Implement the SAX ContentHandler interface /** The SAX setDocumentLocator method. Does nothing. */ public void setDocumentLocator (Locator locator) { if (saxParser != null) { saxParser.setDocumentLocator(locator); } } /** The SAX startDocument method. Does nothing. */ public void startDocument () throws SAXException { saxParser = null; abandonHope = false; return; } /** The SAX endDocument method. Does nothing. */ public void endDocument ()throws SAXException { if (saxParser != null) { saxParser.endDocument(); } } /** * The SAX startElement method. * *

The catalog parser is selected based on the namespace of the * first element encountered in the catalog.

*/ public void startElement (String name, AttributeList atts) throws SAXException { if (abandonHope) { return; } if (saxParser == null) { String prefix = ""; if (name.indexOf(':') > 0) { prefix = name.substring(0, name.indexOf(':')); } String localName = name; if (localName.indexOf(':') > 0) { localName = localName.substring(localName.indexOf(':')+1); } String namespaceURI = null; if (prefix.equals("")) { namespaceURI = atts.getValue("xmlns"); } else { namespaceURI = atts.getValue("xmlns:" + prefix); } String saxParserClass = getCatalogParser(namespaceURI, localName); if (saxParserClass == null) { abandonHope = true; if (namespaceURI == null) { debug.message(2, "No Catalog parser for " + name); } else { debug.message(2, "No Catalog parser for " + "{" + namespaceURI + "}" + name); } return; } try { saxParser = (SAXCatalogParser) Class.forName(saxParserClass, true, loader != null ? loader : this.getClass().getClassLoader()).newInstance(); saxParser.setCatalog(catalog); saxParser.startDocument(); saxParser.startElement(name, atts); } catch (ClassNotFoundException cnfe) { saxParser = null; abandonHope = true; debug.message(2, cnfe.toString()); } catch (InstantiationException ie) { saxParser = null; abandonHope = true; debug.message(2, ie.toString()); } catch (IllegalAccessException iae) { saxParser = null; abandonHope = true; debug.message(2, iae.toString()); } catch (ClassCastException cce ) { saxParser = null; abandonHope = true; debug.message(2, cce.toString()); } } else { saxParser.startElement(name, atts); } } /** * The SAX2 startElement method. * *

The catalog parser is selected based on the namespace of the * first element encountered in the catalog.

*/ public void startElement (String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { if (abandonHope) { return; } if (saxParser == null) { String saxParserClass = getCatalogParser(namespaceURI, localName); if (saxParserClass == null) { abandonHope = true; if (namespaceURI == null) { debug.message(2, "No Catalog parser for " + localName); } else { debug.message(2, "No Catalog parser for " + "{" + namespaceURI + "}" + localName); } return; } try { saxParser = (SAXCatalogParser) Class.forName(saxParserClass, true, loader != null ? loader : this.getClass().getClassLoader()).newInstance(); saxParser.setCatalog(catalog); saxParser.startDocument(); saxParser.startElement(namespaceURI, localName, qName, atts); } catch (ClassNotFoundException cnfe) { saxParser = null; abandonHope = true; debug.message(2, cnfe.toString()); } catch (InstantiationException ie) { saxParser = null; abandonHope = true; debug.message(2, ie.toString()); } catch (IllegalAccessException iae) { saxParser = null; abandonHope = true; debug.message(2, iae.toString()); } catch (ClassCastException cce ) { saxParser = null; abandonHope = true; debug.message(2, cce.toString()); } } else { saxParser.startElement(namespaceURI, localName, qName, atts); } } /** The SAX endElement method. Does nothing. */ public void endElement (String name) throws SAXException { if (saxParser != null) { saxParser.endElement(name); } } /** The SAX2 endElement method. Does nothing. */ public void endElement (String namespaceURI, String localName, String qName) throws SAXException { if (saxParser != null) { saxParser.endElement(namespaceURI, localName, qName); } } /** The SAX characters method. Does nothing. */ public void characters (char ch[], int start, int length) throws SAXException { if (saxParser != null) { saxParser.characters(ch, start, length); } } /** The SAX ignorableWhitespace method. Does nothing. */ public void ignorableWhitespace (char ch[], int start, int length) throws SAXException { if (saxParser != null) { saxParser.ignorableWhitespace(ch, start, length); } } /** The SAX processingInstruction method. Does nothing. */ public void processingInstruction (String target, String data) throws SAXException { if (saxParser != null) { saxParser.processingInstruction(target, data); } } /** The SAX startPrefixMapping method. Does nothing. */ public void startPrefixMapping (String prefix, String uri) throws SAXException { if (saxParser != null) { saxParser.startPrefixMapping (prefix, uri); } } /** The SAX endPrefixMapping method. Does nothing. */ public void endPrefixMapping (String prefix) throws SAXException { if (saxParser != null) { saxParser.endPrefixMapping (prefix); } } /** The SAX skippedentity method. Does nothing. */ public void skippedEntity (String name) throws SAXException { if (saxParser != null) { saxParser.skippedEntity(name); } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/SAXParserHandler.java100644 0 0 7354 10530407252 25460 0ustar 0 0 // SAXParserHandler.java - An entity-resolving DefaultHandler /* * 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.xml.resolver.readers; import java.io.IOException; import org.xml.sax.*; import org.xml.sax.helpers.*; /** * An entity-resolving DefaultHandler. * *

This class provides a SAXParser DefaultHandler that performs * entity resolution. *

* * @author Norman Walsh * Norman.Walsh@Sun.COM * @version 1.0 */ public class SAXParserHandler extends DefaultHandler { private EntityResolver er = null; private ContentHandler ch = null; public SAXParserHandler() { super(); } public void setEntityResolver(EntityResolver er) { this.er = er; } public void setContentHandler(ContentHandler ch) { this.ch = ch; } // Entity Resolver public InputSource resolveEntity(String publicId, String systemId) throws SAXException { if (er != null) { try { return er.resolveEntity(publicId, systemId); } catch (IOException e) { System.out.println("resolveEntity threw IOException!"); return null; } } else { return null; } } // Content Handler public void characters(char[] ch, int start, int length) throws SAXException { if (this.ch != null) { this.ch.characters(ch, start, length); } } public void endDocument() throws SAXException { if (ch != null) { ch.endDocument(); } } public void endElement(String namespaceURI, String localName, String qName) throws SAXException { if (ch != null) { ch.endElement(namespaceURI, localName, qName); } } public void endPrefixMapping(String prefix) throws SAXException { if (ch != null) { ch.endPrefixMapping(prefix); } } public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { if (this.ch != null) { this.ch.ignorableWhitespace(ch, start, length); } } public void processingInstruction(String target, String data) throws SAXException { if (ch != null) { ch.processingInstruction(target, data); } } public void setDocumentLocator(Locator locator) { if (ch != null) { ch.setDocumentLocator(locator); } } public void skippedEntity(String name) throws SAXException { if (ch != null) { ch.skippedEntity(name); } } public void startDocument() throws SAXException { if (ch != null) { ch.startDocument(); } } public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { if (ch != null) { ch.startElement(namespaceURI, localName, qName, atts); } } public void startPrefixMapping(String prefix, String uri) throws SAXException { if (ch != null) { ch.startPrefixMapping(prefix, uri); } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/TR9401CatalogReader.java100644 0 0 10176 10530407252 25647 0ustar 0 0 // TR9401CatalogReader.java - Read OASIS Catalog files /* * 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.xml.resolver.readers; import java.io.InputStream; import java.io.IOException; import java.net.MalformedURLException; import java.util.Vector; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogEntry; import org.apache.xml.resolver.CatalogException; /** * Parses OASIS Open Catalog files. * *

This class reads OASIS Open Catalog files, returning a stream * of tokens.

* *

This code interrogates the following non-standard system properties:

* *
*
xml.catalog.debug
*

Sets the debug level. A value of 0 is assumed if the * property is not set or is not a number.

*
* * @see Catalog * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class TR9401CatalogReader extends TextCatalogReader { /** * Start parsing an OASIS TR9401 Open Catalog file. The file is * actually read and parsed * as needed by nextEntry. * *

In a TR9401 Catalog the 'DELEGATE' entry delegates public * identifiers. There is no delegate entry for system identifiers * or URIs.

* * @param catalog The Catalog to populate * @param is The input stream from which to read the TR9401 Catalog * * @throws MalformedURLException Improper fileUrl * @throws IOException Error reading catalog file */ public void readCatalog(Catalog catalog, InputStream is) throws MalformedURLException, IOException { catfile = is; if (catfile == null) { return; } Vector unknownEntry = null; try { while (true) { String token = nextToken(); if (token == null) { if (unknownEntry != null) { catalog.unknownEntry(unknownEntry); unknownEntry = null; } catfile.close(); catfile = null; return; } String entryToken = null; if (caseSensitive) { entryToken = token; } else { entryToken = token.toUpperCase(); } if (entryToken.equals("DELEGATE")) { entryToken = "DELEGATE_PUBLIC"; } try { int type = CatalogEntry.getEntryType(entryToken); int numArgs = CatalogEntry.getEntryArgCount(type); Vector args = new Vector(); if (unknownEntry != null) { catalog.unknownEntry(unknownEntry); unknownEntry = null; } for (int count = 0; count < numArgs; count++) { args.addElement(nextToken()); } catalog.addEntry(new CatalogEntry(entryToken, args)); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { if (unknownEntry == null) { unknownEntry = new Vector(); } unknownEntry.addElement(token); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { catalog.getCatalogManager().debug.message(1, "Invalid catalog entry", token); unknownEntry = null; } else if (cex.getExceptionType() == CatalogException.UNENDED_COMMENT) { catalog.getCatalogManager().debug.message(1, cex.getMessage()); } } } } catch (CatalogException cex2) { if (cex2.getExceptionType() == CatalogException.UNENDED_COMMENT) { catalog.getCatalogManager().debug.message(1, cex2.getMessage()); } } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/TextCatalogReader.java100644 0 0 20135 10530407252 25724 0ustar 0 0 // TextCatalogReader.java - Read text/plain Catalog files /* * 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.xml.resolver.readers; import java.io.InputStream; import java.io.IOException; import java.io.FileNotFoundException; import java.net.URL; import java.net.URLConnection; import java.net.MalformedURLException; import java.util.Vector; import java.util.Stack; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogEntry; import org.apache.xml.resolver.CatalogException; import org.apache.xml.resolver.readers.CatalogReader; /** * Parses plain text Catalog files. * *

This class reads plain text Open Catalog files.

* * @see Catalog * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class TextCatalogReader implements CatalogReader { /** The input stream used to read the catalog */ protected InputStream catfile = null; /** * Character lookahead stack. Reading a catalog sometimes requires * up to two characters of lookahead. */ protected int[] stack = new int[3]; /** * Token stack. Recognizing an unexpected catalog entry requires * the ability to "push back" a token. */ protected Stack tokenStack = new Stack(); /** The current position on the lookahead stack */ protected int top = -1; /** Are keywords in the catalog case sensitive? */ protected boolean caseSensitive = false; /** * Construct a CatalogReader object. */ public TextCatalogReader() { } public void setCaseSensitive(boolean isCaseSensitive) { caseSensitive = isCaseSensitive; } public boolean getCaseSensitive() { return caseSensitive; } /** * Start parsing a text catalog file. The file is * actually read and parsed * as needed by nextEntry.

* * @param fileUrl The URL or filename of the catalog file to process * * @throws MalformedURLException Improper fileUrl * @throws IOException Error reading catalog file */ public void readCatalog(Catalog catalog, String fileUrl) throws MalformedURLException, IOException { URL catURL = null; try { catURL = new URL(fileUrl); } catch (MalformedURLException e) { catURL = new URL("file:///" + fileUrl); } URLConnection urlCon = catURL.openConnection(); try { readCatalog(catalog, urlCon.getInputStream()); } catch (FileNotFoundException e) { catalog.getCatalogManager().debug.message(1, "Failed to load catalog, file not found", catURL.toString()); } } public void readCatalog(Catalog catalog, InputStream is) throws MalformedURLException, IOException { catfile = is; if (catfile == null) { return; } Vector unknownEntry = null; try { while (true) { String token = nextToken(); if (token == null) { if (unknownEntry != null) { catalog.unknownEntry(unknownEntry); unknownEntry = null; } catfile.close(); catfile = null; return; } String entryToken = null; if (caseSensitive) { entryToken = token; } else { entryToken = token.toUpperCase(); } try { int type = CatalogEntry.getEntryType(entryToken); int numArgs = CatalogEntry.getEntryArgCount(type); Vector args = new Vector(); if (unknownEntry != null) { catalog.unknownEntry(unknownEntry); unknownEntry = null; } for (int count = 0; count < numArgs; count++) { args.addElement(nextToken()); } catalog.addEntry(new CatalogEntry(entryToken, args)); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { if (unknownEntry == null) { unknownEntry = new Vector(); } unknownEntry.addElement(token); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { catalog.getCatalogManager().debug.message(1, "Invalid catalog entry", token); unknownEntry = null; } else if (cex.getExceptionType() == CatalogException.UNENDED_COMMENT) { catalog.getCatalogManager().debug.message(1, cex.getMessage()); } } } } catch (CatalogException cex2) { if (cex2.getExceptionType() == CatalogException.UNENDED_COMMENT) { catalog.getCatalogManager().debug.message(1, cex2.getMessage()); } } } /** * The destructor. * *

Makes sure the catalog file is closed.

*/ protected void finalize() { if (catfile != null) { try { catfile.close(); } catch (IOException e) { // whatever... } } catfile = null; } // ----------------------------------------------------------------- /** * Return the next token in the catalog file. * *

FYI: This code does not throw any sort of exception for * a file that contains an n * * @return The Catalog file token from the input stream. * @throws IOException If an error occurs reading from the stream. */ protected String nextToken() throws IOException, CatalogException { String token = ""; int ch, nextch; if (!tokenStack.empty()) { return (String) tokenStack.pop(); } // Skip over leading whitespace and comments while (true) { // skip leading whitespace ch = catfile.read(); while (ch <= ' ') { // all ctrls are whitespace ch = catfile.read(); if (ch < 0) { return null; } } // now 'ch' is the current char from the file nextch = catfile.read(); if (nextch < 0) { return null; } if (ch == '-' && nextch == '-') { // we've found a comment, skip it... ch = ' '; nextch = nextChar(); while ((ch != '-' || nextch != '-') && nextch > 0) { ch = nextch; nextch = nextChar(); } if (nextch < 0) { throw new CatalogException(CatalogException.UNENDED_COMMENT, "Unterminated comment in catalog file; EOF treated as end-of-comment."); } // Ok, we've found the end of the comment, // loop back to the top and start again... } else { stack[++top] = nextch; stack[++top] = ch; break; } } ch = nextChar(); if (ch == '"' || ch == '\'') { int quote = ch; while ((ch = nextChar()) != quote) { char[] chararr = new char[1]; chararr[0] = (char) ch; String s = new String(chararr); token = token.concat(s); } return token; } else { // return the next whitespace or comment delimited // string while (ch > ' ') { nextch = nextChar(); if (ch == '-' && nextch == '-') { stack[++top] = ch; stack[++top] = nextch; return token; } else { char[] chararr = new char[1]; chararr[0] = (char) ch; String s = new String(chararr); token = token.concat(s); ch = nextch; } } return token; } } /** * Return the next logical character from the input stream. * * @return The next (logical) character from the input stream. The * character may be buffered from a previous lookahead. * * @throws IOException If an error occurs reading from the stream. */ protected int nextChar() throws IOException { if (top < 0) { return catfile.read(); } else { return stack[top--]; } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/XCatalogReader.java100644 0 0 14721 10530407252 25213 0ustar 0 0 // XCatalogReader.java - Read XML Catalog files /* * 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.xml.resolver.readers; import java.util.Vector; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogEntry; import org.apache.xml.resolver.CatalogException; import org.apache.xml.resolver.helpers.PublicId; import org.xml.sax.*; import javax.xml.parsers.*; /** * Parse "XCatalog" XML Catalog files, this is the XML Catalog format * developed by John Cowan and supported by Apache. * * @see Catalog * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class XCatalogReader extends SAXCatalogReader implements SAXCatalogParser { /** The catalog object needs to be stored by the object so that * SAX callbacks can use it. */ protected Catalog catalog = null; /** Set the current catalog. */ public void setCatalog (Catalog catalog) { this.catalog = catalog; debug = catalog.getCatalogManager().debug; } /** Get the current catalog. */ public Catalog getCatalog () { return catalog; } /** Default constructor */ public XCatalogReader() { super(); } /** Constructor allowing for providing custom SAX parser factory */ public XCatalogReader(SAXParserFactory parserFactory, Catalog catalog) { super(parserFactory); setCatalog(catalog); } // ---------------------------------------------------------------------- // Implement the SAX ContentHandler interface /** The SAX setDocumentLocator method does nothing. */ public void setDocumentLocator (Locator locator) { return; } /** The SAX startDocument method does nothing. */ public void startDocument () throws SAXException { return; } /** The SAX endDocument method does nothing. */ public void endDocument () throws SAXException { return; } /** * The SAX startElement method recognizes elements * from the plain catalog format and instantiates CatalogEntry * objects for them. * * @param namespaceURI The namespace name of the element. * @param localName The local name of the element. * @param qName The QName of the element. * @param atts The list of attributes on the element. * * @see CatalogEntry */ public void startElement (String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { int entryType = -1; Vector entryArgs = new Vector(); if (localName.equals("Base")) { entryType = catalog.BASE; entryArgs.add(atts.getValue("HRef")); debug.message(4, "Base", atts.getValue("HRef")); } else if (localName.equals("Delegate")) { entryType = catalog.DELEGATE_PUBLIC; entryArgs.add(atts.getValue("PublicID")); entryArgs.add(atts.getValue("HRef")); debug.message(4, "Delegate", PublicId.normalize(atts.getValue("PublicID")), atts.getValue("HRef")); } else if (localName.equals("Extend")) { entryType = catalog.CATALOG; entryArgs.add(atts.getValue("HRef")); debug.message(4, "Extend", atts.getValue("HRef")); } else if (localName.equals("Map")) { entryType = catalog.PUBLIC; entryArgs.add(atts.getValue("PublicID")); entryArgs.add(atts.getValue("HRef")); debug.message(4, "Map", PublicId.normalize(atts.getValue("PublicID")), atts.getValue("HRef")); } else if (localName.equals("Remap")) { entryType = catalog.SYSTEM; entryArgs.add(atts.getValue("SystemID")); entryArgs.add(atts.getValue("HRef")); debug.message(4, "Remap", atts.getValue("SystemID"), atts.getValue("HRef")); } else if (localName.equals("XCatalog")) { // nop, start of catalog } else { // This is equivalent to an invalid catalog entry type debug.message(1, "Invalid catalog entry type", localName); } if (entryType >= 0) { try { CatalogEntry ce = new CatalogEntry(entryType, entryArgs); catalog.addEntry(ce); } catch (CatalogException cex) { if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) { debug.message(1, "Invalid catalog entry type", localName); } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) { debug.message(1, "Invalid catalog entry", localName); } } } } /** The SAX endElement method does nothing. */ public void endElement (String namespaceURI, String localName, String qName) throws SAXException { return; } /** The SAX characters method does nothing. */ public void characters (char ch[], int start, int length) throws SAXException { return; } /** The SAX ignorableWhitespace method does nothing. */ public void ignorableWhitespace (char ch[], int start, int length) throws SAXException { return; } /** The SAX processingInstruction method does nothing. */ public void processingInstruction (String target, String data) throws SAXException { return; } /** The SAX skippedEntity method does nothing. */ public void skippedEntity (String name) throws SAXException { return; } /** The SAX startPrefixMapping method does nothing. */ public void startPrefixMapping(String prefix, String uri) throws SAXException { return; } /** The SAX endPrefixMapping method does nothing. */ public void endPrefixMapping(String prefix) throws SAXException { return; } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/readers/package.html100644 0 0 2075 10530407252 23763 0ustar 0 0 Apache XML Commons Resolver Readers package

Apache XML Commons Resolver Readers package.

This package provides the set of classes that read catalog files and extract catalog entries from them.

xml-commons-resolver-1.2/src/org/apache/xml/resolver/tests/BasicResolverTests.java100644 0 0 11100 10530407252 25655 0ustar 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.xml.resolver.tests; import junit.framework.TestCase; import java.net.URL; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogManager; import org.apache.xml.resolver.tools.CatalogResolver; public class BasicResolverTests extends TestCase { protected Catalog catalog; public static void main(String args[]) { junit.textui.TestRunner.run(BasicResolverTests.class); } protected void setUp() throws Exception { super.setUp(); CatalogManager manager = new CatalogManager(); // Just do this to make sure that the debug level gets set. // I could set the value explicitly, but I know that the // ant build file is going to set the system property, so just // make sure that that gets used. int verbosity = manager.getVerbosity(); catalog = new Catalog(manager); catalog.setupReaders(); catalog.loadSystemCatalogs(); } public void testResolveSystem() { String resolved = null; String local = "file:/local/system-resolver.dtd"; try { resolved = catalog.resolveSystem("http://example.org/resolver.dtd"); } catch (Exception e) { e.printStackTrace(); } assertTrue(local.equals(resolved)); } public void testResolvePublic() { String resolved = null; String local = "file:/local/public-resolver.dtd"; try { resolved = catalog.resolvePublic("-//Apache//DTD Resolver Test//EN", "some-broken-system-identifier"); } catch (Exception e) { e.printStackTrace(); } assertTrue(local.equals(resolved)); } public void testRewriteSystem() { String resolved = null; String local = "file:/longest/path"; try { resolved = catalog.resolveSystem("http://rewrite.example.org/longest/path"); } catch (Exception e) { e.printStackTrace(); } assertTrue(local.equals(resolved)); } public void testResolveURI() { String resolved = null; String local = "file:/local/uri"; try { resolved = catalog.resolveURI("http://example.org/someURI"); } catch (Exception e) { e.printStackTrace(); } assertTrue(local.equals(resolved)); } public void testGroup() { String resolved = null; String local = "file:/local/other/uri"; try { resolved = catalog.resolveURI("http://example.org/someOtherURI"); } catch (Exception e) { e.printStackTrace(); } assertTrue(local.equals(resolved)); } public void testDelegateSystem() { String resolved = null; String local = "file:/local/delegated/system-resolver.dtd"; try { resolved = catalog.resolveSystem("http://delegate.example.org/resolver.dtd"); } catch (Exception e) { e.printStackTrace(); } assertTrue(local.equals(resolved)); } public void testDocument() { String resolved = null; String local = "file:/default-document"; try { resolved = catalog.resolveDocument(); } catch (Exception e) { e.printStackTrace(); } assertTrue(local.equals(resolved)); } public void testSystemSuffix() { String resolved = null; String local = "file:/usr/local/xml/docbook/4.4/docbookx.dtd"; try { resolved = catalog.resolveSystem("http://any/random/path/to/docbookx.dtd"); } catch (Exception e) { e.printStackTrace(); } assertTrue(local.equals(resolved)); } public void testUriSuffix() { String resolved = null; String local = "file:/usr/local/xsl/docbook/html/docbook.xsl"; try { resolved = catalog.resolveURI("http://any/path/to/html/docbook.xsl"); } catch (Exception e) { e.printStackTrace(); } assertTrue(local.equals(resolved)); } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/tests/catalog.xml100644 0 0 4016 10530407252 23350 0ustar 0 0 xml-commons-resolver-1.2/src/org/apache/xml/resolver/tests/delegate-system.xml100644 0 0 2031 10530407252 25025 0ustar 0 0 xml-commons-resolver-1.2/src/org/apache/xml/resolver/tests/tr9401.xml100644 0 0 2076 10530407252 22705 0ustar 0 0 xml-commons-resolver-1.2/src/org/apache/xml/resolver/tools/CatalogResolver.java100644 0 0 25062 10530407252 25175 0ustar 0 0 // CatalogResolver.java - A SAX EntityResolver/JAXP URI Resolver /* * 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.xml.resolver.tools; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.MalformedURLException; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.InputSource; import org.xml.sax.EntityResolver; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.Source; import javax.xml.transform.URIResolver; import javax.xml.transform.TransformerException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParserFactory; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogManager; import org.apache.xml.resolver.helpers.FileURL; /** * A SAX EntityResolver/JAXP URIResolver that uses catalogs. * *

This class implements both a SAX EntityResolver and a JAXP URIResolver. *

* *

This resolver understands OASIS TR9401 catalogs, XCatalogs, and the * current working draft of the OASIS Entity Resolution Technical * Committee specification.

* * @see Catalog * @see org.xml.sax.EntityResolver * @see javax.xml.transform.URIResolver * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class CatalogResolver implements EntityResolver, URIResolver { /** Make the parser Namespace aware? */ public boolean namespaceAware = true; /** Make the parser validating? */ public boolean validating = false; /** The underlying catalog */ private Catalog catalog = null; /** The catalog manager */ private CatalogManager catalogManager = CatalogManager.getStaticManager(); /** Constructor */ public CatalogResolver() { initializeCatalogs(false); } /** Constructor */ public CatalogResolver(boolean privateCatalog) { initializeCatalogs(privateCatalog); } /** Constructor */ public CatalogResolver(CatalogManager manager) { catalogManager = manager; initializeCatalogs(!catalogManager.getUseStaticCatalog()); } /** Initialize catalog */ private void initializeCatalogs(boolean privateCatalog) { catalog = catalogManager.getCatalog(); } /** Return the underlying catalog */ public Catalog getCatalog() { return catalog; } /** * Implements the guts of the resolveEntity method * for the SAX interface. * *

Presented with an optional public identifier and a system * identifier, this function attempts to locate a mapping in the * catalogs.

* *

If such a mapping is found, it is returned. If no mapping is * found, null is returned.

* * @param publicId The public identifier for the entity in question. * This may be null. * * @param systemId The system identifier for the entity in question. * XML requires a system identifier on all external entities, so this * value is always specified. * * @return The resolved identifier (a URI reference). */ public String getResolvedEntity (String publicId, String systemId) { String resolved = null; if (catalog == null) { catalogManager.debug.message(1, "Catalog resolution attempted with null catalog; ignored"); return null; } if (systemId != null) { try { resolved = catalog.resolveSystem(systemId); } catch (MalformedURLException me) { catalogManager.debug.message(1, "Malformed URL exception trying to resolve", publicId); resolved = null; } catch (IOException ie) { catalogManager.debug.message(1, "I/O exception trying to resolve", publicId); resolved = null; } } if (resolved == null) { if (publicId != null) { try { resolved = catalog.resolvePublic(publicId, systemId); } catch (MalformedURLException me) { catalogManager.debug.message(1, "Malformed URL exception trying to resolve", publicId); } catch (IOException ie) { catalogManager.debug.message(1, "I/O exception trying to resolve", publicId); } } if (resolved != null) { catalogManager.debug.message(2, "Resolved public", publicId, resolved); } } else { catalogManager.debug.message(2, "Resolved system", systemId, resolved); } return resolved; } /** * Implements the resolveEntity method * for the SAX interface. * *

Presented with an optional public identifier and a system * identifier, this function attempts to locate a mapping in the * catalogs.

* *

If such a mapping is found, the resolver attempts to open * the mapped value as an InputSource and return it. Exceptions are * ignored and null is returned if the mapped value cannot be opened * as an input source.

* *

If no mapping is found (or an error occurs attempting to open * the mapped value as an input source), null is returned and the system * will use the specified system identifier as if no entityResolver * was specified.

* * @param publicId The public identifier for the entity in question. * This may be null. * * @param systemId The system identifier for the entity in question. * XML requires a system identifier on all external entities, so this * value is always specified. * * @return An InputSource for the mapped identifier, or null. */ public InputSource resolveEntity (String publicId, String systemId) { String resolved = getResolvedEntity(publicId, systemId); if (resolved != null) { try { InputSource iSource = new InputSource(resolved); iSource.setPublicId(publicId); // Ideally this method would not attempt to open the // InputStream, but there is a bug (in Xerces, at least) // that causes the parser to mistakenly open the wrong // system identifier if the returned InputSource does // not have a byteStream. // // It could be argued that we still shouldn't do this here, // but since the purpose of calling the entityResolver is // almost certainly to open the input stream, it seems to // do little harm. // URL url = new URL(resolved); InputStream iStream = url.openStream(); iSource.setByteStream(iStream); return iSource; } catch (Exception e) { catalogManager.debug.message(1, "Failed to create InputSource (" + e.toString() + ")", resolved); return null; } } return null; } /** JAXP URIResolver API */ public Source resolve(String href, String base) throws TransformerException { String uri = href; String fragment = null; int hashPos = href.indexOf("#"); if (hashPos >= 0) { uri = href.substring(0, hashPos); fragment = href.substring(hashPos+1); } String result = null; try { result = catalog.resolveURI(href); } catch (Exception e) { // nop; } if (result == null) { try { URL url = null; if (base==null) { url = new URL(uri); result = url.toString(); } else { URL baseURL = new URL(base); url = (href.length()==0 ? baseURL : new URL(baseURL, uri)); result = url.toString(); } } catch (java.net.MalformedURLException mue) { // try to make an absolute URI from the current base String absBase = makeAbsolute(base); if (!absBase.equals(base)) { // don't bother if the absBase isn't different! return resolve(href, absBase); } else { throw new TransformerException("Malformed URL " + href + "(base " + base + ")", mue); } } } catalogManager.debug.message(2, "Resolved URI", href, result); SAXSource source = new SAXSource(); source.setInputSource(new InputSource(result)); setEntityResolver(source); return source; } /** *

Establish an entityResolver for newly resolved URIs.

* *

This is called from the URIResolver to set an EntityResolver * on the SAX parser to be used for new XML documents that are * encountered as a result of the document() function, xsl:import, * or xsl:include. This is done because the XSLT processor calls * out to the SAXParserFactory itself to create a new SAXParser to * parse the new document. The new parser does not automatically * inherit the EntityResolver of the original (although arguably * it should). See below:

* * "If an application wants to set the ErrorHandler or * EntityResolver for an XMLReader used during a transformation, * it should use a URIResolver to return the SAXSource which * provides (with getXMLReader) a reference to the XMLReader" * *

...quoted from page 118 of the Java API for XML * Processing 1.1 specification

* */ private void setEntityResolver(SAXSource source) throws TransformerException { XMLReader reader = source.getXMLReader(); if (reader == null) { SAXParserFactory spFactory = SAXParserFactory.newInstance(); spFactory.setNamespaceAware(true); try { reader = spFactory.newSAXParser().getXMLReader(); } catch (ParserConfigurationException ex) { throw new TransformerException(ex); } catch (SAXException ex) { throw new TransformerException(ex); } } reader.setEntityResolver(this); source.setXMLReader(reader); } /** Attempt to construct an absolute URI */ private String makeAbsolute(String uri) { if (uri == null) { uri = ""; } try { URL url = new URL(uri); return url.toString(); } catch (MalformedURLException mue) { try { URL fileURL = FileURL.makeURL(uri); return fileURL.toString(); } catch (MalformedURLException mue2) { // bail return uri; } } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/tools/ResolvingParser.java100644 0 0 31164 10530407252 25226 0ustar 0 0 // ResolvingParser.java - An interface for reading catalog files /* * 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.xml.resolver.tools; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.MalformedURLException; import java.util.Locale; import org.xml.sax.Parser; import org.xml.sax.InputSource; import org.xml.sax.Locator; import org.xml.sax.ErrorHandler; import org.xml.sax.DTDHandler; import org.xml.sax.DocumentHandler; import org.xml.sax.AttributeList; import org.xml.sax.EntityResolver; import org.xml.sax.SAXException; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParser; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogManager; import org.apache.xml.resolver.helpers.FileURL; /** * A SAX Parser that performs catalog-based entity resolution. * *

This class implements a SAX Parser that performs entity resolution * using the CatalogResolver. The actual, underlying parser is obtained * from a SAXParserFactory.

*

* * @deprecated This interface has been replaced by the * {@link org.apache.xml.resolver.tools.ResolvingXMLReader} for SAX2. * @see CatalogResolver * @see org.xml.sax.Parser * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class ResolvingParser implements Parser, DTDHandler, DocumentHandler, EntityResolver { /** Make the parser Namespace aware? */ public static boolean namespaceAware = true; /** Make the parser validating? */ public static boolean validating = false; /** Suppress explanatory message? * * @see #parse(InputSource) */ public static boolean suppressExplanation = false; /** The underlying parser. */ private SAXParser saxParser = null; /** The underlying reader. */ private Parser parser = null; /** The underlying DocumentHandler. */ private DocumentHandler documentHandler = null; /** The underlying DTDHandler. */ private DTDHandler dtdHandler = null; /** The manager for the underlying resolver. */ private CatalogManager catalogManager = CatalogManager.getStaticManager(); /** The underlying catalog resolver. */ private CatalogResolver catalogResolver = null; /** A separate resolver for oasis-xml-pi catalogs. */ private CatalogResolver piCatalogResolver = null; /** Are we in the prolog? Is an oasis-xml-catalog PI valid now? */ private boolean allowXMLCatalogPI = false; /** Has an oasis-xml-catalog PI been seen? */ private boolean oasisXMLCatalogPI = false; /** The base URI of the input document, if known. */ private URL baseURL = null; /** Constructor. */ public ResolvingParser() { initParser(); } /** Constructor. */ public ResolvingParser(CatalogManager manager) { catalogManager = manager; initParser(); } /** Initialize the parser. */ private void initParser() { catalogResolver = new CatalogResolver(catalogManager); SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(namespaceAware); spf.setValidating(validating); try { saxParser = spf.newSAXParser(); parser = saxParser.getParser(); documentHandler = null; dtdHandler = null; } catch (Exception ex) { ex.printStackTrace(); } } /** Return the Catalog being used. */ public Catalog getCatalog() { return catalogResolver.getCatalog(); } /** * SAX Parser API. * *

Note that the JAXP 1.1ea2 parser crashes with an InternalError if * it encounters a system identifier that appears to be a relative URI * that begins with a slash. For example, the declaration:

* *
   * <!DOCTYPE book SYSTEM "/path/to/dtd/on/my/system/docbookx.dtd">
   * 
* *

would cause such an error. As a convenience, this method catches * that error and prints an explanation. (Unfortunately, it's not possible * to identify the particular system identifier that causes the problem.) *

* *

The underlying error is forwarded after printing the explanatory * message. The message is only every printed once and if * suppressExplanation is set to false before * parsing, it will never be printed.

*/ public void parse(InputSource input) throws IOException, SAXException { setupParse(input.getSystemId()); try { parser.parse(input); } catch (InternalError ie) { explain(input.getSystemId()); throw ie; } } /** SAX Parser API. * * @see #parse(InputSource) */ public void parse(String systemId) throws IOException, SAXException { setupParse(systemId); try { parser.parse(systemId); } catch (InternalError ie) { explain(systemId); throw ie; } } /** SAX Parser API. */ public void setDocumentHandler(DocumentHandler handler) { documentHandler = handler; } /** SAX Parser API. */ public void setDTDHandler(DTDHandler handler) { dtdHandler = handler; } /** * SAX Parser API. * *

The purpose of this class is to implement an entity resolver. * Attempting to set a different one is pointless (and ignored).

*/ public void setEntityResolver(EntityResolver resolver) { // nop } /** SAX Parser API. */ public void setErrorHandler(ErrorHandler handler) { parser.setErrorHandler(handler); } /** SAX Parser API. */ public void setLocale(Locale locale) throws SAXException { parser.setLocale(locale); } /** SAX DocumentHandler API. */ public void characters(char[] ch, int start, int length) throws SAXException { if (documentHandler != null) { documentHandler.characters(ch,start,length); } } /** SAX DocumentHandler API. */ public void endDocument() throws SAXException { if (documentHandler != null) { documentHandler.endDocument(); } } /** SAX DocumentHandler API. */ public void endElement(String name) throws SAXException { if (documentHandler != null) { documentHandler.endElement(name); } } /** SAX DocumentHandler API. */ public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { if (documentHandler != null) { documentHandler.ignorableWhitespace(ch,start,length); } } /** SAX DocumentHandler API. */ public void processingInstruction(String target, String pidata) throws SAXException { if (target.equals("oasis-xml-catalog")) { URL catalog = null; String data = pidata; int pos = data.indexOf("catalog="); if (pos >= 0) { data = data.substring(pos+8); if (data.length() > 1) { String quote = data.substring(0,1); data = data.substring(1); pos = data.indexOf(quote); if (pos >= 0) { data = data.substring(0, pos); try { if (baseURL != null) { catalog = new URL(baseURL, data); } else { catalog = new URL(data); } } catch (MalformedURLException mue) { // nevermind } } } } if (allowXMLCatalogPI) { if (catalogManager.getAllowOasisXMLCatalogPI()) { catalogManager.debug.message(4,"oasis-xml-catalog PI", pidata); if (catalog != null) { try { catalogManager.debug.message(4,"oasis-xml-catalog", catalog.toString()); oasisXMLCatalogPI = true; if (piCatalogResolver == null) { piCatalogResolver = new CatalogResolver(true); } piCatalogResolver.getCatalog().parseCatalog(catalog.toString()); } catch (Exception e) { catalogManager.debug.message(3, "Exception parsing oasis-xml-catalog: " + catalog.toString()); } } else { catalogManager.debug.message(3, "PI oasis-xml-catalog unparseable: " + pidata); } } else { catalogManager.debug.message(4,"PI oasis-xml-catalog ignored: " + pidata); } } else { catalogManager.debug.message(3, "PI oasis-xml-catalog occurred in an invalid place: " + pidata); } } else { if (documentHandler != null) { documentHandler.processingInstruction(target, pidata); } } } /** SAX DocumentHandler API. */ public void setDocumentLocator(Locator locator) { if (documentHandler != null) { documentHandler.setDocumentLocator(locator); } } /** SAX DocumentHandler API. */ public void startDocument() throws SAXException { if (documentHandler != null) { documentHandler.startDocument(); } } /** SAX DocumentHandler API. */ public void startElement(String name, AttributeList atts) throws SAXException { allowXMLCatalogPI = false; if (documentHandler != null) { documentHandler.startElement(name,atts); } } /** SAX DTDHandler API. */ public void notationDecl (String name, String publicId, String systemId) throws SAXException { allowXMLCatalogPI = false; if (dtdHandler != null) { dtdHandler.notationDecl(name,publicId,systemId); } } /** SAX DTDHandler API. */ public void unparsedEntityDecl (String name, String publicId, String systemId, String notationName) throws SAXException { allowXMLCatalogPI = false; if (dtdHandler != null) { dtdHandler.unparsedEntityDecl (name, publicId, systemId, notationName); } } /** * Implements the resolveEntity method * for the SAX interface, using an underlying CatalogResolver * to do the real work. */ public InputSource resolveEntity (String publicId, String systemId) { allowXMLCatalogPI = false; String resolved = catalogResolver.getResolvedEntity(publicId, systemId); if (resolved == null && piCatalogResolver != null) { resolved = piCatalogResolver.getResolvedEntity(publicId, systemId); } if (resolved != null) { try { InputSource iSource = new InputSource(resolved); iSource.setPublicId(publicId); // Ideally this method would not attempt to open the // InputStream, but there is a bug (in Xerces, at least) // that causes the parser to mistakenly open the wrong // system identifier if the returned InputSource does // not have a byteStream. // // It could be argued that we still shouldn't do this here, // but since the purpose of calling the entityResolver is // almost certainly to open the input stream, it seems to // do little harm. // URL url = new URL(resolved); InputStream iStream = url.openStream(); iSource.setByteStream(iStream); return iSource; } catch (Exception e) { catalogManager.debug.message(1, "Failed to create InputSource (" + e.toString() + ")", resolved); return null; } } else { return null; } } /** Setup for parsing. */ private void setupParse(String systemId) { allowXMLCatalogPI = true; parser.setEntityResolver(this); parser.setDocumentHandler(this); parser.setDTDHandler(this); URL cwd = null; try { cwd = FileURL.makeURL("basename"); } catch (MalformedURLException mue) { cwd = null; } try { baseURL = new URL(systemId); } catch (MalformedURLException mue) { if (cwd != null) { try { baseURL = new URL(cwd, systemId); } catch (MalformedURLException mue2) { // give up baseURL = null; } } else { // give up baseURL = null; } } } /** Provide one possible explanation for an InternalError. */ private void explain(String systemId) { if (!suppressExplanation) { System.out.println("Parser probably encountered bad URI in " + systemId); System.out.println("For example, replace '/some/uri' with 'file:/some/uri'."); } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/tools/ResolvingXMLFilter.java100644 0 0 24765 10530407252 25611 0ustar 0 0 // ResolvingXMLFilter.java - An XMLFilter that performs catalog resolution /* * 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.xml.resolver.tools; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.Attributes; import org.xml.sax.helpers.XMLFilterImpl; import org.apache.xml.resolver.Catalog; import org.apache.xml.resolver.CatalogManager; import org.apache.xml.resolver.helpers.FileURL; /** * A SAX XMLFilter that performs catalog-based entity resolution. * *

This class implements a SAX XMLFilter that performs entity resolution * using the CatalogResolver. The actual, underlying parser is obtained * from a SAXParserFactory.

*

* * @see CatalogResolver * @see org.xml.sax.XMLFilter * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class ResolvingXMLFilter extends XMLFilterImpl { /** * Suppress explanatory message? * * @see #parse(InputSource) */ public static boolean suppressExplanation = false; /** The manager for the underlying resolver. */ private CatalogManager catalogManager = CatalogManager.getStaticManager(); /** The underlying catalog resolver. */ private CatalogResolver catalogResolver = null; /** A separate resolver for oasis-xml-pi catalogs. */ private CatalogResolver piCatalogResolver = null; /** Are we in the prolog? Is an oasis-xml-catalog PI valid now? */ private boolean allowXMLCatalogPI = false; /** Has an oasis-xml-catalog PI been seen? */ private boolean oasisXMLCatalogPI = false; /** The base URI of the input document, if known. */ private URL baseURL = null; /** Construct an empty XML Filter with no parent. */ public ResolvingXMLFilter() { super(); catalogResolver = new CatalogResolver(catalogManager); } /** Construct an XML filter with the specified parent. */ public ResolvingXMLFilter(XMLReader parent) { super(parent); catalogResolver = new CatalogResolver(catalogManager); } /** Construct an XML filter with the specified parent. */ public ResolvingXMLFilter(CatalogManager manager) { super(); catalogManager = manager; catalogResolver = new CatalogResolver(catalogManager); } /** Construct an XML filter with the specified parent. */ public ResolvingXMLFilter(XMLReader parent, CatalogManager manager) { super(parent); catalogManager = manager; catalogResolver = new CatalogResolver(catalogManager); } /** * Provide accessto the underlying Catalog. */ public Catalog getCatalog() { return catalogResolver.getCatalog(); } /** * SAX XMLReader API. * *

Note that the JAXP 1.1ea2 parser crashes with an InternalError if * it encounters a system identifier that appears to be a relative URI * that begins with a slash. For example, the declaration:

* *
   * <!DOCTYPE book SYSTEM "/path/to/dtd/on/my/system/docbookx.dtd">
   * 
* *

would cause such an error. As a convenience, this method catches * that error and prints an explanation. (Unfortunately, it's not possible * to identify the particular system identifier that causes the problem.) *

* *

The underlying error is forwarded after printing the explanatory * message. The message is only every printed once and if * suppressExplanation is set to false before * parsing, it will never be printed.

*/ public void parse(InputSource input) throws IOException, SAXException { allowXMLCatalogPI = true; setupBaseURI(input.getSystemId()); try { super.parse(input); } catch (InternalError ie) { explain(input.getSystemId()); throw ie; } } /** SAX XMLReader API. * * @see #parse(InputSource) */ public void parse(String systemId) throws IOException, SAXException { allowXMLCatalogPI = true; setupBaseURI(systemId); try { super.parse(systemId); } catch (InternalError ie) { explain(systemId); throw ie; } } /** * Implements the resolveEntity method * for the SAX interface, using an underlying CatalogResolver * to do the real work. */ public InputSource resolveEntity (String publicId, String systemId) { allowXMLCatalogPI = false; String resolved = catalogResolver.getResolvedEntity(publicId, systemId); if (resolved == null && piCatalogResolver != null) { resolved = piCatalogResolver.getResolvedEntity(publicId, systemId); } if (resolved != null) { try { InputSource iSource = new InputSource(resolved); iSource.setPublicId(publicId); // Ideally this method would not attempt to open the // InputStream, but there is a bug (in Xerces, at least) // that causes the parser to mistakenly open the wrong // system identifier if the returned InputSource does // not have a byteStream. // // It could be argued that we still shouldn't do this here, // but since the purpose of calling the entityResolver is // almost certainly to open the input stream, it seems to // do little harm. // URL url = new URL(resolved); InputStream iStream = url.openStream(); iSource.setByteStream(iStream); return iSource; } catch (Exception e) { catalogManager.debug.message(1, "Failed to create InputSource (" + e.toString() + ")", resolved); return null; } } else { return null; } } /** SAX DTDHandler API. * *

Captured here only to detect the end of the prolog so that * we can ignore subsequent oasis-xml-catalog PIs. Otherwise * the events are just passed through.

*/ public void notationDecl (String name, String publicId, String systemId) throws SAXException { allowXMLCatalogPI = false; super.notationDecl(name,publicId,systemId); } /** SAX DTDHandler API. * *

Captured here only to detect the end of the prolog so that * we can ignore subsequent oasis-xml-catalog PIs. Otherwise * the events are just passed through.

*/ public void unparsedEntityDecl (String name, String publicId, String systemId, String notationName) throws SAXException { allowXMLCatalogPI = false; super.unparsedEntityDecl (name, publicId, systemId, notationName); } /** SAX ContentHandler API. * *

Captured here only to detect the end of the prolog so that * we can ignore subsequent oasis-xml-catalog PIs. Otherwise * the events are just passed through.

*/ public void startElement (String uri, String localName, String qName, Attributes atts) throws SAXException { allowXMLCatalogPI = false; super.startElement(uri,localName,qName,atts); } /** SAX ContentHandler API. * *

Detect and use the oasis-xml-catalog PI if it occurs.

*/ public void processingInstruction(String target, String pidata) throws SAXException { if (target.equals("oasis-xml-catalog")) { URL catalog = null; String data = pidata; int pos = data.indexOf("catalog="); if (pos >= 0) { data = data.substring(pos+8); if (data.length() > 1) { String quote = data.substring(0,1); data = data.substring(1); pos = data.indexOf(quote); if (pos >= 0) { data = data.substring(0, pos); try { if (baseURL != null) { catalog = new URL(baseURL, data); } else { catalog = new URL(data); } } catch (MalformedURLException mue) { // nevermind } } } } if (allowXMLCatalogPI) { if (catalogManager.getAllowOasisXMLCatalogPI()) { catalogManager.debug.message(4,"oasis-xml-catalog PI", pidata); if (catalog != null) { try { catalogManager.debug.message(4,"oasis-xml-catalog", catalog.toString()); oasisXMLCatalogPI = true; if (piCatalogResolver == null) { piCatalogResolver = new CatalogResolver(true); } piCatalogResolver.getCatalog().parseCatalog(catalog.toString()); } catch (Exception e) { catalogManager.debug.message(3, "Exception parsing oasis-xml-catalog: " + catalog.toString()); } } else { catalogManager.debug.message(3, "PI oasis-xml-catalog unparseable: " + pidata); } } else { catalogManager.debug.message(4,"PI oasis-xml-catalog ignored: " + pidata); } } else { catalogManager.debug.message(3, "PI oasis-xml-catalog occurred in an invalid place: " + pidata); } } else { super.processingInstruction(target, pidata); } } /** Save the base URI of the document being parsed. */ private void setupBaseURI(String systemId) { URL cwd = null; try { cwd = FileURL.makeURL("basename"); } catch (MalformedURLException mue) { cwd = null; } try { baseURL = new URL(systemId); } catch (MalformedURLException mue) { if (cwd != null) { try { baseURL = new URL(cwd, systemId); } catch (MalformedURLException mue2) { // give up baseURL = null; } } else { // give up baseURL = null; } } } /** Provide one possible explanation for an InternalError. */ private void explain(String systemId) { if (!suppressExplanation) { System.out.println("XMLReader probably encountered bad URI in " + systemId); System.out.println("For example, replace '/some/uri' with 'file:/some/uri'."); } suppressExplanation = true; } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/tools/ResolvingXMLReader.java100644 0 0 5716 10530407252 25541 0ustar 0 0 // ResolvingXMLReader.java - An XMLReader that performs catalog resolution /* * 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.xml.resolver.tools; import org.xml.sax.*; import javax.xml.parsers.*; import org.apache.xml.resolver.*; /** * A SAX XMLReader that performs catalog-based entity resolution. * *

This class implements a SAX XMLReader that performs entity resolution * using the CatalogResolver. The actual, underlying parser is obtained * from a SAXParserFactory.

*

* * @see CatalogResolver * @see org.xml.sax.XMLReader * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class ResolvingXMLReader extends ResolvingXMLFilter { /** Make the parser Namespace aware? */ public static boolean namespaceAware = true; /** Make the parser validating? */ public static boolean validating = false; /** * Construct a new reader from the JAXP factory. * *

In order to do its job, a ResolvingXMLReader must in fact be * a filter. So the only difference between this code and the filter * code is that the constructor builds a new reader.

*/ public ResolvingXMLReader() { super(); SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(namespaceAware); spf.setValidating(validating); try { SAXParser parser = spf.newSAXParser(); setParent(parser.getXMLReader()); } catch (Exception ex) { ex.printStackTrace(); } } /** * Construct a new reader from the JAXP factory. * *

In order to do its job, a ResolvingXMLReader must in fact be * a filter. So the only difference between this code and the filter * code is that the constructor builds a new reader.

*/ public ResolvingXMLReader(CatalogManager manager) { super(manager); SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(namespaceAware); spf.setValidating(validating); try { SAXParser parser = spf.newSAXParser(); setParent(parser.getXMLReader()); } catch (Exception ex) { ex.printStackTrace(); } } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/tools/package.html100644 0 0 4404 10530407252 23474 0ustar 0 0 Apache XML Commons Resolver Tools package

Apache XML Commons Resolver Tools package.

This package implements several tool classes for catalog-based entity resolution:

org.apache.xml.resolver.tools.CatalogResolver
This class provides a SAX EntityResolver and a JAXP URIResolver.
org.apache.xml.resolver.tools.ResolvingXMLReader
This class provides a SAX2 XMLReader with catalog support. The parser uses a CatalogResolver to provide entity resolution.
org.apache.xml.resolver.tools.ResolvingParser
This class provides a SAX1 Parser with catalog support. The parser uses a CatalogResolver to provide entity resolution.

Typically, these classes can be used in other applications. For example, running the Saxon XSLT processor with the arguments:

    -x org.apache.xml.resolver.tools.ResolvingXMLReader
    -y org.apache.xml.resolver.tools.ResolvingXMLReader
    -r org.apache.xml.resolver.tools.CatalogResolver

will provide catalog-based entity resolution for all of the entities and stylesheets that you use. (The CatalogResolver can only be used with Saxon 6.1 or later.)

Requirements

In order to use these classes, you must have the JAXP 1.1 jar files in your CLASSPATH.

)) { URL catalog = null; String data = pidata; int pos = data.indexOf("catalog="); if (pos >= 0) { data = data.substring(pos+8); if (data.length() > 1) { String quote = data.substring(0,1); data = data.substring(1); pos = data.indexOf(quote); if (pos >= 0) { data = data.substring(0, pos); try { if (baseURL != null) { catalog = new URL(baseURL, data); } else { catalog = new URL(data); } } catch (MalformedURLException mue) { // nevermind } } } } if (allowXMLCatalogPI) { if (catalogManager.getAllowOasisXMLCatalogPI()) { catalogManager.debug.message(4,"oasis-xml-catalog PI", pidata); if (catalog != null) { try { catalogManager.debug.message(4,"oasis-xml-catalog", catalog.toString()); oasisXMLCatalogPI = true; if (piCatalogResolver == null) { piCatalogResolver = new CatalogResolver(true); } piCatalogResolver.getCatalog().parseCatalog(catalog.toString()); } catch (Exception e) { catalogManager.debug.message(3, "Exception parsing oasis-xml-catalog: " + catalog.toString()); } } else { catalogManager.debug.message(3, "PI oasis-xml-catalog unparseable: " + pidata); } } else { catalogManager.debug.message(4,"PI oasis-xml-catalog ignored: " + pidata); } } else { catalogManager.debug.message(3, "PI oasis-xml-catalog occurred in an invalid place: " + pidata); } } else { super.processingInstruction(target, pidata); } } /** Save the base URI of the document being parsed. */ private void setupBaseURI(String systemId) { URL cwd = null; try { cwd = FileURL.makeURL("basename"); } catch (MalformedURLException mue) { cwd = null; } try { baseURL = new URL(systemId); } catch (MalformedURLException mue) { if (cwd != null) { try { baseURL = new URL(cwd, systemId); } catch (MalformedURLException mue2) { // give up baseURL = null; } } else { // give up baseURL = null; } } } /** Provide one possible explanation for an InternalError. */ private void explain(String systemId) { if (!suppressExplanation) { System.out.println("XMLReader probably encountered bad URI in " + systemId); System.out.println("For example, replace '/some/uri' with 'file:/some/uri'."); } suppressExplanation = true; } } xml-commons-resolver-1.2/src/org/apache/xml/resolver/tools/ResolvingXMLReader.java100644 0 0 5716 10530407252 25541 0ustar 0 0 // ResolvingXMLReader.java - An XMLReader that performs catalog resolution /* * 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.xml.resolver.tools; import org.xml.sax.*; import javax.xml.parsers.*; import org.apache.xml.resolver.*; /** * A SAX XMLReader that performs catalog-based entity resolution. * *

This class implements a SAX XMLReader that performs entity resolution * using the CatalogResolver. The actual, underlying parser is obtained * from a SAXParserFactory.

*

* * @see CatalogResolver * @see org.xml.sax.XMLReader * * @author Norman Walsh * Norman.Walsh@Sun.COM * * @version 1.0 */ public class ResolvingXMLReader extends ResolvingXMLFilter { /** Make the parser Namespace aware? */ public static boolean namespaceAware = true; /** Make the parser validating? */ public static boolean validating = false; /** * Construct a new reader from the JAXP factory. * *

In order to do its job, a ResolvingXMLReader must in fact be * a filter. So the only difference between this code and the filter * code is that the constructor builds a new reader.

*/ public ResolvingXMLReader() { super(); SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(namespaceAware); spf.setValidating(validating); try { SAXParser parser = spf.newSAXParser(); setParent(parser.getXMLReader()); } catch (Exception ex) { ex.printStackTrace(); } } /** * Construct a new reader from the JAXP factory. * *

In order to do its job, a ResolvingXMLReader must in fact be * a filter. So the only difference between this code and the fil