JAXBContext bricht ohne Fehlermeldung ab

sognix

Grünschnabel
Hallo!

Ich bin komplett neu hier und nachdem ich die SuFu schon benutzt habe und nix gefunden habe, post ich das hier mal:

Ich habe folgendes Problem:
Ich baue ein Applet dass ein XML beim start per http-request als Antwort zurückbekommt. Dieses XML will ich unmarschallen. Allerdings bricht er mir ohne Fehlermeldung bzw. ohne dass etwas geworfen wird bei JAXBContext.newInstance(....) ab.

PHP:
try
                { System.out.println("TRY"); this.context = JAXBContext.newInstance(ItemObject.class); } 
                catch (JAXBException ex)
                {
                    System.out.println("CATCH");
                    Logger.getLogger(buildObject.class.getName()).log(Level.SEVERE, null, ex);
                    return null;
                }

Das System.out.println("TRY") gibt er mir noch aus, ab dann gar nix mehr, so als wäre der Code zu Ende, in den CATCH block geht er auch nicht. :(

Habt ihr ne Idee was da haben könnte?

Danke

Greets
 
Ok, problem gefunden, es wirft doch ne Exception:

java.security.AccessControlException: access denied ...

Trotzdem thx
 
Hallo!

Danke für den Hinweis mit dem erledigt!

Musste das Thema aber jetzt nochmals anschneiden:

Mein Applet hab ich signiert und ich kann auch auf die Festplatte zugreifen (Hab ne Speicherfunktion). Das "Interessante" find ich jetzt ist, dass die Funktion während des Betriebes funktioniert. Ich will aber auch einbauen, dass das Applet mit Startparameter funktioniert die es von der Adressleiste des Browser kriegt (über JavaScript). Er schickt die Anfrage ganz normal, als wäre es eine normale Suchanfrage an die Datenbank (auch über HTTP), aber beim Start krieg ich die

java.security.AccessControlException: access denied

die bei der gleichen Funktion während des Betriebes nicht auftaucht. Hat vl jemand eine Idee warum?

Wie schon gesagt, das Applet ist privat zertifiziert.

Danke!

Grüße
 
Hallo!

Meine Klasse, die unmarshalled:

Java:
public Object build(String _xmlString)
    {
        try
        {
            if (_xmlString.length() > 50)
            {
                if (_xmlString.substring(55, 62).equals("<items>"))
                {
                    try
                    {
                        this.context = JAXBContext.newInstance(rootSearch.class);
                    } catch (JAXBException ex)
                    {
                        Logger.getLogger(buildObject.class.getName()).log(Level.SEVERE, null, ex);
                        return null;
                    }

                    try
                    {
                        this.um = context.createUnmarshaller();
                    } catch (JAXBException ex)
                    {
                        Logger.getLogger(buildObject.class.getName()).log(Level.SEVERE, null, ex);
                        return null;
                    }

                    try
                    {
                        this.search = (rootSearch) um.unmarshal(new StreamSource(new StringReader(_xmlString)));
                    } catch (JAXBException ex)
                    {
                        Logger.getLogger(buildObject.class.getName()).log(Level.SEVERE, null, ex);
                        return null;
                    }
                    return this.search;
                } //for Element
                else
                {
                    if (_xmlString.substring(55, 67).equals("<itemObject>"))
                    {
                        try
                        { this.context = JAXBContext.newInstance(ItemObject.class); } 
                        catch (JAXBException ex)
                        {
                            Logger.getLogger(buildObject.class.getName()).log(Level.SEVERE, null, ex);
                            return null;
                        }

                        try
                        { this.um = this.context.createUnmarshaller(); } catch (JAXBException ex)
                        {
                            Logger.getLogger(buildObject.class.getName()).log(Level.SEVERE, null, ex);
                            return null;
                        }
                        try
                        { this.element = (ItemObject) um.unmarshal(new StreamSource(new StringReader(_xmlString))); } 
                        catch (JAXBException ex)
                        {
                            Logger.getLogger(buildObject.class.getName()).log(Level.SEVERE, null, ex);
                            return null;
                        }
                        return this.element;
                    }
                }
            }
            return null;
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            return null;
        }

Eine Zwischenfunktion die Eingangsparemeter überprüft und so das zurückgegebene Objekt deklariert

Java:
/*      XML     */
    /**
     * Method to get Object from XML-String
     * @return Object
     */
    public Object getObj(String _xmlString, int _type)
    {
        if(_type == 1)
        {
            this.search = (rootSearch) this.xml.build(_xmlString);

            String[][] result = new String[this.search.getItems().size()][1];

            for(int i=0; i<this.search.getItems().size(); i++)
            { result[i][0] = this.search.getItems().get(i).getName(); }

            return result;
        }
        
        else if(_type == 2)
        {
            ItemObject element = (ItemObject) this.xml.build(_xmlString);
            return element;
        }
        
        return null;
    }

und die Funktion die alles zusammenführt

Java:
public void sendPathRequest(String _path)
    {
        String requestString = this.cache.requestLink + _path.substring(_path.indexOf("?")+1, _path.length());
        this.frame.getTextField("path").setText(_path);
        
        //check cache for following elements and do configuration
        this.checkCache();

        //remove old object from Frame
        this.deleteObjectFromFrame(frame.getObject());
        
        //creating http request and getting xml string
        String xmlString = this.httpRequestor.sendRequest(requestString);
        
        //Make Item Object, create PictureBox and add box to cache
        ItemObject obj = (ItemObject) this.getObj(xmlString, 2);
        
        if(obj == null)
            this.customJOptionPane("There happened a Failure");
        
        //this.createPictureBox(obj, 1);
        this.addObjectCache(this.frame.getPicBox());

        //activate back button            
        if(this.cache.getPointer() > 0)
            this.frame.getButton("back").setEnabled(true);

        //activate Buttons
        this.frame.getButton("edit").setEnabled(true);
        this.frame.getButton("center").setEnabled(true);
        this.frame.getButton("save").setEnabled(true);

        this.frame.repaint();
    }



Wie schon gesagt, während des normalen Betriebes, ohne dass Startparameter aus der Browserzeile übergeben werden, funktioniert der Code einwandfrei. Mit Startparameter aus der Browserzeile wirft er die Exception.

Hab mir überlegt, ob es vl damit zusammenhängt, dass er die Daten schon alle lädt und die Funktionen im Hintergrund schon ausführt, bevor der User dem selbst erstellten Zertifikat zustimmt...

Danke
 
Es wäre vielleicht auch mal wichtig auf WAS dir der Zugriff verweigert wird. Ein einfaches ACCESS DENIED kann man schon mit System.getProperty() in einem nicht-signierten Jar erzeugen. Vielleicht kann man aus dem Objekt welches keine Zugriff hat schließen wo der Fehler liegt.

Anderst ausgedrückt :
Person A : mach mal XY mit Z
Person B : aber ich habe keinen Zugriff
Nun weis aber Person A nicht auf WAS B keinen Zugriff hat. Und genau so stehen auch wir gerade in der Sonne.
 
Hallo!

Der Zugriff wird mir auf das folgende blockiert:

Java:
this.context = JAXBContext.newInstance(ItemObject.class);

Folgend der gesamte Stacktrace

java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkMemberAccess(Unknown Source)
at java.lang.Class.checkMemberAccess(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.hasDefaultConstructor(Unknown Source)
at com.sun.xml.internal.bind.v2.model.nav.ReflectionNavigator.hasDefaultConstructor(Unknown Source)
at com.sun.xml.internal.bind.v2.model.impl.ClassInfoImpl.<init>(Unknown Source)
at com.sun.xml.internal.bind.v2.model.impl.RuntimeClassInfoImpl.<init>(Unknown Source)
at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.createClassInfo(Unknown Source)
at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.createClassInfo(Unknown Source)
at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getClassInfo(Unknown Source)
at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(Unknown Source)
at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(Unknown Source)
at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getClassInfo(Unknown Source)
at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(Unknown Source)
at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(Unknown Source)
at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getTypeInfo(Unknown Source)
at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getTypeInfo(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(Unknown Source)
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source)
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(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.xml.bind.ContextFinder.newInstance(Unknown Source)
at javax.xml.bind.ContextFinder.find(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
at XML.buildObject.build(buildObject.java:89)
at main.Functions.getObj(Functions.java:662)
at main.Functions.sendPathRequest(Functions.java:853)
at main.applet.setLink(applet.java:565)
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 sun.plugin.javascript.JSInvoke.invoke(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 sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass$MethodInfo.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass$MemberBundle.invoke(Unknown Source)
at sun.plugin2.liveconnect.JavaClass.invoke0(Unknown Source)
at sun.plugin2.liveconnect.JavaClass.invoke(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$DefaultInvocationDelegate.invoke(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo.doObjectOp(Unknown Source)
at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
 
Hallo!

Eine Vermutung zu diesem Problem:

Ist es möglich, dass er die Exception wirft, weil der Browser die Funktion mittels JavaScript aufruft? Wie schon erwähnt: Applet-Intern funktioniert es einwandfrei.
 
Zurück