This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Dateidownload NullPointerException

Allgemeine Fragen zur Entwicklung von und mit JVx.

Dateidownload NullPointerException

Postby alladinbp » Tue Oct 11, 2011 2:46 pm

Hallo,

ich bin gerade dabei mir das JVx Framework anzusehen. Es würde perfekt zu einem Projekt passen, allerdings bin ich auf ein paar Probleme gestoßen. Die meisten konnte ich zwar selbst lösen, aber bei dem Versuch eine Datei vom Server herunterzuladen scheitere ich. Als Server läuft ein Tomcat6 mit dem JVx und ein paar Klassen. Das Upload und Download-Servlet befindet sich in der web.xml. Alle libs, die die Showcase Applikation hatte sind auch hier eingebunden. Die Client-Applikation ist eine einfache SwingApplication. Die Verbindung läuft über die HTTPConnection, allerdings via https. Dateiupload funktioniert gut, zumindest wenn die Dateien klein sind. Da bin ich schon des öfteren über OutOfMemoryError's gestolpert (hochgeladen wurde eine Datei > 500MB).

Edit: Ich benutze die aktuellste .jar von Jvx 1.0 (Beta 4).

Am Server gibt es eine Action die vom Client aufgerufen wird:

Code: Select all
public RemoteFileHandle downloadXYZ()


Ich habe es mit drei Varianten versucht eine Datei zurückzugeben (Leserechte auf die Datei sind vorhanden):
Code: Select all
return new RemoteFileHandle("/tmp/test.pdf", new URL("file:///tmp/test.pdf"));

oder
Code: Select all
return new RemoteFileHandle("test.pdf", new BufferedInputStream(new FileInputStream(new File("/tmp/test.pdf"))));

oder
Code: Select all
RemoteFileHandle h = new RemoteFileHandle();
h.setFileName("test.pdf");
h.setContent(new File("/tmp/test.pdf"));
return h;


Ausgaben am Server verifizieren immer, dass das Objekt korrekt instanziert wurde und die Länger ( getLength() ) gesetzt ist.

Der Client ruft die Methode folgendermaßen auf:

Code: Select all
private void downloadXYZ() throws Throwable {
     IFileHandle fileHandle = (IFileHandle)connection.callAction("downloadXYZ");
    
     if (fileHandle != null) {
        System.out.println(fileHandle);
        System.out.println(fileHandle.getFileName());
        System.out.println(fileHandle.getLength());
       
        //application.getLauncher().saveFileHandle(fileHandle);
        application.getLauncher().showFileHandle(fileHandle);
     }
  }


Ein Objekt vom Typ FileHandle wird auch zurückgegeben. Auch der Dateiname ist gesetzt. Die Länge ist aber plötzlich -1 und der Debugger zeigt bei der internen Variable file in FileHandle null an. Gelegentlich kommt auch eine ClassNotFoundException, die suggeriert, dass FileHandle nicht gefunden wird. Diese Klasse ist aber vorhanden, ich kann ein Objekt davon eine Zeile weiter oben ohne Fehler erstellen.

Ich brauche die Download-Funktion umbedingt für das Projekt. Deswegen wollte ich frage ob ich etwas falsch mache oder das tatsächlich ein Bug ist.

mit freundlichen Grüßen
Benjamin
alladinbp
 
Posts: 39
Joined: Tue Oct 11, 2011 2:27 pm

Re: Dateidownload NullPointerException

Postby alladinbp » Tue Oct 11, 2011 3:22 pm

Mir ist gerade noch aufgefallen dass sich zumindest etwas tut. Der Server legt im /tmp Verzeichnis Dateien names "RemoteFileHandle ... .tmp" an, die sogar den Inhalt der PDF haben. Die werden auch nach einer Zeit wieder gelöscht. Beim client kommt weiterhin kein Inhalt an.

Edit:
Das Stacktrace ist vielleicht auch noch interessant:

