我遇到了Saxon和WildFly 10.0.0.Final的問題。我編寫了一些XSLT,當我運行單元測試時它們能夠正常工作,但當我在Wildfly上運行相同的代碼時,我遇到了問題。如何正確使用撒克遜蜻蜓?
在我的pom.xml我有依賴關係是這樣的:
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>9.8.0-4</version>
</dependency>
我想撒克遜的幾個版本,甚至我把它換成Xalan的,但我依然得到了同樣的問題。它在單元測試中工作,但從未與Wildfly一起工作。問題是「Wildfly case」只是忽略了XSLT的某些部分。例如,這部分被忽略:
<xsl:for-each select="$var33_Tracking/ns0:PartyIdentification/ns0:Location">
<xsl:variable name="var13_LatLong" as="node()" select="ns0:LatLong"/>
<xsl:variable name="var12_cur_as_string" as="xs:string" select="fn:string($var13_LatLong)"/>
<xsl:variable name="var14_result" as="xs:string?">
<xsl:choose>
<xsl:when test="(fn:string(fn:string-length($var12_cur_as_string)) > '0')">
<xsl:sequence select="$var12_cur_as_string"/>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="ns0:GeoLoc">
<xsl:sequence select="fn:string(.)"/>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:for-each select="$var14_result">
<LatitudinalHemisphere>
<xsl:choose>
<xsl:when test="(fn:substring-before(., ',') < '0')">
<xsl:sequence select="'S'"/>
</xsl:when>
<xsl:otherwise>
<xsl:sequence select="'N'"/>
</xsl:otherwise>
</xsl:choose>
</LatitudinalHemisphere>
</xsl:for-each>
</xsl:for-each>
它看起來像一些功能: fn:string-length
或fn:substring-before
可能導致此問題,但我無法弄清楚如何解決這個問題。任何想法或提示?
如果有人在這裏甚至可以開始回答,但沒有關於如何嘗試在Wildfly中使用受影響的XSLT的信息,我會感到驚訝。一般來說,「一些信息」應該是[mcve]。我承認這對於部署在應用程序服務器中的東西可能很難,但當然你可以提供更多的上下文和更少的東西。 –