2 Stimmen

Xalan+ XSLT+ JAVA

Meine xsl-Datei

<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-Code zum Erstellen eines Validators und Setzen auf xsl

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

sondern

Das erste Argument der nicht-statischen Java-Funktion 'validateGood' ist kein gültiger Objektverweis. Der Datentyp 'void' kann nicht in 'boolean' umgewandelt werden.

Können Sie mir erklären, was falsch ist?

UPD:

ValidatorXslGood.java-Code:

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

Ich versuche, einen Validator in XSL zu erstellen

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

........

aber ich habe einen neuen Fehler und ich kann nicht verstehen, wo der Fehler im Pfad liegt

Die Klasse 'com.epam.laba.validator.ValidatorXslGood' kann nicht gefunden werden. Kann nicht externen Konstruktor 'com.epam.laba.validator.ValidatorXslGood' nicht gefunden.

4voto

dma_k Punkte 9996

Es sieht so aus, als ob Sie die Syntax vermissen. Hier heißt es, dass die Syntax wie folgt lauten sollte prefix:methodName(object, args) donde Präfix ist das Namespace-Präfix der Erweiterung (das Sie als xmlns:prefix="URI" extension-element-prefixes="prefix ..." ) und Methodenname ist der Name der Instanzmethode, die aufzurufen ist Objekt mit dem args Argumente.

<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)">
...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X