Sun.* packeges source code

Kindly can somebody tell me where from i can down load the source code of sun.*(sun.misc.ProxyGenerator) packages that are being used in JDK classes. kindly tell me.

Why Developers Should Not Write Programs That Call 'sun' Packages
The classes that Sun includes with the Java 2 SDK, Standard Edition, fall into package groups java.*, javax.*, org.* and sun.*. All but the sun.* packages are a standard part of the Java platform and will be supported into the future. In general, packages such as sun.*, that are outside of the Java platform, can be different across OS platforms (Solaris, Windows, Linux, Macintosh, etc.) and can change at any time without notice with SDK versions (1.2, 1.2.1, 1.2.3, etc). Programs that contain direct calls to the sun.* packages are not 100% Pure Java. In other words:
The java.*, javax.* and org.* packages documented in the Java 2 Platform Standard Edition API Specification make up the official, supported, public interface.
If a Java program directly calls only API in these packages, it will operate on all Java-compatible platforms, regardless of the underlying OS platform.
The sun.* packages are not part of the supported, public interface.
A Java program that directly calls into sun.* packages is not guaranteed to work on all Java-compatible platforms. In fact, such a program is not guaranteed to work even in future versions on the same platform.
For these reasons, there is no documentation available for the sun.* classes. Platform-independence is one of the great advantages of developing in the Java programming language. Furthermore, Sun and our licensees of Java technology are committed to maintaining backward compatibility of the APIs for future versions of the Java platform. (Except for code that relies on serious bugs that we later fix.) This means that once your program is written, the class files will work in future releases.
Each company that implements the Java platform will do so in their own private way. The classes in sun.* are present in the SDK to support the Sun implementation of the Java platform: the sun.* classes are what make the Java platform classes work "under the covers" for the Sun Java 2 SDK. These classes will not in general be present on another vendor's Java platform. If your Java program asks for a class "sun.package.Foo" by name, it may fail with ClassNotFoundError, and you will have lost a major advantage of developing in Java.
Technically, nothing prevents your program from calling into sun.* by name. From one release to another, these classes may be removed, or they may be moved from one package to another, and it's fairly likely that their interface (method names and signatures) will change. (From the Sun point of view, since we are committed to maintaining the Java platform, we need to be able to change sun.* to refine and enhance the platform.) In this case, even if you are willing to run only on the Sun implementation, you run the risk of a new version of the implementation breaking your program.
In general, writing java programs that rely on sun.* is risky: they are not portable, and are not supported.
~

