Java Saxon转换错误-XTDE1450:未知的扩展指令

Java Saxon转换错误-XTDE1450:未知的扩展指令,java,mysql,xslt,xslt-2.0,saxon,Java,Mysql,Xslt,Xslt 2.0,Saxon,我试图使用SQL查询从XSLT2.0查询MySQL数据库,并在XSLT文件中填充一个参数。我正在使用saxon9ee.jar以及saxon9sql.jar 我找到了链接,但没有解决我的问题 我得到以下错误: Connecting MySQL... Connected... Error on line 43 of DB_Query_XSLT_Test.xsl: XTDE1450: Unknown extension instruction ; SystemID: file:///C:/User

我试图使用SQL查询从XSLT2.0查询MySQL数据库,并在XSLT文件中填充一个参数。我正在使用
saxon9ee.jar
以及
saxon9sql.jar

我找到了链接,但没有解决我的问题

我得到以下错误:

Connecting MySQL...
Connected...
Error on line 43 of DB_Query_XSLT_Test.xsl:
  XTDE1450: Unknown extension instruction
; SystemID: file:///C:/Users/davo/platform/src/config/xslt/DB_Query_XSLT_Test.xsl; Line#: 43; Column#: -1
net.sf.saxon.trans.XPathException: Unknown extension instruction
    at net.sf.saxon.expr.ErrorExpression.evaluateItem(ErrorExpression.java:58)
    at net.sf.saxon.expr.ErrorExpression.iterate(ErrorExpression.java:71)
    at net.sf.saxon.expr.Expression.process(Expression.java:467)
    at net.sf.saxon.instruct.DocumentInstr.evaluateItem(DocumentInstr.java:305)
    at net.sf.saxon.functions.StringFn.evaluateItem(StringFn.java:62)
    at net.sf.saxon.instruct.ValueOf.processLeavingTail(ValueOf.java:246)
    at net.sf.saxon.instruct.Block.processLeavingTail(Block.java:619)
    at net.sf.saxon.instruct.Instruction.process(Instruction.java:93)
    at net.sf.saxon.instruct.ElementCreator.processLeavingTail(ElementCreator.java:301)
    at net.sf.saxon.instruct.Instruction.process(Instruction.java:93)
    at net.sf.saxon.instruct.ElementCreator.processLeavingTail(ElementCreator.java:301)
    at net.sf.saxon.instruct.Instruction.process(Instruction.java:93)
    at net.sf.saxon.instruct.ElementCreator.processLeavingTail(ElementCreator.java:301)
    at net.sf.saxon.instruct.Block.processLeavingTail(Block.java:619)
    at net.sf.saxon.instruct.Instruction.process(Instruction.java:93)
    at net.sf.saxon.instruct.ElementCreator.processLeavingTail(ElementCreator.java:301)
    at net.sf.saxon.instruct.Template.applyLeavingTail(Template.java:229)
    at net.sf.saxon.instruct.ApplyTemplates.applyTemplates(ApplyTemplates.java:354)
    at net.sf.saxon.Controller.transformDocument(Controller.java:1849)
    at net.sf.saxon.Controller.transform(Controller.java:1700)
    at com.alu.ipprd.aor.fsw.tt.util.xml.transform.XSLTUtil.transformXML(XSLTUtil.java:52)
    at com.alu.ipprd.aor.fsw.tt.util.xml.transform.XSLTUtil.main(XSLTUtil.java:214)
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:tro="http://www.example.org/TroubleTicketWS_v3/">
   <soapenv:Header/>
   <soapenv:Body>
      <tro:CreateTroubleTicketByValueRequest
正在连接MySQL。。。
有联系的。。。
DB_Query_XSLT_Test.xsl第43行出错:
XTDE1450:未知的扩展指令
; 系统ID:file:///C:/Users/davo/platform/src/config/xslt/DB_Query_XSLT_Test.xsl; 第#:43行;列#::-1
net.sf.saxon.trans.XPathException:未知的扩展指令
位于net.sf.saxon.expr.ErrorExpression.evaluateItem(ErrorExpression.java:58)
在net.sf.saxon.expr.ErrorExpression.iterate(ErrorExpression.java:71)
位于net.sf.saxon.expr.Expression.process(Expression.java:467)
位于net.sf.saxon.instruction.DocumentInstr.evaluateItem(DocumentInstr.java:305)
位于net.sf.saxon.functions.StringFn.evaluateItem(StringFn.java:62)
位于net.sf.saxon.instruction.ValueOf.processLeavingTail(ValueOf.java:246)
net.sf.saxon.instruction.Block.processLeavingTail(Block.java:619)
at net.sf.saxon.Instruction.Instruction.process(Instruction.java:93)
位于net.sf.saxon.direction.ElementCreator.processLeavingTail(ElementCreator.java:301)
at net.sf.saxon.Instruction.Instruction.process(Instruction.java:93)
位于net.sf.saxon.direction.ElementCreator.processLeavingTail(ElementCreator.java:301)
at net.sf.saxon.Instruction.Instruction.process(Instruction.java:93)
位于net.sf.saxon.direction.ElementCreator.processLeavingTail(ElementCreator.java:301)
net.sf.saxon.instruction.Block.processLeavingTail(Block.java:619)
at net.sf.saxon.Instruction.Instruction.process(Instruction.java:93)
位于net.sf.saxon.direction.ElementCreator.processLeavingTail(ElementCreator.java:301)
位于net.sf.saxon.instruction.Template.applyLeavingTail(Template.java:229)
位于net.sf.saxon.instruction.ApplyTemplates.ApplyTemplates(ApplyTemplates.java:354)
位于net.sf.saxon.Controller.transformDocument(Controller.java:1849)
at net.sf.saxon.Controller.transform(Controller.java:1700)
位于com.alu.ipprd.aor.fsw.tt.util.xml.transform.XSLTUtil.transformXML(XSLTUtil.java:52)
位于com.alu.ipprd.aor.fsw.tt.util.xml.transform.XSLTUtil.main(XSLTUtil.java:214)

