2016-09-23 49 views
0

我們想運行XSpec作爲Maven構建的一部分來檢查我們的XSL轉換。插件可從GitHub獲得。使用Maven和Saxon-PE7運行XSpec

Error at xsl:if on line 194 column 75 of dyxml_table_cals.xsl: 
XPST0017 XPath syntax error at char 0 on line 194 near {...table-enumeration-condition...}: 
Cannot find a matching 2-argument function named {http://saxon.sf.net/}evaluate(). 
Saxon extension functions are not available under Saxon-HE 

我們擁有了PE牌照:當XSL的樣式表,我們覈對調用功能不可用撒克遜-HE,這樣看問題就出現了。 According to the Saxon documentation當沒有許可證信息可用時,增強版本將恢復爲開源HE,這似乎就是這種情況。是否有可能通過Maven激活PE,例如使用codehaus的插件,看起來如何?我們已經通過Java使用了一種激活方式,但是要知道另一種方式,如果可能的話,可以說更優雅的方式將會有所幫助。

回答

0

一些試驗和錯誤,我們發現了以下解決方案後進行工作:

  1. 上面鏈接的XSpec - Maven的插件的創建者硬編碼使用未經許可的撒克遜 - HE。特別是,下面一行是造成問題:

    private final static Processor processor = new Processor(false); 
    

    我們分叉的代碼,並把它改爲:

    private final static Processor processor = new Processor(true); 
    
  2. 我們建立了一個自定義類來激活許可證,並將其集成到插件的源代碼。 (無法在此處發佈代碼)

解決了許可問題。現在我們的XSpec測試正在運行。是的,我們!

0

我對XSpec的Maven插件不是很熟悉,但我試着給出一些提示和解決方法。

你提到的Maven插件的pom.xml中包含的依賴撒克遜的版本中使用:

<dependency> 
    <groupId>net.sf.saxon</groupId> 
    <artifactId>Saxon-HE</artifactId> 
    <version>9.7.0-1</version> 
</dependency> 

你應該爲了使用撒克遜-PE或撒克遜-EE指定撒克遜版本。但是,這些撒克遜版本似乎並不在公共Maven倉庫中可用,因爲與Saxon-HE不同,它們是專有軟件。我想你可以把Saxon-PE的.jar文件放在本地存儲庫中(參見Maven文檔)。我建議將.lic許可證文件放在與.jar文件相同的目錄中。

另外兩個提示,可以幫助您找到一個解決辦法:

  • XSpec允許指定shell或批處理腳本中的環境變量撒克遜版本。然後,您可以使用例如exec-maven-plugin在Maven項目中運行一個shell腳本。這並不理想,但對您的使用情況來說可能已足夠。
  • another Maven plugin運行XSpec,你可能也想檢查一下。

希望它可以幫助...

+0

感謝您的幫助。我嘗試了第一種建議:從GitHub中提取插件代碼並替換依賴項。但是,現在問題似乎是Saxon發行版沒有找到許可證(它位於與SaxonPE.jar相同的目錄中)。到現在爲止,我們找到了一個解決方案,我將作爲一個單獨的答案發布。 – styks

+0

從包含JAR的目錄中拾取許可證似乎適用於大多數配置,但不是全部。我認爲這取決於正在使用的ClassLoader。 –