Używam Xalana w mojej aplikacji, ale muszę użyć Saxona z referencyjną implementacją, aby wygenerować wynik testu, z którym można porównać. Chcę ich używać zarówno podczas testów jednostkowych. Jednakże, jak tylko mogę dodać zależność od Saxon w .pom projektu, wniosek wydaje się używać Saxon dla wszystkich operacji XSLT i XPath podczas testów:Używanie Xalana wraz z Saxonem
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>9.4</version>
<scope>test</scope>
</dependency>
To sprawia, że główny wniosek nie podczas generowania wyjście należytej do innego zachowania XPath. Podczas działania głównej aplikacji poza zakresem testowym działa.
Jak mogę uruchomić główną aplikację przy użyciu Xalan, ale testy przy użyciu Saxon, podczas testów?
Próbowałem ustawienie następującą właściwość przed uruchomieniem XALAN i saksońskiej części:
System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl ");
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");
Próbowałem również umieścić części XALAN i Saxon w różnych projektach, a ja również starał się je zarówno do użytku z trzeciego projektu, z tym samym wynikiem.
To IT XPath część jednak zawodzi. Czy istnieje sposób na powiedzenie XPathFactory, aby używał domyślnej implementacji? Ta odpowiedź mówi, jak zrobić coś przeciwnego, skorzystaj z implementacji Saxona http://stackoverflow.com/questions/926222/using-saxon-xpath-engine-in-java. – Danik
To byłby org.apache.xpath.jaxp.XPathFactoryImpl zgodnie z http://www.jarvana.com/jarvana/view/xalan/xalan/2.7.0/xalan-2.7.0.jar!/org/apache/ xpath/jaxp/XPathFactoryImpl.class? classDetails = ok. W każdym razie proponuję użyć mechanizmu JAXP do Twojej aplikacji, zamiast uzależniać ją od implementacji, chyba że masz wyjątkowe zastosowania w swojej aplikacji. W testach używaj tylko kodu zależnego od imp. –
Nie zgadzam się. Wiele osób potknie się, ponieważ używają mechanizmu JAXP i przechwytują procesor XPath 2.0, gdy ich aplikacja wymaga procesora XPath 1.0. Nie można jawnie poprosić o procesor XPath 1.0; jeśli nie powiesz, czego chcesz, nie wiesz, co dostaniesz, i może nie działać. –