Similar Messages

  • How to download SUN J2EE source codes?

    Especially those Java source codes under the javax.ejb package.

    All the source code for both the javax.ejb API and the reference implementation itself are freely
    available through the Glassfish project. You can find more information here :
    https://glassfish.dev.java.net/source/browse/glassfish/ejb-api/src/share/classes/
    https://glassfish.dev.java.net/source/browse/glassfish/

  • How to read the Java source code (in Netbeans)

    I use OS X10.5.5, NetBeans 6.1 and JSE 6 on a 64 bit mac.
    When I downloaded NB6.1 it had JSE 5 as it's default (and only) java platform. I ran Software Update to get Java 6 from Apple, used the Java Prefrences utitlity to set JSE6 as default. In NB I added the JDK6 platform, registered the JDK6 javadocs and noticed that I also have the option of registering the Java source code.
    I have three questions:
    1) How do I make JDK6 the default in NetBeans. The JDK5 keeps being default after I did the steps above and I don't see anywhere to change that.
    2) How do I read the Java 6 source code? I can see sun provides [source code| http://download.java.net/jdk6/] for their supported platforms. I dont see Apple doing the same for its JDK port. What would I need to do to get to read the java SE6 sources? or is it actually hiding somewhere in the /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home hierarchy?
    3) Where does the JVM look for the binary code to run when I make a call to, say java.util.ArrayList or any other library. In my naivety I would have assumed it would be a .class file somewhere in the java Home folder, but I don't see anything like it.
    thanks in advance,
    chris

    This is taken from the help included with netbeans. In response to question 1.
    By default, the IDE uses the version of the Java SE platform (JDK) with which the IDE runs as the default Java platform
    for compilation, execution, and debugging. You can view your IDE's JDK version by choosing Help > About and clicking the
    Detail tab. The JDK version is listed in the Java field.
    You can run the IDE with a different JDK version by starting the IDE with the --jdkhome jdk-home-dir switch on the command line
    or in your IDE-HOME/etc/netbeans.conf file. For more information, see IDE Startup Parameters.
    In the IDE, you can register multiple Java platforms and attach Javadoc and source code to each platform. For example, if you
    want to work with the new features introduced in JDK 5.0, you would either run the IDE on JDK 5.0 or register JDK 5.0 as a
    platform and attach the source code and Javadoc to the platform.
    In  , you can switch the target JDK in the Project Properties dialog box. In  , you have to set the target JDK in the Ant script itself,
    then specify the source/binary format in the Project Properties dialog box.
    To register a new Java platform:
    Choose Tools > Java Platforms from the main window.
    Click New Platform and select the directory that contains the Java platform. Java platform directories are marked with a  
    in the file chooser.
    Use the Sources and Javadoc tabs to attach Javadoc documentation and source code for debugging to the platform.
    Click Close.
    To set the default Java platform for a standard project:
    Right-click the project's root node in the Projects window and choose Properties.
    In the Project Properties dialog box, select the Libraries node in the left pane.
    Choose the desired Java platform in the Java Platform combo box.
    Switching the target JDK for a standard project does the following:
    Offers the new target JDK's classes for code completion.
    If available, displays the target JDK's source code and Javadoc documentation.
    Uses the target JDK's executables (javac and java) to compile and execute your application.
    Compiles your source code against the target JDK's libraries.
    If you want to register additional Java platforms with the IDE, you can do so by clicking the Manage Platforms button.
    Then click the Add Platform button and navigate to the desired platform.
    To set the target Java platform for a free-form project:
    In your Ant script, set the target JDK as desired in the javac, java, and javadoc tasks.
    Right-click the project's root node in the Projects window and choose Properties.
    In the Sources panel, set the level of JDK you want your application to be run on in the Source/Binary Format combo box.
    When you access Javadoc or source code for JDK classes, the IDE searches the Java platforms registered in the
    Java Platform Manager for a platform with a matching version number. If no matching platform is found, the IDE's default platform is used instead.
    See Also
    Managing the Classpath
    Declaring the Classpath in a Free-Form Project
    Stepping Through Your Program
    Legal Notices

  • Where can I get the source code for sun classes?

    Hello,
    When ever you download sun's j2sdk, the archive always contains the source code for the entire sdk in a zip file called src.zip except the sun.xxx classes like sun.awt.print.PrintDialog or sun.awt.font.FontResolver.
    For debugging purposes I need, if availabe, the source code of these classes which are not present in the src.zip.
    Please can someone tell me if theses classes are available as source and can point me where I can find it cause I am searching for it but can't find it on the net.
    Thank you
    Carolin

    Hey ChuckBing
    And your way is the only way, right? No.What on earth is eating you? Highly sensitive today?
    Where is the problem? There are two solutions of the question.
    The one link I posted points directly to the sun source download link. The "readme" explains, yippie, the sun sources are contained. Easy, isn't it?
    With the other one, you have to navigate at least through two other pages before you might find the link and only if you recognize that "Download JDK 5.0 source via SCSL/JRL" means the sun source code and not the sources contained in the JDK download. This is what I thought as I've seen this link the first time. Unfortunately there is no "readme".
    I prefer the easy way, I dont want to earn a doctorate. Ok, you can say dont "play the woman", but I'm a woman and a blonde too;-)
    But, let us stop the idle discussion here, please!
    Nevertheless, thanks to you and [email protected] for answering.

  • Xletview: why not use sun's javaTV source code directly ?

    xletview : one emulator for viewing MHP Xlets on a PC;
    I see many difference from sun's code about the part of javaTV.
    Why the author Martin Sveden need to rewrite them and not use sun's javaTV source code directly ?
    Thank you for your any answer.
    Sorry for my horrible english.

    XleView is a fine effort, but it has its limitations. I tried using it for the GunBunny demo available in the JavaME SDK 3.0 Eary Access available in
    http://java.sun.com/javame/downloads/sdk30ea.jsp
    and I encountered some of thost limitations. What Sveden does it several tricky manipulations in a classloader for the Xlet. In particular, he translates bytecode as he loads the Xlet's classes, changing some class names, such as changing
    java.awt.Toolkit
    tto
    xjava.awt.Toolkit
    This works up to a point. This version of Toolkit usually just turns around calls java.awt.Toolkit's corresponding routine, but he deliberately he does not implement the ubiquitous
    public Image createImage(URL url)
    When I downloaded his source and tried adding ths into his code, I then encountered at runtime
    Uncaught error fetching image:
    java.lang.NullPointerException
    at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:97)
    at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:107)
    at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:240)
    at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
    at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
    I think that this is some optimization within J2SE where they do not wait for the image to load and do the fetching in a separate thread. I do not know if there is some way to force the Sun's JVM to disable this optimization and I have not investigated furher, but I did email Svenden. I noticed that the current version of XleTView is 0.3.6 which is dated June 2004 and the web site http://www.xletview.org/ has had not news since 2005 .
    I note that Svenden provides an elegant user interface but I advise you not try to learn the API's from his classes: he makes no effort to keep his implementation separate from the API standards so, for instance, his version of HScene is
    package org.havi.ui;
    public class HScene extends Container
    implements HComponentOrdering, ImageObserver, MenuContainer, Serializable {
    whereas the real standard is
    public class HScene extends Container
    implements HComponentOrdering {
    I hate to critize such a fine effort, but it is best to keep an imlementation separate from the public API.
    I agree that having a lightweight, simple and Java feature-complete Xlet viewer running would be very helpful, especially if BD-J gains much popularity. I have found trying to work with the vendor players described at
    http://wiki.java.net/bin/view/Mobileandembedded/Blu-RayDiscHelloWorld
    to be frustrating. I tried all four mentioned and I have gotten none of them to work for me yet. These are huge downloads and the "Intro Version" of Arcsoft pointed to at the SDK 3.0 Early Access page
    http://www.arcsoft.com/products/totalmediatheatre/
    just gives a "File not found" HTML page. This forum post mentions that perhaps it was recently taken down?
    http://www.arcsoft.com/forum/forum_posts.asp?TID=1084
    I have already emailed Michael Downs of Arcsoft since he is mentioned here:
    http://wiki.java.net/bin/view/Mobileandembedded/BDJPCPlayers
    What did work for me was to take Sun's JavaTV 1.1 Reference Implementation and PowerDVD's BDJ.jar and hack/fix a few classes to get GunBunny to work within the RI's RunXlet program. This is not trivial but I will will describe:
    Download the JavaME 3.0 SDK EA and then download the correct version of PowerDVD that the SDK page points to:
    http://www.brothersoft.com/powerdvd-download-50794.html
    Download the RI binary and source of Java TV API 1.1
    http://java.sun.com/javame/technology/javatv/index.jsp
    Since I am too lazy to use anything but the latest 1.6 JRE as a runtime, I have to fix
    com.sun.tv.media.util.MediaThread
    to comment out its stop() method. This is becase stop() was deprecated and made final in J2SE 1.5
    http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html#stop()
    http://java.sun.com/j2se/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html
    Next, I had to mae a change to Sun's JavaTV implementation to keep the GunBunny demo happy by providing a ServiceContext. The RunXlet program calls SIEmulator, but that environment does not provide a ServiceContex, so I added one back in:
    com.sun.tv.receiver.SIEmulator
    private static ServiceContext svcctx = null;
    Add before every call to new AppSignalEvent() and add the svcctx as the second-to-last argument:
    if(svcctx == null){ try { svcctx = new com.sun.tv.ServiceContextImpl(); }catch (Exception e){ e.printStackTrace(); } }
    I then had to hack a few PowerDVD classes, which is evil of me. First, I had to build an empty class by the name of
    sun.util.BDJPlugin
    becuase some PowerDVD class extends it but it is not in its BDJ.jar and then I had to reverse-compile (evil!) and modify one of their internal classes to avoid a dependency on their native methods. What I ended up with was a hacked version of com.cl.bdj.helper.CUtil to avoid the native methods which access the registry where they query for registry settings but also provide a default value (which I return).
    com.cl.bdj.helper.CUtil
    private static String pGetRegistryString(long i ,String string ,String string3) {
    return string3;
    private static int pGetRegistryInt(long i ,String string ,int j) {
    return j;
    The last thing I had to do was to change com.hdccookbook.gunbunny.BaseXlet, to use the JavaTV container rather than the org.havi one:
    import javax.tv.graphics.TVContainer;
    import java.awt.Container;
    change
    // protected HScene scene;
    protected Container scene;
    public final void run() {
    // waitForPresenting();
    // scene = HSceneFactory.getInstance().getDefaultHScene();
    scene = TVContainer.getRootContainer(xletContext);
    In order to having working keys, I had to add the KeyListener interface to BaseXet and
    run(){
    addKeyListener(this);
    and then add a near duplicate of the org.dvb.event.UserEvent* stuff that is already there:
    public void keyPressed(KeyEvent e){
    switch(e.getKeyCode()){
    case KeyEvent.VK_0:
    case KeyEvent.VK_1:
    case KeyEvent.VK_2:
    case KeyEvent.VK_3:
    case KeyEvent.VK_4:
    case KeyEvent.VK_5:
    case KeyEvent.VK_6:
    case KeyEvent.VK_7:
    case KeyEvent.VK_8:
    case KeyEvent.VK_9:
    numberKeyPressed(e.getKeyCode() - KeyEvent.VK_0);
    break;
    case KeyEvent.VK_ENTER:
    enterKeyPressed();
    break;
    case KeyEvent.VK_LEFT:
    arrowLeftKeyPressed();
    break;
    case KeyEvent.VK_RIGHT:
    arrowRightPressed();
    break;
    case KeyEvent.VK_UP:
    arrowUpPressed();
    break;
    case KeyEvent.VK_DOWN:
    arrowDownPressed();
    break;
    public void keyReleased(KeyEvent e){
    // System.out.println("Released: e="+e+" code="+e.getKeyCode());
    public void keyTyped(KeyEvent e) {
    // System.out.println("Typed: e="+e+" code="+e.getKeyCode());
    It then comes up and functions, but the rendering is not very good. Again, this is complete hack. Running the Java TV 1.1 RI in a JRE 1.6 is not supported. If you try to run any of the other examples, you will discover that the XML parsing is broken in JRE 1.6 with this message:
    Parsing failed: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequence
    Exception: Invalid byte 1 of 1-byte UTF-8 sequence., file: lib\JavaTVSampleFile01.xml
    and you have to go and change the lines in
    lib\JavaTV.properties
    from
    ServiceFileHandler=com.sun.tv.receiver.ReceiverFile
    # ServiceFileHandler=SampleData_01
    to
    # ServiceFileHandler=com.sun.tv.receiver.ReceiverFile
    ServiceFileHandler=SampleData_01
    and build samples\db\SampleData_01.java and put it in your classpath along with all these other hacks.
    Nonetheless, if you want to develop a somewhat generic Xlet that uses some BD-J features, that is how you might do it. But the moment you exercise anything else in the vendor's BDJ.jar that simply doe snot work outside of their environment or invokes one of their native methods, you are again stuck.
    It would be nice if Sun would at least bother to update the JavaTV RI with the fixes I hae mentioned. Their "jmflite" implementation does not render perfecly but at least it would give the programmer something to work with without having to deal with an older JRE, etc.
    Andrew
    Edited by: AndrewMorrow on Oct 20, 2008 2:48 AM

  • Where can I find some appications' source code  written by swing

    hello, everyone
    I have studied swing for one month, and I have some basic idea of the swing.
    but I want to learn more about the swing. can anybody tell me how can I improve
    myself now or show me where can I find some appications' source code written
    by swing in the internet.
    thank you very much!
    your help is very appreciated!

    Check this tutorial:
    http://java.sun.com/docs/books/tutorial/uiswing/index.html
    It explains all the Swing components with many code samples.
    HTH
    stefan

  • Debugger stopped on uncompilable source code.

    Dear Friends,
    I got the Error as like
    Debugger stopped on uncompilable source code.
    The code is down!!!
    I could not figure out the reason, why it comes. !!! I read data from a txt file and generate an XML file.
    please any 1 help me to solve this
    Priya
    package java.Associations;
    import java.io.*;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Scanner;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Text;
    import com.sun.org.apache.xml.internal.serialize.OutputFormat;
    import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
    public class XMLCreatorExample {
    //No generics
    List myData;
    Document dom;
    public XMLCreatorExample() {
    //create a list to hold the data
    myData = new ArrayList();
    //initialize the list
    loadData();
    //Get a DOM object
    createDocument();
    public void runExample(){
    System.out.println("Started .. ");
    createDOMTree();
    printToFile();
    System.out.println("Generated file successfully.");
    * Add a list of books to the list
    * In a production system you might populate the list from a DB
    private void loadData(){
    Scanner inputFile = null;
    try {
    inputFile = new Scanner(new File("C:\\coding\\weka\\1.txt"));
    while(inputFile.hasNext()) {
    myData.add(inputFile.next());
    catch(FileNotFoundException fNFE) {
    System.out.println("The file was not found");
    finally {
    inputFile.close();
    //myData.add(new Book("Head First Java", "Kathy Sierra .. etc","Java 1.5"));
    //myData.add(new Book("Head First Design Patterns", "Kathy Sierra .. etc","Java Architect"));
    * Using JAXP in implementation independent manner create a document object
    * using which we create a xml tree in memory
    private void createDocument() {
    //get an instance of factory
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    try {
    //get an instance of builder
    DocumentBuilder db = dbf.newDocumentBuilder();
    //create an instance of DOM
    dom = db.newDocument();
    }catch(ParserConfigurationException pce) {
    //dump it
    System.out.println("Error while trying to instantiate DocumentBuilder " + pce);
    System.exit(1);
    * The real workhorse which creates the XML structure
    private void createDOMTree(){
    //create the root element <Books>
    Element rootEle = dom.createElement("Books");
    dom.appendChild(rootEle);
    //No enhanced for
    Iterator it  = myData.iterator();
    while(it.hasNext()) {
    Book b = (Book)it.next();
    //For each Book object  create <Book> element and attach it to root
    Element bookEle = createBookElement(b);
    rootEle.appendChild(bookEle);
    * Helper method which creates a XML element <Book>
    * @param b The book for which we need to create an xml representation
    * @return XML element snippet representing a book
    private Element createBookElement(Book b){
    Element bookEle = dom.createElement("Book");
    bookEle.setAttribute("Subject", b.getSubject());
    //create author element and author text node and attach it to bookElement
    Element authEle = dom.createElement("Author");
    Text authText = dom.createTextNode(b.getAuthor());
    authEle.appendChild(authText);
    bookEle.appendChild(authEle);
    //create title element and title text node and attach it to bookElement
    Element titleEle = dom.createElement("Title");
    Text titleText = dom.createTextNode(b.getTitle());
    titleEle.appendChild(titleText);
    bookEle.appendChild(titleEle);
    return bookEle;
    * This method uses Xerces specific classes
    * prints the XML document to file.
    private void printToFile(){
    try
    //print
    OutputFormat format = new OutputFormat(dom);
    format.setIndenting(true);
    //to generate output to console use this serializer
    //XMLSerializer serializer = new XMLSerializer(System.out, format);
    //to generate a file output use fileoutputstream instead of system.out
    XMLSerializer serializer = new XMLSerializer(
    new FileOutputStream(new File("C:\\coding\\book.xml")), format);
    serializer.serialize(dom);
    } catch(IOException ie) {
    ie.printStackTrace();
    public static void main(String args[]) {
    //create an instance
    XMLCreatorExample xce = new XMLCreatorExample();
    //run the example
    xce.runExample();/**/
    package java.Associations;
    public class Book {
    private String title;
    private String author;
    private String subject;
    public Book(String subject) {
    this.subject = subject;
    public Book() {
    public Book(String title, String author, String subject) {
    this.title = title;
    this.author = author;
    this.subject = subject;
    public String getAuthor() {
    return author;
    public void setAuthor(String author) {
    this.author = author;
    public String getTitle() {
    return title;
    public void setTitle(String title) {
    this.title = title;
    public String getSubject() {
    return subject;
    public void setSubject(String subject) {
    this.subject = subject;
    public String toString() {
    StringBuffer sb = new StringBuffer();
    sb.append(" { Book Details --");
    sb.append("Title:" + getTitle());
    sb.append(", ");
    sb.append("Author:" + getAuthor());
    sb.append(", ");
    sb.append("Subject:" + getSubject());
    sb.append(". } \n");
    return sb.toString();
    }

    One of your .java files doesn't compile (has compilation errors.). Make sure there are no compilation errors before you attempt to run/debug the program.
    P.S Why are you posting this across multiple forums?

  • Where is the source codes in the project

    Help! NetBeans 6.5 Compile.
    Old man trying to learn Java and tools provided by SUN.
    I down loaded all those swing demos. I throw 3 demos into NB-6.5 to compile with existing source. When I start building got the message says compiled class file in the ?build? folder. Recommended to delete. If I clicked ?yes? or ?ignore?, it compiled and ran OK.
    One of my problem is, I like the source codes in the edit window and another one is I can not find my source in any folder in the project..
    Project folder :
    E:\NbProj\NbProj-1
    \NbProj-2
    \Nb/Proj-3
    Swing Demo source
    E:\DnLd\DemoZips
    \Source
    \demo.java-1
    \demo.java-2
    \demo.java-3
    Is it because of my setup?
    How can I get source codes into NB so I can learn NB and provided tools by editing compiling.
    Appreciate for any education to an old man.
    Myint

    In netbeans, File > New Project. In Categories select "Java", in Projects Select "Java With Existing Sources".

  • How to display the source code for this friggin' file.

    Below is a rather lengthy bit of code that provides the behavior and attributes of a web server for OpenCyc. I need to know if I can enter some java to have the HTML source code displayed in a separate text file whenever this class returns some resulting webpage. If you have any ideas it will be greatly appreciated.
    -"Will code for foo."
    package org.opencyc.webserver;
    * Class WebServer is simple multithreaded HTTP server
    * with CGI limited to a Cyc connection on default port 3600.
    * <p>
    import java.net.*;
    import java.io.*;
    import java.util.*;
    import java.util.jar.*;
    import java.text.*;
    import org.opencyc.util.*;
    public class WebServer extends Thread {
         * Singleton WebServer instance.
        public static WebServer current;
         * Default HTTP port.
        protected static int DEFAULT_PORT = 80;
         * Default Cyc base port.
        protected static int DEFAULT_CYC_PORT = 3600;
         * Default directory to serve files from on non-Windows OS.
        protected static String DEFAULT_DIR = "/";
         * Default directory to serve files from on Windows.
        //protected static String DEFAULT_WIN_DIR = "C:\\";
        protected static String DEFAULT_WIN_DIR = "k:\\opencyc\\run\\httpd\\htdocs";
         * File cache capacity.
        protected static final int CACHE_CAPACITY = 100;
         * File cache to improve file serving performance.
        protected static Hashtable fileCache = new Hashtable(CACHE_CAPACITY);
         * Number of files served from this web server.
        protected static long nbrFilesServed = 0;
         * Number of files served from this web server that were found in the cache.
        protected static long nbrCacheHits = 0;
         * Server socket for accepting connections.
        protected ServerSocket server;
         * Directories to serve files from.
        protected ArrayList dirs;
         * Map from String (jar root) to JarFile[] (jar class path).
        protected HashMap map;
         * Webserver HTTP port.
        protected int port;
         * Cyc HTML host.
        protected String cycHost = "localhost";
         * Cyc HTML port.
        protected int cycPort;
         * Expand jar tress.
        protected boolean trees;
         * Requests flag.
        protected boolean traceRequests;
         * Constructs a WebServer object.
         * @param port the port to use
         * @param directories the directory to serve files from
         * @param trees true if files within jar files should be served up
         * @param traceRequests true if client's request text should be logged.
         * @exception IOException if the listening socket cannot be opened, or problem opening jar files.
        public WebServer() throws IOException {
            getProperties();
            server = new ServerSocket(port);
            processDirectories();
         * Class Task processes a single HTTP request.
        protected class Task extends Thread {
             * Socket for the incoming request.
            protected Socket sock;
             * Client socket to the Cyc KB HTML server.
            protected Socket cycHtmlSocket;
             * Output tcp stream.
            protected DataOutputStream out;
             * Contains the file request path for a not-found error message.
            protected String notFoundPath;
             * Contains the first line of a request message.
            protected String methodLine;
             * Contains the body of a POST method.
            protected String bodyLine;
             * Constructs a Task object.
             * @param sock the socket assigned for this request.
            public Task(Socket sock) {
                this.sock = sock;
             * Processes the HTTP request.
            public void run() {
                if (traceRequests)
                    Log.current.println("connection accepted from " + sock.getInetAddress());
                notFoundPath = "";
                try {
                    out = new DataOutputStream(sock.getOutputStream());
                    try {
                        getBytes();
                    catch (Exception e) {
                        Log.current.println("file not found: " + notFoundPath);
                        try {
                            out.writeBytes("HTTP/1.1 404 Not Found\r\n");
                            out.writeBytes("Server: Cyc WebServer\r\n");
                            out.writeBytes("Connection: close\r\n");
                            out.writeBytes("Content-Type: text/html\r\n\r\n");
                            out.writeBytes("<HTML><HEAD>\n");
                            out.writeBytes("<TITLE>404 Not Found</TITLE>\n");
                            out.writeBytes("</HEAD><BODY>\n");
                            out.writeBytes("<H1>404 - Not Found</H1>\n");
                            out.writeBytes("</BODY></HTML>");
                            out.flush();
                        catch (SocketException se) {
                catch (Exception e) {
                    Log.current.printStackTrace(e);
                finally {
                    try {
                        sock.close();
                    catch (IOException e) {
             * Reads the HTTP request and obtains the response.
             * @exception IOException when HTTP request has an invalid format.
            private void getBytes() throws IOException {
                // Below logic is complex because web browsers do not close the
                // socket after sending the request, so must parse message to find
                // the end.
                BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
                ArrayList inBytes = new ArrayList(200);
                int ch = 0;
                boolean postMethod;
                methodLine = in.readLine();
                //if (traceRequests)
                //    Log.current.println("methodLine=" + methodLine);
                bodyLine = "";
                if (methodLine.startsWith("POST /"))
                    postMethod = true;
                else
                    postMethod = false;
                //if (traceRequests)
                //    Log.current.println("postMethod=" + postMethod);
                int ch1 = -1;
                int ch2 = -1;
                int ch3 = -1;
                int ch4 = -1;
                // Read the HTTP request headers.
                while (true) {
                    ch = in.read();
                    inBytes.add(new Integer(ch));
                    ch1 = ch2;
                    ch2 = ch3;
                    ch3 = ch4;
                    ch4 = ch;
                    if (ch1 == '\r' && ch2 == '\n' && ch3 == '\r' && ch4 == '\n')
                        break;
                    if ((! postMethod) &&
                        (! in.ready()) &&
                        ch1 == -1 &&
                        ch2 == -1 &&
                        ch3 == '\r' &&
                        ch4 == '\n') {
                        inBytes.add(new Integer('\r'));
                        inBytes.add(new Integer('\n'));
                        break;
                byte[] byteArray = new byte[inBytes.size()];
                for (int i = 0; i < inBytes.size(); i++) {
                    Integer ich = (Integer) inBytes.get(i);
                    byteArray[i] = ich.byteValue();
                String headers = new String(byteArray);
                if (postMethod) {
                    String lcHeaders = headers.toLowerCase();
                    int i = lcHeaders.indexOf("content-length: ");
                    String contentLength = lcHeaders.substring(i + 16);
                    int j = contentLength.indexOf("\r\n");
                    contentLength = contentLength.substring(0, j);
                    int bodyLen = (new Integer(contentLength)).intValue();
                    for (int k = 0; k < bodyLen; k++) {
                        bodyLine = bodyLine + (new Character((char) in.read())).toString();
                String line = methodLine + "\r\n" + headers + bodyLine;
                if (traceRequests)
                    Log.current.println(line);
                if (postMethod)
                    processHttpPost();
                else
                    if (line.startsWith("GET /"))
                        processHttpGet(line.substring(4));
                    else {
                        Log.current.println("Invalid request = " + line);
                        throw new IOException();
             * Processes an HTTP GET method.
             * @param httpGetPath the path of the file to get.
             * @exception IOException if the file is not found.
            private void processHttpGet(String httpGetPath) throws IOException {
                int i = httpGetPath.indexOf(' ');
                if (i > 0)
                    httpGetPath = httpGetPath.substring(0, i);
                Log.current.println(methodLine + " from " + sock.getInetAddress().getHostName());
                i = httpGetPath.indexOf("cg?");
                if (i > 0) {
                    cycHtmlRequest(httpGetPath.substring(i + 3));
                    return;
                notFoundPath = httpGetPath;
                i = httpGetPath.indexOf('/');
                if (i < 0 || map == null) {
                    if (map == null || httpGetPath.endsWith(".jar")) {
                        for (int j = 0; j < dirs.size(); j++) {
                            String dir = (String) dirs.get(j);
                            String nativePath = dir + httpGetPath;
                            nativePath = nativePath.replace('/', File.separatorChar);
                            if (fileCache.containsKey(nativePath)) {
                                writeDataBytes((byte[]) fileCache.get(nativePath));
                                Log.current.println("...cached");
                                nbrCacheHits++;
                                nbrFilesServed++;
                                return;
                            try {
                                File f = new File(nativePath);
                                byte[] fileBytes = getBytes(new FileInputStream(f), f.length());
                                writeDataBytes(fileBytes);
                                if (fileCache.size() >= CACHE_CAPACITY)
                                    fileCache.clear();
                                fileCache.put(nativePath, fileBytes);
                                Log.current.println("...from " + nativePath);
                                nbrFilesServed++;
                                return;
                            catch (IOException e) {
                    throw new IOException();
                String jar = httpGetPath.substring(0, i);
                httpGetPath = httpGetPath.substring(i + 1);
                JarFile[] jfs = (JarFile[]) map.get(jar);
                if (jfs == null)
                    throw new IOException();
                for (i = 0; i < jfs.length; i++) {
                    JarEntry je = jfs.getJarEntry(httpGetPath);
    if (je == null)
    continue;
    writeDataBytes(getBytes(jfs[i].getInputStream(je), je.getSize()));
    nbrFilesServed++;
    return;
    throw new IOException();
    * Processes an HTTP POST method.
    * @exception IOException if the file is not found.
    private void processHttpPost() throws IOException {
    Log.current.println("POST " + bodyLine + " from " + sock.getInetAddress().getHostName());
    cycHtmlRequest(bodyLine);
    * Reads the specified number of bytes and always close the stream.
    * @param in the file to be read for subsequent downloading.
    * @param length the number of bytes to read from the file.
    * @return An array of bytes from the file.
    * @exception IOException if an error occurs when processing the file.
    private byte[] getBytes(InputStream in, long length) throws IOException {
    DataInputStream din = new DataInputStream(in);
    byte[] bytes = new byte[ (int) length];
    try {
    din.readFully(bytes);
    finally {
    din.close();
    return bytes;
    * Sends the HTML request to Cyc.
    * @param cycPath the portion of the URL which is given to the Cyc HTML server.
    private void cycHtmlRequest(String cycPath) {
    String request = sock.getInetAddress().getHostName() + "&" + cycPath + "#";
    System.out.println("request=" + request);
    ArrayList bytes = new ArrayList(10000);
    try {
    cycHtmlSocket = new Socket(cycHost, cycPort);
    System.out.println("cycHost=" + cycHost + " cycPort=" + cycPort);
    BufferedReader cycIn = new BufferedReader(new InputStreamReader(cycHtmlSocket.getInputStream()));
    PrintWriter cycOut = new PrintWriter(cycHtmlSocket.getOutputStream(), true);
    cycOut.println(request);
    cycOut.flush();
    int ch = 0;
    while (ch >= 0) {
    ch = cycIn.read();
    bytes.add(new Integer(ch));
    catch (Exception e) {
    Log.current.printStackTrace(e);
    byte[] byteArray = new byte[bytes.size()];
    for (int i = 0; i < bytes.size() - 1; i++) {
    Integer ich = (Integer) bytes.get(i);
    byteArray[i] = ich.byteValue();
    try {
    writeTextBytes(byteArray);
    catch (Exception e) {
    Log.current.println(e.getMessage());
    * Responds to the HTTP client with data content from the requested URL.
    * @param bytes the array of bytes from the URL.
    * @exception IOException if there is an error writing to the HTTP client.
    public void writeDataBytes(byte[] bytes) throws IOException {
    out.writeBytes("HTTP/1.1 200 OK\r\n");
    out.writeBytes("Server: Cyc WebServer\r\n");
    out.writeBytes("Connection: close\r\n");
    out.writeBytes("Content-Length: " + bytes.length + "\r\n");
    String prefix = (new String(bytes)).toLowerCase();
    if (prefix.indexOf("<html>") > -1)
    out.writeBytes("Content-Type: text/html\r\n\r\n");
    else
    out.writeBytes("Content-Type: application/java\r\n\r\n");
    out.write(bytes);
    out.flush();
    * Respond to the HTTP client with text content from the requested URL.
    * @param bytes the array of bytes from the URL.
    * @exception IOException if there is an error writing to the HTTP client.
    public void writeTextBytes(byte[] bytes) throws IOException {
    out.writeBytes("HTTP/1.1 200 OK\r\n");
    out.writeBytes("Server: Cyc WebServer\r\n");
    out.writeBytes("Connection: close\r\n");
    out.writeBytes("Content-Length: " + bytes.length + "\r\n");
    out.writeBytes("Content-Type: text/html\r\n\r\n");
    out.write(bytes);
    out.flush();
    * Gets properties governing the web server's behavior.
    private void getProperties() {
    port = DEFAULT_PORT;
    String portProperty = System.getProperty("org.opencyc.webserver.port", "");
    if (! portProperty.equalsIgnoreCase(""))
    port = (new Integer(portProperty)).intValue();
    Log.current.println("Listening on port " + port);
    cycPort = DEFAULT_CYC_PORT;
    String cycPortProperty = System.getProperty("org.opencyc.webserver.cycPort", "");
    if (! cycPortProperty.equalsIgnoreCase(""))
    cycPort = (new Integer(cycPortProperty)).intValue();
    Log.current.println("Cyc connections directed to port " + cycPort);
    String dirsProperty = System.getProperty("org.opencyc.webserver.dirs", "");
    dirs = new ArrayList(3);
    StringTokenizer st = new StringTokenizer(dirsProperty, ";", false);
    while (st.hasMoreTokens()) {
    String dir = st.nextToken();
    dirs.add(dir);
    trees = false;
    String treesProperty = System.getProperty("org.opencyc.webserver.trees", "");
    if (! treesProperty.equalsIgnoreCase(""))
    trees = true;
    traceRequests = false;
    String traceRequestsProperty = System.getProperty("org.opencyc.webserver.traceRequests", "");
    if (! traceRequestsProperty.equalsIgnoreCase("")) {
    traceRequests = true;
    Log.current.println("tracing requests");
    * Adds transitive Class-Path jars to jfs.
    * @param jar the jar file
    * @param jfs the list of jar files to serve.
    * @param dir the jar file directory.
    * @exception IOException if an I/O error has occurred with the jar file.
    private void addJar(String jar, ArrayList jfs, String dir) throws IOException {
    Log.current.println("Serving jar files from: " + dir + jar);
    JarFile jf = new JarFile(dir + jar);
    jfs.add(jf);
    Manifest man = jf.getManifest();
    if (man == null)
    return;
    Attributes attrs = man.getMainAttributes();
    if (attrs == null)
    return;
    String val = attrs.getValue(Attributes.Name.CLASS_PATH);
    if (val == null)
    return;
    dir = dir + jar.substring(0, jar.lastIndexOf(File.separatorChar) + 1);
    StringTokenizer st = new StringTokenizer(val);
    while (st.hasMoreTokens()) {
    addJar(st.nextToken().replace('/', File.separatorChar), jfs, dir);
    * Administrative accessor method that obtains list of directories from which files are served.
    public ArrayList getDirs() {
    return dirs;
    * Administrative method that updates the list of directories from which files are served.
    public synchronized void setDirs(ArrayList dirs) throws IOException {
    this.dirs = dirs;
    fileCache.clear();
    processDirectories();
    * Administrative accessor method that obtains number of files served.
    * @return The number of files served.
    public long getNbrFilesServed() {
    return nbrFilesServed;
    * Administrative accessor method that obtains number of files served from cache.
    * @return The number of files served from the cache.
    public long getNbrCacheHits() {
    return nbrCacheHits;
    * Administrative method that clears the file cache.
    public synchronized void clearFileCache() {
    Log.current.println("Clearing file cache");
    fileCache.clear();
    nbrFilesServed = 0;
    nbrCacheHits = 0;
    * Processes the directories from which files are served, expanding jar trees if
    * directed.
    * @exception IOException if problem occurs while processing the jar files.
    private void processDirectories() throws IOException {
    if (dirs.size() == 0)
    if (File.separatorChar == '\\')
    dirs.add(DEFAULT_WIN_DIR);
    else
    dirs.add(DEFAULT_DIR);
    Iterator directories = dirs.iterator();
    while (directories.hasNext())
    Log.current.println("Serving from " + directories.next());
    if (trees) {
    map = new HashMap();
    for (int j = 0; j < dirs.size(); j++) {
    String dir = (String) dirs.get(j);
    String[] files = new File(dir).list();
    for (int i = 0; i < files.length; i++) {
    String jar = files[i];
    if (!jar.endsWith(".jar"))
    continue;
    ArrayList jfs = new ArrayList(1);
    addJar(jar, jfs, dir);
    map.put(jar.substring(0, jar.length() - 4), jfs.toArray(new JarFile[jfs.size()]));
    * Provides the command line interface for creating an HTTP server.
    * The properties are:
    * <pre>
    * org.opencyc.webserver.port=<HTTP listening port>
    * </pre>
    * which defaults to 80.
    * <pre>
    * org.opencyc.webserver.cycPort=<Cyc connection port>
    * </pre>
    * which defaults to 3600.
    * <pre>
    * org.opencyc.webserver.dirs=<path>;<path> ... ;<path>
    * </pre>
    * with the argument enclosed in quotes if any path contains an
    * embedded space.
    * The default directory on Windows is C:
    * and the default on other systems is / the default
    * can be overridden with this property. By default, all files
    * under this directory (including all subdirectories) are served
    * up via HTTP. If the pathname of a file is <var>path</var> relative
    * to the top-level directory, then the file can be downloaded using
    * the URL
    * <pre>
    * http://<var>host</var>:<var>port</var>/<var>path</var>
    * </pre>
    * Caching of file contents is performed.
    * <pre>
    * org.opencyc.util.log=all
    * </pre>
    * If the all value is given, then all attempts to download files
    * are output.
    * <pre>
    * org.opencyc.webserver.traceRequests
    * </pre>
    * If this property has any value, then the client HTTP requests are
    * output.<p>
    * <pre>
    * org.opencyc.webserver.trees
    * </pre>
    * This property can be used to serve up individual files stored
    * within jar files in addition to the files that are served up by
    * default. If the property has any value, the server finds all jar files
    * in the top-level directory (not in subdirectories). For each
    * jar file, if the name of the jar file is <var>name</var>.jar, then any
    * individual file named <var>file</var> within that jar file (or within
    * the jar or zip files referenced transitively in the Class-Path manifest
    * attribute, can be downloaded using a URL of the form:
    * <pre>
    * http://<var>host</var>:<var>port</var>/<var>name</var>/<var>file</var>
    * </pre>
    * When this property has any value, an open file descriptor and cached
    * information are held for each jar file, for the life of the process.
    * @param args an unused array of command line arguments.
    public static void main(String[] args) {
    Log.makeLog();
    System.out.println("OpenCyc Web Server");
    try {
    // Launch thread to accept HTTP connections.
    current = new WebServer();
    current.start();
    catch (IOException e) {
    e.printStackTrace();
    * Just keep looping, spawning a new thread for each incoming request.
    public void run() {
    try {
    while (true) {
    // Launch thread to process one HTTP request.
    new Task(server.accept()).start();
    catch (IOException e) {
    e.printStackTrace();

    JLundan,
    I want to thank you for responding to the thread I started on the forum at java.sun.com. Your solution to my problem of needing to print the code of the html pages that the file I included generates was just what I was looking for. However, I have some further questions to ask, if you don't mind. To clarify my task I should say that your rephrasing of the problem is accurate: "You wan't to display the contents of the HTML file that the web server produces in response of client's request?"
    Yes, this is what I need to do, but also it needs to display the source code of that html file that the server produces in response to the client's request. Also, in this case, I am the client requesting that the server return some html file, and I'm not sure where the server is. But the webserver.java file that I shared on the forum is on my local machine. I was wondering if I could modify this webserver.java file at my home so that any html file the server returns to me would automatically display the source code. This is a school project of mine and I am stuck on this one thing here.
    Further, where would I put the "foo.html" file so it can be written to?
    FileOuputStream fos = new FileOutputStream("foo.html");
    fos.write(bytes);
    fos.close();
    Thanks so much for your help. I look forward to your response, at your convenience.
    Regards

  • I want to see the source code of JVM

    Can anyone tell me how to see the source code of JVM, but not the src.zip that including in the java libraries. I just want to know how Java is implemented.
    Thanks a lot for any answer.

    You can get the source code (written in C++) of Sun's VM under the Community Licence arangement. Not sure quite where it is on this site, but if you look for it, I'm sure you'll find it.
    BTW, it's not easy reading.
    Sylvia.

  • How to protect the source code?

    hello everyone,
    how can I encrypt the bean program, such that people cannot decompile and get the source code? Any link to useful reading would be very helpful too, thanks in advance!

    Just go through this query posted in the jdc forum:
    Question of the week No.160: How do you protect your code from decompilers?
    http://developer.java.sun.com/developer/qow/archive/160/index.jsp
    Hope this clears your doubts.
    ajit

  • Scrolling  messes source code on JDeveloper 10.1.3.5 Windows 7 (64 bit)

    Hello!
    One can only work around the problem as in vista, by using a new Sun jdk, other than that shipped with JDeveloper.
    However, this is not considered safe, as the newer jdk is neither tested nor certified to work with that version of JDeveloper.
    I have already searched My Oracle Support, only to find a patch about a memory leak for JDeveloper 10.1.3.5. +(I wonder why is it not offered to the public anyway?+)
    Could any one from Oracle please see to a more permanent and safer solution to the problem?
    I am looking forward for your prompt actions, and thank you very much in advance!

    Let me rephrase: when one scrolls using page up or down keys, or by using a mouse wheel, the source code lines ( and characters) appear partly only, either distorted or overlapping with each other, in such a way that one cannot make out what has been written. I hope the above clarifies the problem in question. In such a case a screen shot might actually serve us perfectly.
    I have already given your suggestion a try, without any success.
    Thanks anyway very much for your reply!
    Any other helping hand available?
    TIA!

  • How to understand the Vector source code for function elements()?

    hello all:
    This following code snippet is extracted from java.util.Vector source code.
    who can tell me how i can understand what the function nextElement does?
    thank you
    public Enumeration elements() {
         return new Enumeration() {
             int count = 0;
             public boolean hasMoreElements() {
              return count < this.num_elem;
             public Object nextElement() {
              synchronized (Vector.this) {   //???
                  if (count < elementCount) {//???
                   return elementData[count++];
              throw new NoSuchElementException("Vector Enumeration");
        }

    Perhaps code would help more. This codeimport java.util.Vector;
    import java.util.Enumeration;
    import java.util.Iterator;
    public class Test {
        public static void main(String[] arghs) {
         Vector v = new Vector();
         Integer two = new Integer(2);
         // Fill the Vector
         v.add("One");
         v.add(two);
         v.add(new StringBuffer("Three"));
         // Enumerate through the objects in the vector
         System.out.println("---- Enumeration ----");
         Enumeration e = v.elements();
         while (e.hasMoreElements()) System.out.println(e.nextElement());
         // Loop through the objects in the vector
         System.out.println("---- Loop ----");
         for (int i=0; i<v.size(); i++) System.out.println(v.get(i));
         // Iterate through the objects in the vector
         System.out.println("---- Iterator ----");
         Iterator i = v.iterator();
         while (i.hasNext()) System.out.println(i.next());
    }produces this output
    ---- Enumeration ----
    One
    2
    Three
    ---- Loop ----
    One
    2
    Three
    ---- Iterator ----
    One
    2
    Three
    So, for a Vector, all three do the same thing. However, Iterator is part of the Collection Framework (see [url http://java.sun.com/j2se/1.4.2/docs/guide/collections/index.html]here). This allows you to treat a whole bunch of [url http://java.sun.com/j2se/1.4.2/docs/guide/collections/reference.html]objects which implement the Collection interface all the same way. I know this is way more than you were asking, but I hope it at least clears up what you were asking.

  • Applying an annotation processor on its own source code

    Hi,
    I am developing a larger application and for a certain low level implementation problem, I came up with the idea of tagging some classes with own annotations and use an annotation processor to collect these classes and store the list of them somehow. I am a complete newbie in respect to this, and as my first attempts failed, I wonder whether it is really possible to include the implementation of Processor/AbstractProcessor (with the respective annotations on its own) in the same source code as the annotations it shall process and have the compiler to find and run the processor during the compilation or whether it is mandatory to create a separate jar file with the META-INF data in order to get it work.
    Thanks for any response.
    Klaus

    KlausM wrote:
    Hi,
    I am developing a larger application and for a certain low level implementation problem, I came up with the idea of tagging some classes with own annotations and use an annotation processor to collect these classes and store the list of them somehow. I am a complete newbie in respect to this, and as my first attempts failed, I wonder whether it is really possible to include the implementation of Processor/AbstractProcessor (with the respective annotations on its own) in the same source code as the annotations it shall process and have the compiler to find and run the processor during the compilation or whether it is mandatory to create a separate jar file with the META-INF data in order to get it work.
    Thanks for any response.
    KlausYou can specify a particular processor to run using javac's "-processor" option without creating a jar file for the processor. However, in addition to source files, annotation processors can also run on class files so it would be possible for your annotation processor to be a post-pass after the build otherwise completes.
    You may also want to follow the recommendation on annotation processor build hygiene:
    http://blogs.sun.com/darcy/entry/annotation_processing_build_advice_set

  • Source code for sdk

    I have a simple question ( I think so ...). I'm getting start with java and I've this problem: I unzipped file src in jdk1.3.1_07. I'd like reading the source code of some classes. But in many classes I found only the declaration of the methods and not the body. For example, in file "System.java" ( in the package java.lang) there is only:
    public static native void arraycopy(Object src, int src_position,
    Object dst, int dst_position,
    int length);
    So, where can I found the body?
    Thank you

    The method is a native method; this means that it's written in code other than java (probably assembly or c++). I doubt that Sun will ever give you the code source to it, no matter how nice you ask...

Maybe you are looking for

  • Is there any way to force the "Save As" dialog to automatically select only the filename, not the filename+extension?

    See https://bugzilla.mozilla.org/show_bug.cgi?id=426680 or more clearly stated here: https://bugzilla.mozilla.org/show_bug.cgi?id=480522 Two years later this "bug" (not exactly a bug, but a pain in the butt nonetheless) is still not resolved. Yes, I'

  • Keyboard & Character Viewer "broken"

    I'm having trouble with the above utility to view and insert special characters when typesetting. Whenever I try and launch the viewer I get a "flashing" window with an activity circle, but it never shows the actual character viewer. It just keeps fl

  • Korea Infotype 539 fields

    Hi, I'm trying to configure the Infotype 2 screen for Korea which include the Infotype 539 fields (LNMHG, FNMHG and REGNO). I used screen 2041 in t588m and the screen is displaying fine. However, when I input the values in the fields and hit enter, t

  • While doing backups, found a strange file ?

    While doing one of my daily backups, I ran into a strange file. Not quite sure what it is for, but I have never seen it there before ? I googled without any luck :                ( 1 )      ziFAr2Kf                ( 2 )      .buildpathUX Any ideas ?

  • Desktop Sync Software Error: "The Operation terminated unexpectedly" During Outlook Calendar Sync

    My system is a standalone Dell PC running WinXP Pro SP3, Outlook 2003 SP3, and BB Desktop Software 6.1.0.36 (latest update).  Device is a Bold 9900.  Problem is with Blackberry Desktop synchronization of my Outlook Calendar; all other Organizer funct