沙兰+;XSLT+;JAVA

沙兰+;XSLT+;JAVA,java,xslt,xalan,Java,Xslt,Xalan,我的xsl文件 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:good="xalan://com.epam.laba.model.Good" xmlns:validator="xalan://com.epam.laba.validator.ValidatorXslGood"> <xsl:include href="parameter.xsl"/

我的xsl文件

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:good="xalan://com.epam.laba.model.Good"
xmlns:validator="xalan://com.epam.laba.validator.ValidatorXslGood">

    <xsl:include href="parameter.xsl"/>
    <xsl:param name="validator"/>
    <xsl:param name="good"/>

    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/|node()|@*">
        <xsl:if test="validator:validateGood($good)">
            <xsl:copy>
                <xsl:apply-templates
                select="node()|@*" />
            </xsl:copy>
        </xsl:if>
    </xsl:template>
但是

非静态Java函数“validateGood”的第一个参数不是有效的对象引用。 无法将数据类型“void”转换为“boolean”

你能解释一下怎么了吗

UPD:

ValidatorXslGood.java代码:

public class ValidatorXslGood {

private Good good;

private Map<String, String> setErrors;
private ResourceBundleManager errorManager;

public ValidatorXslGood() {
    errorManager = new ResourceBundleManager();
    errorManager.setResourceBundle(RESOURCE_BUNDLE__FOR_ERROR_FILE);
}

public Good getGood() {
    return good;
}

public void setGood(Good good) {
    this.good = good;
}

public boolean validateGood(Good good) {
    if (checkingName(good.getName())) {
        return true;
    } else {
        return false;
    }
}
公共类验证器很好{
私善;
私有映射集错误;
私有资源BundleManager errorManager;
公共物品{
errorManager=new ResourceBundleManager();
setResourceBundle(用于错误文件的资源包);
}
公益{
归还货物;
}
公共物品(良品){
this.good=好;
}
公共布尔validateGood(良好){
if(checkingName(good.getName())){
返回true;
}否则{
返回false;
}
}

我尝试用XSL创建验证器
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:good="xalan://com.epam.laba.model.Good"
xmlns:validator="xalan://com.epam.laba.validator.ValidatorXslGood"
    extension-element-prefixes="validator" >

    <xsl:include href="parameter.xsl"/>
    <xsl:variable name="validatorConstructor" select="validator:new()"/>
    <xsl:param name="validator"/>
    <xsl:param name="good"/>
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform"
xmlns:good=”xalan://com.epam.laba.model.Good"
xmlns:validator=”xalan://com.epam.laba.validator.ValidatorXslGood"
扩展元素前缀=“验证程序”>

但我有了新的错误,我不知道路径中的错误在哪里

找不到类“com.epam.laba.validator.ValidatorXslGood”。找不到 查找外部构造函数“com.epam.laba.validator.ValidatorXslGood”


您似乎错过了语法。语法应该是prefix:methodName(object,args),其中prefix是扩展名称空间前缀(需要声明为xmlns:prefix=“URI”extension-element-prefixes=“prefix…”),methodName是要在带有args参数的对象上调用的实例方法的名称

<xsl:stylesheet
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:validator="xalan://com.epam.laba.parser.validator.ValidatorXslGood"
     extension-element-prefixes="validator" ... >

<xsl:param name="validator"/> <!-- That is in reality validatorObject -->
<xsl:param name="good"/>

<xsl:output method="xml" indent="yes"/>

<xsl:template match="/|node()|@*">
    <xsl:if test="validator:validateGood($validator, $good)">
...

...

请向我们展示
validateGood
实现,或者至少是它的signatureheadpost…实际上是ValidateObject,但它不起作用我在XSL中创建对象它起作用了吗,如果你在Java中创建对象(XSL之外)?关于你的更新:(1)检查
validateXslgood#validateXslgood()
构造函数未引发运行时异常(2)检查Xalan是否可以访问该类,即在应用程序服务器环境中,该类应与应用程序一起打包(而不是在
服务器/libs
),因此首先检查上述代码是否适用于独立应用程序/单元测试。如果所有操作都失败,还应提供堆栈跟踪。
<xsl:stylesheet
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:validator="xalan://com.epam.laba.parser.validator.ValidatorXslGood"
     extension-element-prefixes="validator" ... >

<xsl:param name="validator"/> <!-- That is in reality validatorObject -->
<xsl:param name="good"/>

<xsl:output method="xml" indent="yes"/>

<xsl:template match="/|node()|@*">
    <xsl:if test="validator:validateGood($validator, $good)">
...