# Jasperreport Pfadprobleme am Server



## y0dA (18. Jan 2011)

Wie in diesem Thread lesbar http://www.java-forum.org/allgemeines-ee/110654-zugriff-files-ear-anwendung.html#post710838 hatte ich vorerst Probleme überhaupt .jasper Dateien -lokal am Server- zu finden. Jenes Problem wurde mittels:

```
private InputStream getInputStream(String resName) {
		InputStream inputStream = Thread.currentThread()
				.getContextClassLoader().getResourceAsStream(resName);
		return inputStream;
	}
```
behoben.

Nun habe ich diese Berichterstellung das erste Mal am Testserver deployed und es klappt auch mit der obrigen Methode. Das Problem ist jetzt aber dass bspw. der Berich1.jasper noch einen Subreport beinhaltet und ich hierbei dem "Masterreport" bekanntgeben muss so jener Subreport liegt. Nun habe ich wirklich schon etliches versucht jedoch ohne Erfolg. Wenn ich bspw. dir URL als String übergebe bekomme ich eine Exception weil die .jasper Dateien in einem .jar liegen und der Pfad somit nicht aufgelöst werden kann. Weiters habe ich versucht die Subreports einfach als Inputstreams zu übergeben (unterstützt angeblich Jasperreport) nur kann ich dann den Masterreport nicht mehr kompilieren im *iReport*. Ich kompiliere nämlich die .jrxml schon im iReport damit die Applikation nur mehr die .jasper befüllen muss.

Mein Problem ist nun dass ich einfach nicht weiß wie ich mit den Subreports verfahren soll - jemand sowas schon mal gemacht und kann mir einen Tipp geben?

**EDIT**
Was noch relevant wäre:
Es handelt sich um ein EAR Projekt.
Lokal funktioniert alles weil ich hierbei den Deploy Type auf "Exploded Archive" habe


----------



## FArt (18. Jan 2011)

y0dA hat gesagt.:


> Wie in diesem Thread lesbar http://www.java-forum.org/allgemeines-ee/110654-zugriff-files-ear-anwendung.html#post710838 hatte ich vorerst Probleme überhaupt .jasper Dateien -lokal am Server- zu finden. Jenes Problem wurde mittels:
> 
> ```
> private InputStream getInputStream(String resName) {
> ...



Gängige Praxis wäre hier den Thread zu schließen und eine Rückmeldung, dass es geht, vielleicht noch ein freundliches Danke.

Sonst:
JasperForge > JasperReports Forums
jasper subreport ear - Google-Suche
JasperForge > JasperReports Forums


----------



## y0dA (18. Jan 2011)

FArt hat gesagt.:


> Gängige Praxis wäre hier den Thread zu schließen und eine Rückmeldung, dass es geht, vielleicht noch ein freundliches Danke.



1) Der Thread war zu, hatte ihn nur vorhin aufgemacht da ich dachte ich poste diesen Sachverhalt gleich dort rein.
2) Hatte ich die Thematik mit dem 

```
Thread.currentThread().getContextClassLoader()
```
schon gelöst bevor du gepostet hattest - ich vergebe schon Danke wenn mir geholfen wurde.

Und googeln kann ich selber danke.


----------



## FArt (18. Jan 2011)

y0dA hat gesagt.:


> 2) Hatte ich die Thematik mit dem
> 
> ```
> Thread.currentThread().getContextClassLoader()
> ...


Das ist schön für dich. Der Community würde es gut tun, wenn du dann selber die Lösung postest. Das hilft anderen, die das gleiche Problem haben und hindert wiederum andere daran unnötigerweise dort zu antworten.



y0dA hat gesagt.:


> Und googeln kann ich selber danke.



Bitte!
Aber warum hast du dann den Foreneintrag mit der Lösung nicht gefunden?


----------



## y0dA (18. Jan 2011)

FArt hat gesagt.:


> Das ist schön für dich. Der Community würde es gut tun, wenn du dann selber die Lösung postest. Das hilft anderen, die das gleiche Problem haben und hindert wiederum andere daran unnötigerweise dort zu antworten.


Willst du mich irgendwie anpöbeln? Bevor du hier so rumschreist recherchiere erstmal und dann überlege dir obigen Satz nochmal. Sofern ich eine Lösung zu meinen Posts gefunden habe publiziere ich das auch. In dem von dir dramatisierten Fall hast du die Lösung ja vor mir gepostet und ich habe dann einfach nur den Thread geschlossen..




FArt hat gesagt.:


