我计划将XSL 3.0版用于我的WSO2 EI应用程序。因为,我需要在应用程序中将JSON映射到JSON,并将JSON映射到XML。目前,我已经尝试使用2.0版。请参考以下代码以了解当前的实现。
我需要知道如何更改此版本以及xsl 3.0版在WSO2EI中需要哪个jar。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:param name="STATIC_BODY_PARAM"></xsl:param>
<xsl:template match="/availabilityRequest">
<availabilityRequest>
<control>
<userName>
<xsl:value-of select="control/userName" />
</userName>
<passWord>
<xsl:value-of select="control/passWord" />
</passWord>
</control>
....................
</availabilityRequest>
</xsl:template>
</xsl:stylesheet>
当我使用3.0版本时,出现以下错误消息。我添加了您的进一步参考。
ERROR - XSLTMediator Error creating XSLT transformer using : Value {name ='null', expression =fn:concat('gov:repository/transformation/',$ctx:uri.var.travel_type,'_',$ctx:uri.var.activity,'_',$ctx:uri.var.supplier_id,'_in.xslt')}
net.sf.saxon.trans.LicenseException: Requested feature (XSLT 3.0) requires Saxon-PE
at net.sf.saxon.Configuration.checkLicensedFeature(Configuration.java:584)
at net.sf.saxon.PreparedStylesheet.setStylesheetDocument(PreparedStylesheet.java:331)
at net.sf.saxon.PreparedStylesheet.prepare(PreparedStylesheet.java:207)
at net.sf.saxon.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:132)
at org.apache.synapse.mediators.transform.XSLTMediator.createTemplate(XSLTMediator.java:467)
答案 0 :(得分:1)
我对WSO2EI并不了解,但是(从您的链接)它似乎正在与某些旧版本的Saxon-HE一起运行。
仅将Saxon 9.9 JAR文件替换为与产品一起分发的文件可能会起作用,也可能不会起作用。这很有可能起作用,但是样式表或调用应用程序可能取决于Saxon中已更改的内容。
如果您尝试过某些操作,那就没有必要告诉我们它不起作用。您需要确切告诉我们它是如何失败的。
您应该尝试运行一个输出system-property('xsl:product-version')
值的样式表,以便对所选择的Saxon版本有肯定的确认。
使用XSLT 3.0功能不需要对样式表进行任何更改,但是出于文档原因,最好将version属性更改为version="3.0"
。
答案 1 :(得分:1)
我已使用以下信息解决了上述问题。
我从以下链接中获得了这些详细信息。非常感谢。 http://nandikajayawardana.blogspot.com/2012/12/how-to-replace-saxonhe940wso2v1jar-in.html