2

私の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>

……

バリデーターを作成し、xsl に設定する Java コード

    Good good=fillGood(parameters); 
    ValidatorXslGood validatorXslGood=new ValidatorXslGood();
    Source sourceXSL = new StreamSource(xsltFile);
    Transformer transformer = factory.newTransformer(sourceXSL);
    transformer.setParameter(SUBCATEGORY_ID_VALUE, subcategoryId);
    transformer.setParameter(GOOD, good);
    transformer.setParameter(VALIDATOR, validatorXslGood);

    transformer.transform(xmlSource, new StreamResult(outWriter));

しかし

非静的 Java 関数 'validateGood' の最初の引数は、有効なオブジェクト参照ではありません。データ型 'void' を 'boolean' に変換できません。

何が悪いのか説明してもらえますか?

更新:

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;
    }
}

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"/>

.........

しかし、新しいエラーがあり、パスのどこにエラーがあるのか​​ わかりません

クラス「com.epam.laba.validator.ValidatorXslGood」が見つかりません。外部コンストラクター 'com.epam.laba.validator.ValidatorXslGood' が見つかりません。

4

1 に答える 1

4

構文を見逃しているようです。ここで、構文は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)">
...
于 2011-09-13T10:58:14.787 に答える