OK...now I've completely switched my loading code around to look like the browsers (see attached).

It all compiles and runs, but now I can't get it to load a file at all...I keep getting the
following exception at line 137:

org.ietf.uri.UnsupportedServiceException: file is not supported
        at org.ietf.uri.URL.getResource(URL.java:472)
        at org.web3d.vrml.sav.InputSource.getCharacterStream(InputSource.java:158)
        at org.web3d.parser.GeneralisedReader.parse(GeneralisedReader.java:139)
        at org.web3d.vrml.nodes.loader.DefaultWorldLoader.loadNow(DefaultWorldLoader.java:144)
        at org.web3d.vrml.nodes.loader.DefaultWorldLoader.loadNow(DefaultWorldLoader.java:95)
        at org.mikemccutcheon.sandbox.java3d.cubeworld.X3DUtil.loadX3D(X3DUtil.java:137)
        at org.mikemccutcheon.sandbox.java3d.cubeworld.TestWorldBranch.init(TestWorldBranch.java:246
)
        at org.mikemccutcheon.sandbox.java3d.cubeworld.Controller.<init>(Controller.java:123)
        at org.mikemccutcheon.sandbox.java3d.cubeworld.Controller.main(Controller.java:48)

Note that when I print out the file, it does exist and the inputsource is also there (not null)

What am I doing wrong?

(see attached)

Mike
package org.mikemccutcheon.sandbox.java3d.cubeworld;

import java.io.File;
import javax.media.j3d.SceneGraphObject;
import javax.media.j3d.Canvas3D;

import org.web3d.browser.BrowserCore;
import org.web3d.parser.DefaultVRMLParserFactory;
import org.web3d.vrml.parser.VRMLParserFactory;
import org.web3d.vrml.nodes.FrameStateManager;
import org.web3d.vrml.sav.InputSource;
import org.web3d.vrml.nodes.VRMLNodeType;
import org.web3d.vrml.nodes.loader.SceneBuilder;
import org.web3d.vrml.nodes.loader.WorldLoaderManager;
import org.web3d.vrml.nodes.loader.WorldLoader;
import org.web3d.vrml.nodes.loader.DefaultWorldLoaderManager;
import org.web3d.vrml.nodes.loader.ScriptLoader;
import org.web3d.vrml.nodes.loader.DefaultScriptLoader;
import org.web3d.vrml.nodes.loader.ExternalLoadManager;
import org.web3d.vrml.nodes.loader.MemCacheLoadManager;
import org.web3d.vrml.nodes.VRMLScene;
import org.web3d.vrml.nodes.runtime.GeneralisedFrameStateManager;
import org.web3d.vrml.nodes.runtime.EventModelEvaluator;
import org.web3d.vrml.nodes.runtime.GeneralisedEventModelEvaluator;
import org.web3d.vrml.nodes.runtime.ScriptManager;
import org.web3d.vrml.nodes.runtime.DefaultScriptManager;
import org.web3d.vrml.nodes.runtime.RouteManager;
import org.web3d.vrml.nodes.runtime.DefaultRouteManager;
import org.web3d.vrml.nodes.runtime.ListsRouterFactory;
import org.web3d.vrml.nodes.runtime.AWTListenerEventBuffer;
import org.web3d.vrml.renderer.j3d.J3DSceneBuilderFactory;
import org.web3d.vrml.renderer.j3d.input.J3DSensorManager;
import org.web3d.vrml.renderer.j3d.input.DefaultSensorManager;
import org.web3d.vrml.renderer.j3d.browser.OverlayHandler;
import org.web3d.vrml.renderer.j3d.browser.VRMLUniverse;
import org.web3d.vrml.renderer.j3d.nodes.J3DWorldRootNodeType;
import org.web3d.net.protocol.JavascriptResourceFactory;
import org.web3d.net.resolve.Web3DURNResolver;
import org.web3d.net.content.VRMLContentHandlerFactory;
import org.web3d.net.content.VRMLFileNameMap;
import org.ietf.uri.URI;
import org.ietf.uri.URN;
import org.ietf.uri.URIResourceStreamFactory;
import org.ietf.uri.ContentHandlerFactory;
import org.ietf.uri.FileNameMap;

