2017-07-17 8 views
0

は、私は、次のコードを持っている:のTransformerFactoryとXalanの依存関係紛争

javax.xml.transform.TransformerFactory factory = TransformerFactory.newInstance(); 
factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); 
javax.xml.transform.Transformer transformer = factory.newTransformer(); 

これは通常、正常に動作します。しかし、私はまた私のpom.xmlでの依存関係としてのXalanを追加する必要があり、そして私が行うとき、上記のコードは現在、エラーがスローされます:

java.lang.IllegalArgumentException: Not supported: http://javax.xml.XMLConstants/property/accessExternalDTD 

私はそれが実際にそのXalanののjarとは何かを持っていると思いますTransformerの実装が異なります。上記のコードを変更せずにXalanを依存関係にすることなく、この矛盾を解決する方法はありますか? Xalanのから

+0

は、なぜあなたはXalanの依存関係が必要なのでしょうか? Xalanは、JDK 1.4から支持されています。通常の状況下では必要ない。 – fhossfel

+0

私はすべてのJava XMLパーサーの単体テストを持つWebアプリケーションを作っています。 – Dean

答えて

1

除くXercesのは、この問題が修正されています。

<dependency> 
    <groupId>xalan</groupId> 
    <artifactId>xalan</artifactId> 
    <version>2.7.2</version> 
    <exclusions> 
     <exclusion> 
      <groupId>xerces</groupId> 
      <artifactId>xercesImpl</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
0

あなたが複数のXSLプロセッサおよびまたは異なるバージョンであれば、あなたがいないすべての実装がすべての属性を処理することができるようになりますケースを処理する必要があります。これを行う唯一の方法は、属性がサポートされていない場合にスローされるIllegalArgumentExceptionをキャッチすることです。 JAXP documentationから、この変形例を見てみましょう:

javax.xml.transform.TransformerFactory factory = TransformerFactory.newInstance(); 

try { 
    factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); 
} catch (IllegalArgumentException e) { 
    //jaxp 1.5 feature not supported 
} 

ドキュメントは言う:

When code change is possible, and for new development, it is recommended that the new properties be set as demonstrated above. By setting the properties this way, applications can be sure to maintain the desired behavior whether they are deployed to older or newer version of the JDK, or whether the properties are set through System Properties or jaxp.properties.

関連する問題