java.lang.NullPointerException
at com.sibvisions.util.type.FileUtil.copy(Unknown Source)
at com.sibvisions.rad.ui.swing.impl.SwingApplication.showFileHandle(Unknown Source)
at com.sibvisions.rad.ui.swing.impl.SwingApplication.showFileHandle(Unknown Source)
at javax.rad.application.genui.UILauncher.showFileHandle(Unknown Source)
at at.alladin.test.jvx.client.PDFCreator$5.callBack(PDFCreator.java:177)
at com.sibvisions.rad.remote.AbstractSerializedConnection$CallBackWorker.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
alladinbp
 
Posts: 39
Joined: Tue Oct 11, 2011 2:27 pm

Re: Dateidownload NullPointerException

Postby Support@SIB » Tue Oct 11, 2011 4:09 pm

Zum OutOfMemory:

JVx hält die übertragenen bytes nicht im Speicher sondern streamed direkt in ein Temp file. Das Problem ist ev. in der späteren Verarbeitung bzw. vom Tomcat selbst. Hierzu wären Details sehr interessant.

Download:

Bei einem ersten kurzen Test konnten wir keine Probleme feststellen. Die Verwendung mittels RemoteFileHandle ist auch korrekt. Vielleicht einige Infos:

Wie groß ist die Datei die Sie zum Server übertragen möchten und die Datei existiert auch tatsächlich?
Funktioniert der Transfer ohne Tomcat, sprich mit einer DirectServerConnection?
Wie wurde das DownloadServlet konfiguriert?

Um dem Problem auf die Spur zu kommen müssen wir eine geeignete Teststellung finden, da das Problem mit den vorhandenen im Moment nicht auftritt.
User avatar
Support@SIB
 
Posts: 353
Joined: Mon Sep 28, 2009 1:56 pm

Re: Dateidownload NullPointerException

Postby Development@SIB » Tue Oct 11, 2011 4:55 pm

Versuchen Sie bitte anstatt den Content zu setzen, diesen direkt in den OutputStream zu schreiben:

Code: Select all
RemoteFileHandle h = new RemoteFileHandle("test.pdf");
      
FileUtil.copy(new FileInputStream(new File("/tmp/test.pdf")), true,
              h.getOutputStream(), true);

return h;

Dabei handelt es sich natürlich nur um einen work-around.
User avatar
Development@SIB
 
Posts: 325
Joined: Mon Sep 28, 2009 1:54 pm

Re: Dateidownload NullPointerException

Postby Development@SIB » Tue Oct 11, 2011 5:26 pm

Etwas eleganter um Speicher zu sparen:

Code: Select all
h.setContent(new FileInputStream(new File("/tmp/test.pdf")));

Die NullPointerException am Client ist jedoch nicht reproduzierbar. In unserem Fall ist eine ClassCastException der Auslöser.
User avatar
Development@SIB
 
Posts: 325
Joined: Mon Sep 28, 2009 1:54 pm

Re: Dateidownload NullPointerException

Postby alladinbp » Thu Oct 13, 2011 11:20 am

Danke für die Antworten.
Zuerst zum Upload:

Ich habe mich in bezug auf den OutOfMemoryError missverständlich ausgedrückt. Dieser Fehler wird am Client geworfen. Habe auch schon versucht den HeapSpace mittels -Xmx1024m zu erhöhen, was aber immer noch den gleichen Effekt hatte. Ca. 70MB konnte ich gerade ohne Probleme hochladen, allerdings ist die GUI während desssen eingefroren. Ich habe hier mal den Stacktrace angehängt. Außerdem habe ich mittels -XX:+HeapDumpOnOutOfMemoryError einen dump erzeugt und kurz angesehen. Aufgefallen ist mir nur dass es ein ziemlich großes byte[] gibt (siehe
jvx_heapdump1.png
Screenshot Übersicht in VisualVM
jvx_heapdump1.png (68.82 KiB) Viewed 16768 times
und
jvx_heapdump2.png
Screenshot Objekte in VisualVM
jvx_heapdump2.png (95.56 KiB) Viewed 16768 times
). Falls das hilfreich ist kann ich Ihnen den Dump zukommen lassen.