> Bitte!
> Aber warum hast du dann den Foreneintrag mit der Lösung nicht gefunden?


Weil ich noch keine Lösung habe.


----------



## FArt (18. Jan 2011)

y0dA hat gesagt.:


> Willst du mich irgendwie anpöbeln?


Wozu?



y0dA hat gesagt.:


> In dem von dir dramatisierten Fall hast du die Lösung ja vor mir gepostet und ich habe dann einfach nur den Thread geschlossen..


Der Thread war nicht geschlossen und es fehlte der Hinweis, dass das auch wirklich dein Problem war. Das ist eine wichtige Information für jemanden mit ähnlichen Problemen.



y0dA hat gesagt.:


> Weil ich noch keine Lösung habe.


Im Forum wird zu dem Thema gesagt, dass man die Reports relativ im Klassenpfad angeben sollte, also die Subreports relativ zum Report. Hast du das gemacht? Wenn ja, ist das eine wichtige Information, die in deiner Frage beinhaltet sein sollte. Wenn nein, dann solltest du das ausprobieren.


----------



## y0dA (18. Jan 2011)

FArt hat gesagt.:


> Der Thread war nicht geschlossen und es fehlte der Hinweis, dass das auch wirklich dein Problem war. Das ist eine wichtige Information für jemanden mit ähnlichen Problemen.


Naja nur habe ich dir schon bei meiner 1. Antwort geschrieben warum der Thread geöffnet war und du läßt dich nach wie vor darüber aus.



FArt hat gesagt.:


> Im Forum wird zu dem Thema gesagt, dass man die Reports relativ im Klassenpfad angeben sollte, also die Subreports relativ zum Report. Hast du das gemacht? Wenn ja, ist das eine wichtige Information, die in deiner Frage beinhaltet sein sollte. Wenn nein, dann solltest du das ausprobieren.


Mittlerweile bin ich soweit dass ich es mit Inputstreams lösen könnte - finde ich aber nicht wirklich eine souveräne Lösung.
Bezüglich der relativen Pfadangabe der Subreports zum "Masterreport" bin ich gerade dran das zu testen (leider braucht der Websphere immer ewig für ein redeploy).


----------



## FArt (18. Jan 2011)

y0dA hat gesagt.:


> Bezüglich der relativen Pfadangabe der Subreports zum "Masterreport" bin ich gerade dran das zu testen (leider braucht der Websphere immer ewig für ein redeploy).



Dafür braucht man keinen Applicationserver. Ich würde dazu Report und Subreport in ein JAR packen und eine JUnit-Testcase dafür schreiben.

Ich verwende einen Applicationserver und die passende IDE Integration. Damit spart man sich diesen langen Roundtrip nach kleinen Änderungen...


----------



## y0dA (18. Jan 2011)

Also das mit den relativen Pfaden funktioniert wohl nicht (oder ich mache etwas falsch).
Im Detail habe ich den Masterreport.jasper und in selbigen habe ich nun (testweise) einen Subreport1.jasper und beide liegen im gleichen Verzeichnis.
Im iReport habe ich nun unter "Subreport Expression" den String "./Subreport1.jasper" angegeben mit foolgendem Ergebnis:

```
Could not load object from location : ./Subreport1.jasper
```


----------



## FArt (18. Jan 2011)

Lass "./" weg...


----------



## y0dA (20. Jan 2011)

Habe das Problem nun anders gelöst.

Mittels JRLoader die Subreports "geladen" und dann selbige als Parameter an den Mainreport übergeben (hatte ich vor 2 Jahren auch schon so gemacht, sah wohl vorgestern vor lauter Bäumen den Wald nicht).


----------



## FArt (20. Jan 2011)

y0dA hat gesagt.:


> Habe das Problem nun anders gelöst.
> 
> Mittels JRLoader die Subreports "geladen" und dann selbige als Parameter an den Mainreport übergeben (hatte ich vor 2 Jahren auch schon so gemacht, sah wohl vorgestern vor lauter Bäumen den Wald nicht).



??? 

Verstehe ich nicht... das stand doch schon in dem von mir geposteten Link aus dem Jasper Forum... 3. Link... aber meckern, du hättest schon selber gesucht und ignorierst die geposteten Links... sorry, da fällt mir nichts mehr ein.



> Also, then you load the master report, make sure you load it with JRLoader.loadObjectFromLocation(String), giving its classpath location as parameter to the method. JR will take it straight from that JAR, if found in the classpath.


----------

