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 erzeugen, validator und festgelegt 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));
aber
Das erste argument für die nicht-statischen Java-Funktion 'validateGood' ist kein Gültiger Objekt-Referenz.
Können nicht konvertieren Daten-Typ 'void' zu 'boolean'.
Können Sie mir erklären, was falsch?
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 erstellen validator in 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"/>
........
aber ich habe neue Fehler, und ich kann nicht verstehen, wo Fehler im Pfad
Cannot find class 'com.epam.Labe.validator.ValidatorXslGood'. Nicht
finden externe Konstruktor 'com.epam.Labe.validator.ValidatorXslGood'.
- Bitte zeigen Sie uns
validateGood
Umsetzung, oder zumindest seine Unterschrift - UPD-Kopf-Beitrag...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es aussieht, vermissen Sie die syntax. Hier es wird festgestellt, dass die syntax sollte Präfix:methodName(object, args), wo Präfix wird die extension namespace-Präfix (die Sie benötigen, zu erklären, wie xmlns:Präfix="URI" extension-element-prefixes="prefix ...") und methodName ist der name der Instanz-Methode aufrufen auf Objekt mit der args Argumente.
ValidatorXslGood#ValidatorXslGood()
Konstruktor nicht werfen Laufzeit-exception (2) überprüfen Sie, dass Xalan kann auf die Klasse, d.h. in Anwendung-server-Umgebung sollte verpackt werden, die mit Ihrer Anwendung (und nicht inserver/libs
), so überprüfen Sie zuerst, dass obige code funktioniert nur bei standalone-Anwendung / Unit-test. Wenn alles scheitert, geben Sie auch den stack-trace.