Code: Select all
java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space
   at javax.rad.type.bean.BeanType.get(Unknown Source)
   at com.sibvisions.rad.remote.serializer.ObjectSerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.UniversalSerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.serializer.ArraySerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.serializer.ArraySerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.UniversalSerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.serializer.ArraySerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.serializer.ArraySerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.UniversalSerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.UniversalSerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.AbstractSerializedConnection.callIntern(Unknown Source)
   at com.sibvisions.rad.remote.AbstractSerializedConnection.call(Unknown Source)
   at javax.rad.remote.AbstractConnection.callAction(Unknown Source)
   at at.alladin.test.jvx.client.PDFCreator.uploadFile(PDFCreator.java:196)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at javax.rad.util.EventHandler$ListenerHandler.invoke(Unknown Source)
   at $Proxy2.receiveFileHandle(Unknown Source)
   at com.sibvisions.rad.ui.swing.impl.SwingApplication.getFileHandle(Unknown Source)
   at javax.rad.application.genui.UILauncher.getFileHandle(Unknown Source)
   at javax.rad.application.genui.UILauncher.getFileHandle(Unknown Source)
   at at.alladin.test.jvx.client.PDFCreator.upload(PDFCreator.java:188)
   at at.alladin.test.jvx.client.PDFCreator.access$2(PDFCreator.java:186)
   at at.alladin.test.jvx.client.PDFCreator$3.action(PDFCreator.java:122)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at javax.rad.util.EventHandler$ListenerHandler.dispatchEvent(Unknown Source)
   at javax.rad.util.EventHandler.dispatchEvent(Unknown Source)
   at javax.rad.util.RuntimeEventHandler.dispatchEvent(Unknown Source)
   at com.sibvisions.rad.ui.swing.impl.component.SwingAbstractButton.actionPerformed(Unknown Source)
   at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
   at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
   at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
   at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
   at java.awt.Component.processMouseEvent(Unknown Source)
   at javax.swing.JComponent.processMouseEvent(Unknown Source)
   at java.awt.Component.processEvent(Unknown Source)
   at java.awt.Container.processEvent(Unknown Source)
   at java.awt.Component.dispatchEventImpl(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Window.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.EventQueue.dispatchEvent(Unknown Source)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.OutOfMemoryError: Java heap space
   at java.util.Arrays.copyOf(Unknown Source)
   at java.io.ByteArrayOutputStream.write(Unknown Source)
   at java.util.zip.DeflaterOutputStream.deflate(Unknown Source)
   at java.util.zip.DeflaterOutputStream.write(Unknown Source)
   at java.util.zip.GZIPOutputStream.write(Unknown Source)
   at com.sibvisions.util.type.FileUtil.copy(Unknown Source)
   at javax.rad.io.FileHandle.getGZIPContent(Unknown Source)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at javax.rad.type.bean.BeanType.get(Unknown Source)
   at com.sibvisions.rad.remote.serializer.ObjectSerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.UniversalSerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.serializer.ArraySerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.serializer.ArraySerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.UniversalSerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.serializer.ArraySerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.serializer.ArraySerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.UniversalSerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.UniversalSerializer.write(Unknown Source)
   at com.sibvisions.rad.remote.AbstractSerializedConnection.callIntern(Unknown Source)
   at com.sibvisions.rad.remote.AbstractSerializedConnection.call(Unknown Source)
   at javax.rad.remote.AbstractConnection.callAction(Unknown Source)
   at at.alladin.test.jvx.client.PDFCreator.uploadFile(PDFCreator.java:196)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at javax.rad.util.EventHandler$ListenerHandler.invoke(Unknown Source)
   at $Proxy2.receiveFileHandle(Unknown Source)
   at com.sibvisions.rad.ui.swing.impl.SwingApplication.getFileHandle(Unknown Source)


Nun zum Download:
Ich habe beide Codeschnippsel von Ihnen ausprobiert, hatte aber auch damit keinen Erfolg. Es tritt immer noch die selbe NullPointerException auf. Die Datei die ich versuche herunterzuladen ist 5KB groß. Den Transfer mit DirectServerConnection habe ich noch nicht getestet. Das Download/Upload Servlet sind folgendermaßen in der web.xml eingetragen (Ich glaube ich hab das aus der Showcase App kopiert, da ich keine Dokumentation dazu gefunden habe):

Code: Select all
<servlet>

    <servlet-name>DownloadServlet</servlet-name>
    <display-name>DownloadServlet server</display-name>
    <servlet-class>com.sibvisions.rad.server.http.DownloadServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>DownloadServlet</servlet-name>

    <url-pattern>/services/Download</url-pattern>
  </servlet-mapping>

  <!-- Servlet for uploading content (images, import files, any binary data). -->
  <servlet>
    <servlet-name>UploadServlet</servlet-name>
    <display-name>Servlet based file upload</display-name>
    <servlet-class>com.sibvisions.rad.server.http.UploadServlet</servlet-class>

  </servlet>
     
  <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/services/Upload</url-pattern>
  </servlet-mapping>


Ich werde noch weiter testen und die Erkenntnisse hier schreiben.

Danke für Ihre Hilfe
Benjamin
alladinbp
 
Posts: 39
Joined: Tue Oct 11, 2011 2:27 pm

Re: Dateidownload NullPointerException

Postby alladinbp » Thu Oct 13, 2011 11:25 am

Beim Debuggen fällt auf, dass ClassNotFoundExceptions geworfen werden. Beim Upload sehe ich im Debugger dass die Klasse javax.rad.type.BooleanType nicht gefunden wird und beim Download ist es die Klasse javax.rad.io.FileHandle. Kann es vielleicht sein, dass beim Serialisieren diese Klassen noch nicht geladen sind, obwohl sie sich im Classpath befinden und ich auch Instanzen von ihnen im Code erzeugen kann?

Edit: Ah nein, das sollte nicht das Problem sein, gerade gesehen, dass der Classloader danach aktiv wird. Bitte ignorieren.
alladinbp
 
Posts: 39
Joined: Tue Oct 11, 2011 2:27 pm

Re: Dateidownload NullPointerException

Postby Support@SIB » Thu Oct 13, 2011 2:47 pm

Die Dokumentation zum Deployment Deskriptor ist hier zu finden.

Aufgrund der Serialisierung werden die bytes am Client zuerst eingelesen und dann gesammelt übertragen. Ein Streaming ist im Übertragungsprotokoll nicht integriert. Abhängig davon ob ihre Applikation signiert ist oder nicht, stehen weitere Möglichkeiten zur Verfügung z.B. die Datei direkt öffnen und Block-weise Übertragung zum Server und Server-seitig in einen Stream schreiben. Wenn wie in Ihrem Fall eine SwingApplication eingesetzt wird, können Sie am Client mit dem FileHandle auf den Stream zugreifen und immer byte Blöcke zum Server schicken sprich mehrere Action Calls anstatt einem Action Call mit IFileHandle.

Das Mapping der Servlets ist korrekt.
Liefert der Zugriff auf das Download Service via http://<host>:<port>/<app>/services/Download den Response code 400?

Haben Sie das Problem auch mit einer früheren Release?
Welches Betriebssystem kommt für Client/Server zum Einsatz?
Läuft Client/Server auf einer Maschine bzw. mit Eclipse?
User avatar
Support@SIB
 
Posts: 353
Joined: Mon Sep 28, 2009 1:56 pm

Re: Dateidownload NullPointerException

Postby alladinbp » Thu Oct 13, 2011 4:31 pm

Bzgl. des Uploads: Ich hatte gehofft JVx würde das hochladen komplett übernehmen, inklusive immer wieder Datenpakete schicken. Ich werde es wie beschrieben probieren.

Bzgl des Downloads:
Stimmt, aus dieser Dokumentation habe ich die web.xml kopiert. Wenn ich über den Browser zugreife bekomme ich sowohl über http und https den ResponseCode 400.
Frühere Releases habe ich noch nicht probiert, werde es jetzt einmal mit dem 0.9 testen.

Derzeit läuft der Tomcat6 (OpenJDK 1.6.0_22) auf einem Ubuntu 11.04, das in einer VM installiert ist. Der Tomcat wird von Eclispe gestartet, läuft also als Standardbenutzer. Die Clientapplikation teste ich auf einem Windows7 32bit mit neuesten Update des 1.6er JDKs. Die Clientapplikation habe ich auch schon Eclipse-extern und auf anderen Windows7 Rechnern getestet.
alladinbp
 
Posts: 39
Joined: Tue Oct 11, 2011 2:27 pm

Re: Dateidownload NullPointerException

Postby Support@SIB » Thu Oct 13, 2011 4:56 pm

Der Upload von mehreren Hundert MBs ist eher die Ausnahme (die Daten müssen ja auch noch verarbeitet werden) und in der aktuellen JVx Implementierung ist gestreamter Upload nicht integriert. Sie können gerne das Support System für Feature Requests nutzen.

Die Testumgebung ist während der Entwicklung sehr aufwändig, da ständig deployed werden muss. Aus Entwickler Sicht würden wir vorschlagen erstmals alles mit SwingApplication und DirectServerConnection bzw. VMConnection zu entwickeln. In weiterer Folge kann z.B Tomcat via Eclipse WTP gestartet werden. Das erleichtert auch das Debugging. Und als letzten Schritt folgen die Tests im Browser als Applet bzw. mit Tomcat als.
Natürlich ist das unser Vorgehen, bewährt sich aber täglich und steigert einerseits die Produktivität und andererseits erhöht es die Motivation der Entwickler.

Um das Problem einzugrenzen, bitte folgende Vorgehensweise:

Reduktion der Schnittstellen und Werkzeuge: App mit Eclipse entwickeln und (Client, Server) testen mit Eclipse unter Win7 bzw. Ubuntu. DirectServerConnection (ohne Serialisierung) bzw. VMConnection (mit Serialisierung).

Unabhängig davon sollte der Download natürlich auch mit Ihren Systemen funktionieren, aber um dem Problem auf die Spur zu kommen benötigen wir Ihre Unterstützung, vor allem weil wir das Problem im Moment nicht reproduzieren können.
User avatar
Support@SIB
 
Posts: 353
Joined: Mon Sep 28, 2009 1:56 pm

Re: Dateidownload NullPointerException

Postby alladinbp » Fri Oct 14, 2011 1:47 pm

Es wäre toll wenn es der gestreamte Upload ins JVx schafft. In der Zwischenzeit kann man sich aber auch anders helfen, wie Sie im Post oben geschrieben haben.

Mir geht es im Moment darum, herauszufinden ob JVx das geeignete Framework für das Projekt ist. Deshalb teste ich auch alles so wie es dann im Endeffekt beim Kunden aussehen soll. Ich stoße lieber jetzt auf Probleme als mittem im Projekt. Natürlich wird dann in der Entwicklung zuerst eine DirectServer oder VMConnection benutzt.

Ich habe jetzt den Server und den Client neu erstellt. Nur Upload und Download um alles andere als Fehlerquelle ausschließen zu können. Der Fehler besteht weiterhin, sowohl mit JVx 0.9 als auch 1.0 B4.
Im Anhang befinden sich die zwei Projekte. Ich hoffe das hilft Ihnen dabei das Problem nachzuvollziehen.

Vielen Dank für Ihre Bemühungen.
Attachments
server.zip
Server Eclipse-Projekt
(915.86 KiB) Downloaded 37 times
client.zip
Client Eclipse-Projekt
(1.37 MiB) Downloaded 30 times
alladinbp
 
Posts: 39
Joined: Tue Oct 11, 2011 2:27 pm

Re: Dateidownload NullPointerException

Postby rjahn » Fri Oct 14, 2011 11:10 pm

Das Problem tritt nur in der Verwendung SwingApplication - HttpConnection - Application Server auf. Und zwar setzt die SwingApplication die Download URL in den RemoteFileHandle, sofern der Parameter:

Code: Select all
getLauncher().getParameter(ILauncher.PARAM_SERVERBASE)

gesetzt wurde!

Und genau darin liegt das Problem. Der Parameter ist nicht gesetzt. Doch das hat nichts mit Ihrer Applikation zu tun.

Ein paar Details:

Im Normalfall wird die URL zum Server nicht hard coded im Source eingetragen - sondern entweder von einem config file ausgelesen oder als Parameter an die Applikation übergeben. Dadurch muss die Applikation nicht immer neu compiliert werden :)


