7

Apache Web サービス xml rpc ライブラリを使用して、rpc サービスへの要求を行っています。そのプロセスのどこかに、http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtdへの DTD 参照を含む xml ドキュメントがあり、ライブラリは XML の解析時にダウンロードを試みます。そのダウンロードは 503 ステータス コードで失敗します。これは、w3c が Java クライアントからのこの主に静的なドキュメントの繰り返しのダウンロードをブロックしているためです。

解決策は、DTD をローカルにキャッシュする XML カタログです。ただし、JAXP SAXParser インスタンスで EntityHandler を直接設定して、カタログ パーサーのサポートを有効にする例を見つけることはできますが、実際にはここで基礎となるパーサーにアクセスすることはできません。xml rpc ライブラリによって使用されているだけです。グローバル プロパティまたは JAXP に XML カタログを使用するように指示する何かを設定する方法はありますか?

4

2 に答える 2

1

残念ながら、xml.catalog.files を設定してもパーサー ファクトリには影響しません。もちろん、理想的にはそうすべきですが、リゾルバーを使用する唯一の方法は、SAX パーサーが使用するハンドラー内のカタログ リゾルバーに解決を委譲するメソッドを追加することです。

すでに SAX パーサーを使用している場合、それは非常に簡単です。

 final CatalogResolver catalogResolver = new CatalogResolver();
  DefaultHandler handler = new DefaultHandler() {
        public InputSource resolveEntity (String publicId, String systemId) {
            return catalogResolver.resolveEntity(publicId, systemId);
        }
        public void startElement(String namespaceURI, String lname, String qname,
           Attributes attrs) { 
           // the stuff you'd normally do
        }
        ...
     };

  SAXParserFactory factory = SAXParserFactory.newInstance();
  factory.setNamespaceAware(true);
  SAXParser saxParser = factory.newSAXParser();
  String url = args.length == 0 ? "http://horstmann.com/index.html" : args[0];
  saxParser.parse(new URL(url).openStream(), handler);

それ以外の場合は、独自のエンティティ リゾルバーを提供できるかどうかを判断する必要があります。javax.xml.parsers.DocumentBuilder を使用すると、それが可能になります。scala.xml.XML オブジェクトでは、サブターフュージを使用することはできませんが、使用できます。

val res = new com.sun.org.apache.xml.internal.resolver.tools.CatalogResolver

val loader = new factory.XMLLoader[Elem] {
  override def adapter = new parsing.NoBindingFactoryAdapter() {
    override def resolveEntity(publicId: String, systemId: String) = {
      res.resolveEntity(publicId, systemId) 
    }
  }
}

val doc = loader.load(new URL("http://horstmann.com/index.html"))enter code here
于 2011-12-13T17:34:25.943 に答える
1

システムプロパティが必要だと思いますxml.catalog.files

http://xml.apache.org/commons/components/resolver/resolver-article.htmlをご覧ください。

ところで、これはGoogle検索での3番目のヒットでしたjaxp catalog

于 2010-06-18T15:38:43.600 に答える