您有
import net.sf.saxon.TransformerFactoryImpl
工厂=新的TransformerFactoryImpl()
,要使用Saxon EE,您需要导入com.saxonica.config.EnterpriseTransformerFactory
工厂=新企业TransformerFactory()。请参阅。

您确定您的Java代码使用Saxon EE创建了一个
转换器吗?您是否可以调试并查看您创建的
transformer
具有哪个类?您是否知道可以添加到pom.xml以支持Saxon EE的maven依赖项?在更新建议的更改后,我也会收到相同的错误。堆栈跟踪现在是否至少没有不同?是否有迹象表明使用EE代替HE?您是否拥有类路径上Saxon EE的许可证?您使用的是哪一版本的Saxon EE?跟踪没有变化。我在类路径中添加了saxon9ee.jar。我不知道这里的许可是什么意思。您需要一个来自Saxonica的许可文件才能使用Saxon EE或PE,并且该许可文件必须位于类路径上。你有Saxonica的执照吗?如果没有,您首先需要购买许可证,或者至少向他们申请试用许可证,以便能够使用EE或PE。
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:sql="http://saxon.sf.net/sql" 
    extension-element-prefixes="sql" 
    exclude-result-prefixes="xs">

    <xsl:output method="xml" encoding="UTF-8" indent="yes" />

    <xsl:variable name="driver" select="'com.mysql.jdbc.Driver'"
        as="xs:string" />
    <xsl:variable name="database"
        select="'jdbc:mysql://xxx.xxx.xxx.xxx:3306/platform'" as="xs:string" />
    <xsl:variable name="user" select="'dbremote'" as="xs:string" />
    <xsl:variable name="password" select="'dbremote'" as="xs:string" />

    <xsl:template match="/">
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
            xmlns:tro="http://www.example.org/TroubleTicketWS_v3/">
            <soapenv:Header />
            <soapenv:Body>
                <tro:CreateTroubleTicketByValueRequest>
                    <ticketkey>
                        <xsl:message>Connecting MySQL...</xsl:message>
                        <xsl:variable name="connection" as="java:java.sql.Connection" xmlns:java="http://saxon.sf.net/java-type">
                            <sql:connect driver="{$driver}" database="{$database}" user="{$user}" password="{$password}">
                                <xsl:fallback>
                                    <xsl:message terminate="yes">Connection to MySQL failed.</xsl:message>
                                </xsl:fallback>
                            </sql:connect>
                        </xsl:variable>

                        <xsl:message>Connected...</xsl:message>

                        <xsl:variable name="internalticketid" select="/tTroubleticket/internalticketid" />

                        <xsl:variable name="troubleticketkey">
                            <sql:query connection="$connection" table="T_TROUBLETICKET"
                                column="TROUBLETICKETKEY" row-tag="ticket" column-tag="ttf"
                                where="INTERNALTICKETID={$internalticketid}" />
                        </xsl:variable>

                        <xsl:value-of select="$troubleticketkey" />
                    </ticketkey>
                </tro:CreateTroubleTicketByValueRequest>
            </soapenv:Body>
        </soapenv:Envelope>
    </xsl:template>
</xsl:stylesheet>
package com.fsw.tt.util.xml.transform;

import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

//import net.sf.saxon.TransformerFactoryImpl;
import com.saxonica.config.EnterpriseTransformerFactory; 

public class XSLTUtil {

    TransformerFactory factory = null;
    public XSLTUtil() {
        //factory = new TransformerFactoryImpl();
        factory = new EnterpriseTransformerFactory();
    }

    public String transformXML(String inXML, String XSLTFilename) throws TransformerFactoryConfigurationError, TransformerException {
        StringWriter xmlResultResource = new StringWriter();
        try {
            Source xslDoc = new StreamSource(XSLTFilename);
            Transformer transformer = factory.newTransformer(xslDoc);
            transformer.transform(new StreamSource(new StringReader(inXML)), new StreamResult(xmlResultResource));
        } catch (TransformerException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return xmlResultResource.getBuffer().toString();
    }

    public static void main(String[] args) throws TransformerFactoryConfigurationError, TransformerException {

        String xmlSourceResource = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" 
            + "<tTroubleticket>" 
                + "<internalticketid>INC0789543765790</internalticketid>"
            + "</tTroubleticket>";

        String xsltFilename = "C:/Users/davo/platform/src/config/xslt/DB_Query_XSLT_Test.xsl";

        XSLTUtil util = new XSLTUtil();
        String transformedXML = util.transformXML(xmlSourceResource, xsltFilename);
        System.out.println(transformedXML);

    }
}