Lösung mit config file

Sie könnten zum Test in Ihrer launch Konfiguration, einen 2. Parameter übergeben, z.B.: /at/alladin/test/jvx/client/application.xml. Das XML File erstellen Sie wie folgt, im Package at.alladin.test.jvx.client:

Code: Select all
<?xml version="1.0" encoding="UTF-8"?>

<application>
  <Application.serverbase>http://localhost/SimpleJVxServer</Application.serverbase>
  <server>[Application.serverbase]/services/Server</server> 
</application>

Und in Ihrer Application ändern Sie die Connection Instanzierung:

Code: Select all
return new HttpConnection(getLauncher().getParameter("server"));


Lösung ohne config file

Wenn keine Konfiguration verwendet wird, muss die Download URL im Source Code gesetzt werden. Dazu einfach im Konstruktor Ihrer Application den Aufruf:

Code: Select all
RemoteFileHandle.setDownloadURLSpec("http://localhost/SimpleJVxServer/services/Download?KEY=");

einfügen (localhost jeweils ersetzen).

Beide Lösungen führen zu einem funktionierenden Download.


Hinweis zur Verwendung einer DirectServerConnection

Sie haben getrennte Projekte für Client und Server erstellt. Das macht den Test mittels DirectServerConnection etwas trickreicher. Daher an dieser Stelle der Hinweis wie es dennoch funktioniert:

  • Fügen Sie das Server Projekt beim Client Projekt als Projekt-Referenz hinzu (Properties / Build Path / Projects)
  • Fürgen Sie jvx.jar aus dem Server Projekt dem Build Path hinzu
  • Optional können Sie auch noch festlegen wo ihr rad Verzeichnis zu finden ist (falls das Verzeichnis nicht automatisch gefunden wird). Dazu bei der launch Konfiguration des Clients, den VM Parameter: -DConfiguration.basedir=${workspace_loc:SimpleJVxServer}/WebContent/WEB-INF/ setzen

Nun sollte der Test mit einer DirectServerConnection auch möglich sein!


Das Problem wird mit der nächsten Release von JVx behoben. Weitere Details siehe Support System.
rjahn
 
Posts: 41
Joined: Sun Sep 13, 2009 1:54 pm

Re: Dateidownload NullPointerException

Postby alladinbp » Tue Oct 18, 2011 9:47 am

Vielen Dank für die Rückmeldung. Jetzt funktioniert der Download wie gewünscht. Wenn ich allerdings die length mit RemoteFileHandle.getLength() aufrufe kommt -1 zurück, die Datei ist aber auf jeden Fall da.

Freue mich schon auf das nächste Release.
alladinbp
 
Posts: 39
Joined: Tue Oct 11, 2011 2:27 pm

Re: Dateidownload NullPointerException

Postby rjahn » Tue Oct 18, 2011 11:45 am

Details zu getLength() mit -1 siehe Support System.

Die nächste Beta ist für diese Woche geplant.
rjahn
 
Posts: 41
Joined: Sun Sep 13, 2009 1:54 pm


Return to Development (DE)