# XSL: Aufruf Java-class



## lam_tr (8. Nov 2011)

Hallo zusammen,

wenn ich eine test.class Java-Datei habe und ich will über XSL eine Methode dieser Klasse aufrufen möchte, wie kann man das machen?

Gruss lam


----------



## SlaterB (8. Nov 2011)

XSL ist doch einfach nur Text, ein Text kann nichts machen

http://de.wikipedia.org/wiki/XSL_Transformation


----------



## lam_tr (8. Nov 2011)

Stimmt  ich meine bei der XML Transformation kann man doch Java einbinden und ggfs Methoden aufrufen, aber wie

[XML]<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:wb3="xalan://de.test"
    extension-element-prefixes="wb3" version="1.0">
[/XML]

Test.class beinhaltet Beispiel Test#print(). Wie binde ich es ein?


----------



## SlaterB (8. Nov 2011)

hmm, das kannte ich eigentlich sogar schon, ganz vergessen

XML Transforms - Call Java methods from within the XSLT
(Suche: XML Transformation java call)


----------



## lam_tr (11. Nov 2011)

Hallo zusammen,

ich hab dieses Beispiel immer noch nicht genau hinbekommen, könnt ihr mir da mal weiterhelfen.

ich habe eine data.xml mit den Inhalt
[XML]
<input>
    <inputNode>10</inputNode>
    <inputNode>-4</inputNode>
</input>
[/XML]

und eine compilierte Java-Klasse Taschenrechner.class.

Und die will ich in eine XSLT-Dokument einbinden. 
Was ist hier falsch?

[XML]
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:wb3="xalan://de.wb3"
    extension-element-prefixes="XXX" version="1.0">
 <xsl:template name="YYY">
    <value-of select="Taschenrechner:addiere()"/>
 </xsl:template>
[/XML]

Was muss ich in den extension-element-prefixes eingeben und bei template-name?
Und wie kriege ich die InputDaten in die XSLT als parameter eingebunden? es soll in die Methode addiere(parmeter1, parameter2)?

Vielen Dank im voraus.

Gruss lam


----------



## SlaterB (11. Nov 2011)

'extension' kann ich in dem von mir angegebenen Link nicht finden, wie kommst du darauf?
wie man Parameter übergibt ist im Link doch ziemlich deutlich, Variablen definieren?
sicher kann es dabei Schwierigkeiten geben, aber solange du es anscheinend überhaupt nicht versuchst, was soll man dann dazu sagen?

ich poste noch ein Beispiel, welches ich selber verwende/ irgendwo gefunden habe, die Imports sehen da bisschen anders aus:

[xml]
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:fo="http://www.w3.org/1999/XSL/Format"
	xmlns:date="http://exslt.org/dates-and-times" version="1.0"
	xmlns:locale="java.util.Locale"
	xmlns:javadate="java.util.Date"
	xmlns:javaformat="java.text.SimpleDateFormat">


	<xsl:variable name="pattern">dd-MMM-yyyy kk:mm:ss</xsl:variable>
	<xsl:variable name="Locale" select="locale:new('en')"/>
	<xsl:variable name="SimpleDateFormat"
		select="javaformat:new($pattern,$Locale)"/>
	<xsl:variable name="Date" select="javadate:new()"/>
	<xsl:value-of select="javaformat:format($SimpleDateFormat, $Date)"/>
[/xml]
SimpleDateFormat großgeschrieben und Name der Klasse ist als Variablenname sicher nicht empfehlenswert,
zeigt hier wie man Objekte anlegen und später verwenden kann, 

bei xsl:variable-Deklaration kann man sicherlich auch xsl:value-of-Werte eintragen, also deine inputNode-Daten, bekannt?
xsl:variable kannst du ganz unabhängig von Java-Klassen testen


----------



## lam_tr (17. Nov 2011)

Hi zusammen und SlaterB,

wo muss die Java-Class Datei liegen damit ich die XSLT ausführen kann?
Relativ zu der XSLT-Datei?

Gruss lam


----------



## SlaterB (17. Nov 2011)

wenn man den Import der Standard-Klassen bedenkt hat man nicht viel zu positionieren,
meiner Ansicht nach muss es nur im ClassPath sein, 
sollte sich also z.B. von der Klasse, die das XSL dann ausführt, auch per import-Befehle ganz normal importieren und dann zur Laufzeit nutzen lassen

ich habe es allerdings in der Tat noch nicht mit eigenen Klassen versucht,
hast du schon API wie java.util.Date getestet?


----------



## lam_tr (17. Nov 2011)

Du meinst, ich soll die Classpath in die XSLT eintragen? wenn ja, wie?


----------



## SlaterB (17. Nov 2011)

nein, das meine ich nicht, sondern dass alles ganz normal sein soll, 
die Klassen gehören in den ClassPath des Java-Programms  bzw. ganz normal ins Projekt (sofern die Transformation von Java aus durchgeführt wird),
hast du eine bestimmte Fehlermeldung?


----------



## lam_tr (17. Nov 2011)

ja die sache ist halt, ich exportiere nicht das Projekt und bind das in die XSLT, sondern kompiliere nur eine Java-Klasse und binde es ein. Und wie gebe ich diese Datei in der XSLT an? Und kann die auch relativ zu der XSLT liegen?


----------



## SlaterB (17. Nov 2011)

also ich persönlich kann mit Wiederholung von Fragen nichts anfangen,
das Einbinden ist besprochen, die Nichtwichtigkeit der Relativität ist besprochen,

sofern du ernste Gegenargumente wie Fehlermeldungen hast, am besten zusammen mit vielen Informationen zur Durchführung der Transformation,
könnte ich versuchen weiter nachzudenken, auch wenn ich dabei vielleicht nicht weiterhelfen kann

soweit keine Postings mehr von mir


----------