public class X3DUtil
{
    public SceneGraphObject loadX3D(String inFileName, Canvas3D inCanvas3D)
    {
        // ---------------------
        // SETUP SCRIPT MANAGER
        // ---------------------
        ScriptLoader script_loader = new DefaultScriptLoader();
        ScriptManager script_manager = new DefaultScriptManager();
        script_manager.setScriptLoader(script_loader);
        System.out.println("ScriptLoader: "+script_loader);
        System.out.println("ScriptManager: "+script_manager);

        // --------------------
        // SETUP ROUTE MANAGER
        // --------------------
        RouteManager route_manager = new DefaultRouteManager();
        ListsRouterFactory listsRouterFactory = new ListsRouterFactory();
        route_manager.setRouterFactory(listsRouterFactory);
        System.out.println("RouteManager: "+route_manager);
        System.out.println("ListsRouterFactory: "+listsRouterFactory);

        // -------------------------
        // SETUP THE SENSOR MANAGER
        // -------------------------
        AWTListenerEventBuffer i_buf = new AWTListenerEventBuffer();
        J3DSensorManager sensor_manager = new DefaultSensorManager();
        sensor_manager.setInputBuffer(i_buf);
        System.out.println("AWTListenerEventBuffer: "+i_buf);
        System.out.println("J3DSensorManager: "+sensor_manager);

        // ------------------------
        // SETUP THE STATE MANAGER
        // ------------------------
        FrameStateManager state_manager = new GeneralisedFrameStateManager();
        System.out.println("FrameStateManager: "+state_manager);

        // -------------------
        // SETUP LOAD MANAGER
        // -------------------
        ExternalLoadManager load_manager = new MemCacheLoadManager();
        System.out.println("ExternalLoadManager: "+load_manager);

        // ----------------------------
        // SETUP EVENT MODEL EVAULATOR
        // ----------------------------
        EventModelEvaluator event_model = new GeneralisedEventModelEvaluator();
        event_model.initialize(script_manager, route_manager,sensor_manager, 
state_manager, load_manager);
        System.out.println("EventModelEvaluator: "+event_model);

        // -----------------------------------
        // SETUP PARSER AND BUILDER FACTORIES
        // -----------------------------------
        J3DSceneBuilderFactory sbf = new J3DSceneBuilderFactory(false, true,true, 
true, true, true, true);
        VRMLParserFactory vpf = new DefaultVRMLParserFactory();
        System.out.println("J3DSceneBuilderFactory: "+sbf);
        System.out.println("VRMLParserFactory: "+vpf);

        // -------------------
        // SETUP WORLD LOADER
        // -------------------
        WorldLoaderManager worldLoaderManager = new 
DefaultWorldLoaderManager(state_manager);
        worldLoaderManager.registerBuilderFactory(BrowserCore.JAVA3D_RENDERER, sbf);
        worldLoaderManager.registerParserFactory(BrowserCore.JAVA3D_RENDERER, vpf);
        System.out.println("WorldLoaderManager: "+worldLoaderManager);

        // ----------------------
        // SETUP OVERLAY HANDLER
        // ----------------------
        OverlayHandler overlayHandler = new DefaultOverlayHandler(inCanvas3D);

        // -------------------------------------
        // SETUP VRML UNIVERSE AND WORLD LOADER
        // -------------------------------------
        VRMLUniverse universe = new VRMLUniverse(event_model,overlayHandler);
        WorldLoader loader = worldLoaderManager.fetchLoader();

        // ----------------
        // LOAD PROPERTIES
        // ----------------
        setupProperties(universe, worldLoaderManager);

        // --------------------
        // LOAD/PARSE X3D FILE
        // --------------------
        File file = new File(inFileName);

        System.out.println("file.exists(): "+file.exists());
        InputSource is = new InputSource(file);
        System.out.println("is: "+is);


        VRMLScene parsed_scene = null;
        try
        {
          parsed_scene = loader.loadNow(universe, is);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        // --------------------------------------
        // EXTRACT AND RETURN SCENE GRAPH OBJECT
        // --------------------------------------
        SceneGraphObject sceneObject = null;
        if(parsed_scene!=null)
        {
            VRMLNodeType baseRootNode = parsed_scene.getRootNode();
            J3DWorldRootNodeType rootNode = (J3DWorldRootNodeType)baseRootNode;
            sceneObject = rootNode.getSceneGraphObject();
        }
        return sceneObject;
    }

    private class DefaultOverlayHandler implements OverlayHandler
    {
        Canvas3D canvas3D;

        public DefaultOverlayHandler(Canvas3D inCanvas3D)
        {
            canvas3D = inCanvas3D;
        }

        public Canvas3D getPrimaryCanvas()
        {
            return canvas3D;
        }
    }

    private void setupProperties(BrowserCore core, WorldLoaderManager loader)
    {
        System.setProperty("sun.awt.font.advancecache", "off");
        System.setProperty("uri.content.handler.pkgs", "vlc.net.content");
        System.setProperty("uri.protocol.handler.pkgs", "vlc.net.protocol");
        System.setProperty("java.content.handler.pkgs", "vlc.content");

        URIResourceStreamFactory res_fac = URI.getURIResourceStreamFactory();
        if(!(res_fac instanceof JavascriptResourceFactory))
        {
            res_fac = new JavascriptResourceFactory(res_fac);
            URI.setURIResourceStreamFactory(res_fac);
        }

        ContentHandlerFactory c_fac = URI.getContentHandlerFactory();
        if(!(c_fac instanceof VRMLContentHandlerFactory))
        {
            c_fac = new VRMLContentHandlerFactory(core, loader, c_fac);
            URI.setContentHandlerFactory(c_fac);
        }

        FileNameMap fn_map = URI.getFileNameMap();
        if(!(fn_map instanceof VRMLFileNameMap))
        {
            fn_map = new VRMLFileNameMap(fn_map);
            URI.setFileNameMap(fn_map);
        }

        Web3DURNResolver resolver = new Web3DURNResolver();
        URN.addResolver(resolver);
    }
}

/*

import java.io.File;
import java.io.FileReader;
import java.io.FileNotFoundException;
import javax.media.j3d.SceneGraphObject;
import org.web3d.j3d.loaders.Web3DLoader;
import org.web3d.vrml.nodes.VRMLScene;
import org.web3d.vrml.nodes.VRMLNodeType;
import org.web3d.vrml.renderer.j3d.nodes.J3DWorldRootNodeType;

public class X3DUtil
{
    public SceneGraphObject loadX3D(String inFileName)
    {
        File file = new File(inFileName);
        FileReader reader = null;
        try
        {
            reader = new FileReader(file);
        }
        catch(FileNotFoundException fnfe)
        {
            fnfe.printStackTrace();
            System.exit(1);
        }
        Web3DLoader loader = new Web3DLoader();
        loader.load(reader);
        VRMLScene scene = loader.getVRMLScene();
        VRMLNodeType baseRootNode = scene.getRootNode();
        J3DWorldRootNodeType rootNode = (J3DWorldRootNodeType)baseRootNode;
        SceneGraphObject sceneObject = rootNode.getSceneGraphObject();
        return sceneObject;
    }
}

*/

/*

// good code...

//canvas.addMouseListener(i_buf);
//canvas.addMouseMotionListener(i_buf);
//canvas.addKeyListener(i_buf);
//canvas.addKeyListener(this);

// code does not work

//import org.web3d.j3d.loaders.Web3DLoader;
//import org.web3d.vrml.nodes.VRMLScene;
//import org.web3d.vrml.nodes.VRMLNodeType;
//import org.web3d.vrml.renderer.j3d.nodes.J3DWorldRootNodeType;

Web3DLoader loader = new Web3DLoader();
System.out.println("file: "+file);
System.out.println("reader: "+reader);
loader.load(reader);
VRMLScene scene = loader.getVRMLScene();
VRMLNodeType baseRootNode = scene.getRootNode();
J3DWorldRootNodeType rootNode = (J3DWorldRootNodeType)baseRootNode;
SceneGraphObject sceneObject = rootNode.getSceneGraphObject();
return sceneObject;

*/

Reply via email to