Retrieve with Java

I would like to how can i make a retrieve with Java Api ? is it possible ?Before i was using Excel/VBA to make a retrieve .

Look at the sample code in the samples\japi\DataQuery.java file. It has examples of all of the major operations.Tim TowApplied OLAP, Inc.

Similar Messages

  • Problem with Java Stack- dev_w2 log mentioned.

    Hi everyone, I have a problem with Java Stack, I could not connect to XI home page,
    I am unable to login to j2ee engine using visual Administrator.
    Please go through the log below. And help me out to resolve this issue and let me know what could be the problem.
    trc file: "dev_w2", trc level: 1, release: "640"
    ACTIVE TRACE LEVEL           1
    ACTIVE TRACE COMPONENTS      all, M

    B  create_con (con_name=R/3)
    B  Loading DB library 'C:\usr\sap\SXI\SYS\exe\run\dboraslib.dll' ...
    B  Library 'C:\usr\sap\SXI\SYS\exe\run\dboraslib.dll' loaded
    B  Version of 'C:\usr\sap\SXI\SYS\exe\run\dboraslib.dll' is "640.00", patchlevel (0.39)
    B  New connection 0 created
    M systemid   560 (PC with Windows NT)
    M relno      6400
    M patchlevel 0
    M patchno    43
    M intno      20020600
    M make:      multithreaded, Unicode
    M pid        4140
    M
    M  ***LOG Q0Q=> tskh_init, WPStart (Workproc 2 4140) [dpxxdisp.c   1160]
    I  MtxInit: -2 0 0
    M  DpSysAdmExtCreate: ABAP is active
    M  DpSysAdmExtCreate: JAVA is not active
    M  DpShMCreate: sizeof(wp_adm)          13160     (1316)
    M  DpShMCreate: sizeof(tm_adm)          2780232     (13832)
    M  DpShMCreate: sizeof(wp_ca_adm)          24000     (80)
    M  DpShMCreate: sizeof(appc_ca_adm)     8000     (80)
    M  DpShMCreate: sizeof(comm_adm)          290000     (580)
    M  DpShMCreate: sizeof(vmc_adm)          0     (372)
    M  DpShMCreate: sizeof(wall_adm)          (38456/34360/64/184)
    M  DpShMCreate: SHM_DP_ADM_KEY          (addr: 060A0040, size: 3195320)
    M  DpShMCreate: allocated sys_adm at 060A0040
    M  DpShMCreate: allocated wp_adm at 060A1B58
    M  DpShMCreate: allocated tm_adm_list at 060A4EC0
    M  DpShMCreate: allocated tm_adm at 060A4EE8
    M  DpShMCreate: allocated wp_ca_adm at 0634BB30
    M  DpShMCreate: allocated appc_ca_adm at 063518F0
    M  DpShMCreate: allocated comm_adm_list at 06353830
    M  DpShMCreate: allocated comm_adm at 06353848
    M  DpShMCreate: allocated vmc_adm_list at 0639A518
    M  DpShMCreate: system runs without vmc_adm
    M  DpShMCreate: allocated ca_info at 0639A540
    M  DpShMCreate: allocated wall_adm at 0639A548
    X  EmInit: MmSetImplementation( 2 ).
    X  <ES> client 2 initializing ....
    X  <ES> InitFreeList
    X  Using implementation flat
    M  <EsNT> Memory Reset disabled as NT default
    X  ES initialized.

    M  calling db_connect ...
    C  Got ORACLE_HOME=c:\oracle\ora92 from environment
    C  Client NLS settings: AMERICAN_AMERICA.UTF8
    C  Logon as OPS$-user to get SAPSXI's password
    C  Connecting as /@SXI on connection 0 ...
    C  Attaching to DB Server SXI (con_hdl=0,svchp=04494404,svrhp=04495074)

    C  Starting user session (con_hdl=0,svchp=04494404,srvhp=04495074,usrhp=0449D8AC)

    C  Now I'm connected to ORACLE
    C  Got SAPSXI's password from OPS$-user
    C  Disconnecting from connection 0 ...
    C  Closing user session (con_hdl=0,svchp=04494404,usrhp=0449D8AC)
    C  Now I'm disconnected from ORACLE
    C  Connecting as SAPSXI/<pwd>@SXI on connection 0 ...
    C  Starting user session (con_hdl=0,svchp=04494404,srvhp=04495074,usrhp=0449D8AC)
    C  Now I'm connected to ORACLE
    C  Database NLS settings: AMERICAN_AMERICA.UTF8
    C  Database instance sxi is running on STARXI with ORACLE version 9.2.0.5.0 since 20081020
    B  Connection 0 opened
    B  Wp  Hdl ConName          ConId     ConState     TX  PRM RCT TIM MAX OPT Date     Time   DBHost         
    B  000 000 R/3              000000000 ACTIVE       NO  YES NO  000 255 255 20081020 123752 STARXI         
    M  db_connect o.k.
    I  MtxInit: 2 0 0
    M  SHM_PRES_BUF               (addr: 08230040, size: 4400128)
    M  SHM_ROLL_AREA          (addr: 62E40040, size: 77594624)
    M  SHM_PAGING_AREA          (addr: 08670040, size: 39845888)
    M  SHM_ROLL_ADM               (addr: 0AC80040, size: 775412)
    M  SHM_PAGING_ADM          (addr: 0AD40040, size: 525344)
    M  ThCreateNoBuffer          allocated 540152 bytes for 1000 entries at 0ADD0040
    M  ThCreateNoBuffer          index size: 3000 elems
    M  ThCreateVBAdm          allocated 12160 bytes (50 server) at 0AE60040
    X  EmInit: MmSetImplementation( 2 ).
    X  <ES> client 2 initializing ....
    X  Using implementation flat
    X  ES initialized.

    B  db_con_shm_ini:  WP_ID = 2, WP_CNT = 10
    B  dbtbxbuf: Buffer TABL  (addr: 103D00C8, size: 30000128, end: 1206C4C8)
    B  dbtbxbuf: Profile: max_objects = 5000, displace = 1, reorg = 1
    B  dbtbxbuf: request_unit = 2000, sync_reload = 5, inval_reload = 5
    B  dbtbxbuf: protect_shm = 0, force_checks = 0
    B  dbtbxbuf: tsize_retry = 14302848
    B  ***LOG BB0=> buffer TABL       started with length 30000128   bytes [dbtbxbuf#7 @ 15714] [dbtbxbuf1571 4]
    B  dbtbxbuf: Buffer TABLP (addr: 0E4000C8, size: 10240000, end: 0EDC40C8)
    B  dbtbxbuf: Profile: max_objects = 500, displace = 1, reorg = 1
    B  dbtbxbuf: request_unit = 2000, sync_reload = 5, inval_reload = 5
    B  dbtbxbuf: protect_shm = 0, force_checks = 0
    B  dbtbxbuf: tsize_retry = 5046656
    B  ***LOG BB0=> buffer TABLP      started with length 10240000   bytes [dbtbxbuf#7 @ 15714] [dbtbxbuf1571 4]
    B  dbtbxbuf: Reading TBX statistics:
    B  dbtbxbuf: 41 object entries precreated
    B  Layout of EIBUF buffer shared memory:
    B  0: 1 * 4 = 4
    B  1: 1 * 344 = 344
    B  2: 10 * 20 = 200
    B  3: 4001 * 48 = 192048
    B  4: 2000 * 232 = 464000
    B  5: 4001 * 4 = 16004
    B  6: 1 * 200 = 200
    B  7: 65 * 4 = 260
    B  8: 13754 * 256 = 3521024
    B  Tracing = 0, Shm Protection = 0, Force checks = 0
    B  dbexpbuf: Buffer EIBUF (addr: 0EDE00D0, size: 4194304, end: 0F1E00D0)
    B  ***LOG BB0=> buffer EIBUF      started with length 4096k      bytes [dbexpbuf#5 @ 2322] [dbexpbuf2322 ]
    B  Layout of ESM   buffer shared memory:
    B  0: 1 * 4 = 4
    B  1: 1 * 344 = 344
    B  2: 10 * 20 = 200
    B  3: 4001 * 48 = 192048
    B  4: 2000 * 232 = 464000
    B  5: 4001 * 4 = 16004
    B  6: 1 * 200 = 200
    B  7: 65 * 4 = 260
    B  8: 13754 * 256 = 3521024
    B  Tracing = 0, Shm Protection = 0, Force checks = 0
    B  dbexpbuf: Buffer ESM   (addr: 0F1F00D0, size: 4194304, end: 0F5F00D0)
    B  ***LOG BB0=> buffer ESM        started with length 4096k      bytes [dbexpbuf#5 @ 2322] [dbexpbuf2322 ]
    B  Layout of CUA   buffer shared memory:
    B  0: 1 * 4 = 4
    B  1: 1 * 344 = 344
    B  2: 10 * 20 = 200
    B  3: 3001 * 48 = 144048
    B  4: 1500 * 232 = 348000
    B  5: 3001 * 4 = 12004
    B  6: 1 * 200 = 200
    B  7: 193 * 4 = 772
    B  8: 5012 * 512 = 2566144
    B  Tracing = 0, Shm Protection = 0, Force checks = 0
    B  dbexpbuf: Buffer CUA   (addr: 0F6000D0, size: 3072000, end: 0F8EE0D0)
    B  ***LOG BB0=> buffer CUA        started with length 3000k      bytes [dbexpbuf#5 @ 2322] [dbexpbuf2322 ]
    B  Layout of OTR   buffer shared memory:
    B  0: 1 * 4 = 4
    B  1: 1 * 344 = 344
    B  2: 10 * 20 = 200
    B  3: 4001 * 48 = 192048
    B  4: 2000 * 232 = 464000
    B  5: 4001 * 4 = 16004
    B  6: 1 * 200 = 200
    B  7: 81 * 4 = 324
    B  8: 13754 * 256 = 3521024
    B  Tracing = 0, Shm Protection = 0, Force checks = 0
    B  dbexpbuf: Buffer OTR   (addr: 0F8F00D0, size: 4194304, end: 0FCF00D0)
    B  ***LOG BB0=> buffer OTR        started with length 4096k      bytes [dbexpbuf#5 @ 2322] [dbexpbuf2322 ]
    B  ***LOG BB0=> buffer CALE       started with length 500000     bytes [dbcalbuf#1 @ 2206] [dbcalbuf2206 ]
    B  dbtran INFO (init_connection '<DEFAULT>' [ORACLE:640.00]):
    B   max_blocking_factor =  15,  max_in_blocking_factor      =   5,
    B   min_blocking_factor =  10,  min_in_blocking_factor      =   5,
    B   prefer_union_all    =   0,  prefer_union_for_select_all =   0,
    B   prefer_fix_blocking =   0,  prefer_in_itab_opt          =   1,
    B   convert AVG         =   0,  alias table FUPD            =   0,
    B   escape_as_literal   =   1,  opt GE LE to BETWEEN        =   0,
    B   select *            =0x0f,  character encoding          = STD / <none>:-,
    B   use_hints           = abap->1, dbif->0x1, upto->2147483647, rule_in->0,
    B                         rule_fae->0, concat_fae->0, concat_fae_or->0

    M  PfHIndInitialize: memory=<0AEEC488>, header=<0AEEC488>, records=<0AEEC4D0>
    M  SecAudit(init_sel_info): init of SCSA completed: 02 slots used
    M  ***LOG AV6=> 02& [rsauwr1.c    1619]
    M  SsfSapSecin: automatic application server initialization for SAPSECULIB
    N  SsfSapSecin: Looking for PSE in database
    N  SsfPseLoad: started...(path=C:\usr\sap\SXI\DVEBMGS00\sec, AS=starxi, instanceid=00)

    N  SsfPseLoad: Downloading file C:\usr\sap\SXI\DVEBMGS00\sec\SAPSYS.pse (client:    , key: SYSPSE, len: 1078)
    N  SsfPseLoad: ended (1 of 1 sucessfully loaded, 1 checked...
    N  MskiCreateLogonTicketCache: Logon Ticket cache created in shared memory.
    N  MskiCreateLogonTicketCache: Logon Ticket cache pointer registered in shared memory.
    M  rdisp/reinitialize_code_page -> 0
    M  icm/accept_remote_trace_level -> 0
    M  rdisp/no_hooks_for_sqlbreak -> 0

    S  *** init spool environment
    S  initialize debug system
    T  Stack direction is downwards.
    T  debug control: prepare exclude for printer trace
    T  new memory block 121963B0
    S  spool kernel/ddic check: Ok
    S  using table TSP02FX for frontend printing
    S  1 spool work process(es) found
    S  frontend print via spool service enabled
    S  printer list size is 150
    S  printer type list size is 50
    S  queue size (profile)   = 300
    S  hostspool list size = 3000
    S  option list size is 30
    S      intervals: query=50, rescan=1800, global=300 info=120
    S      processing queue enabled
    S  creating spool memory service RSPO-RCLOCKS at 0FEB00A8
    S  doing lock recovery
    S  setting server cache root
    S  using server cache size 100 (prof=100)
    S  creating spool memory service RSPO-SERVERCACHE at 0FEB0370
    S    using messages for server info
    S  size of spec char cache entry: 297028 bytes (timeout 100 sec)
    S  size of open spool request entry: 2132 bytes
    S  immediate print option for implicitely closed spool requests is disabled


    A  -PXA--
    A  PXA INITIALIZATION
    A  PXA: Fragment Size too small: 73 MB, reducing # of fragments
    A  System page size: 4kb, admin_size: 5032kb.
    A  PXA allocated (address 67850040, size 150000K)
    A  System name
    A  ORACLE...........................SXI........20081004121019.....................................
    A  is used for RFC security.
    A  Sharedbuffer token: 41534050...33 (len: 111)====== 2b61c190857e36a8681ef39a...
    A  abap/pxa = shared protect gen_remote
    A  PXA INITIALIZATION FINISHED
    A  -PXA--

    A  ABAP ShmAdm initialized (addr=579F4000 leng=20955136 end=58DF0000)
    A  >> Shm MMADM area (addr=57E69DF0 leng=126176 end=57E88AD0)
    A  >> Shm MMDAT area (addr=57E89000 leng=16150528 end=58DF0000)
    A  RFC rfc/signon_error_log = -1
    A  RFC rfc/dump_connection_info = 0
    A  RFC rfc/dump_client_info = 0
    A  RFC rfc/cp_convert/ignore_error = 1
    A  RFC rfc/cp_convert/conversion_char = 23
    A  RFC rfc/wan_compress/threshold = 251
    A  RFC rfc/recorder_pcs not set, use defaule value: 2
    A  RFC rfc/delta_trc_level not set, use default value: 0
    A  RFC rfc/no_uuid_check not set, use default value: 0
    A  RFC Method> initialize RemObjDriver for ABAP Objects
    A  Hotpackage version: 9
    M  ThrCreateShObjects          allocated 10568 bytes at 0FFD0040
    M  ThVBStartUp: restart pending update requests

    M  ThVBAutoStart: update-auto-delete
    N  SsfSapSecin: putenv(SECUDIR=C:\usr\sap\SXI\DVEBMGS00\sec): ok
    N  SsfSapSecin: PSE C:\usr\sap\SXI\DVEBMGS00\sec\SAPSYS.pse found!

    N  =================================================
    N  === SSF INITIALIZATION:
    N  ===...SSF Security Toolkit name SAPSECULIB .
    N  ===...SSF trace level is 0 .
    N  ===...SSF library is C:\usr\sap\SXI\SYS\exe\run\sapsecu.dll .
    N  ===...SSF hash algorithm is SHA1 .
    N  ===...SSF symmetric encryption algorithm is DES-CBC .
    N  ===...sucessfully completed.
    N  =================================================
    N  MskiInitLogonTicketCacheHandle: Logon Ticket cache pointer retrieved from shared memory.
    N  MskiInitLogonTicketCacheHandle: Workprocess runs with Logon Ticket cache.
    W  =================================================
    W  === ipl_Init() called
    W    ITS Plugin: Path dw_gui
    W    ITS Plugin: Description ITS Plugin - ITS rendering DLL
    W    ITS Plugin: sizeof(SAP_UC) 2
    W    ITS Plugin: Release: 640, [6400.0.43.20020600]
    W    ITS Plugin: Int.version, [31]
    W    ITS Plugin: Feature set: [3]
    W    ===... Calling itsp_Init in external dll ===>
    W  === ipl_Init() returns 0, ITSPE_OK: OK
    W  =================================================
    M  MBUF info for hooks: MS component UP
    M  ThSetEnqName: set enqname by profile
    M  ThISetEnqname: enq name = >starxi_SXI_00                           <

    E  *************** EnqId_EN_ActionAtMsUpHook ***************
    E  Hook on upcoming Ms (with EnqSrv), get auth EnqId and check it locally
    E  Enqueue Info: enque/disable_replication = 2
    E  Enqueue Info: replication disabled


    E  *************** ObjShMem_CheckAuthoritativeEnqId ***************
    E  Checking authoritative EnqId from EnqSrv into ObjShMem
    E  ObjShMem_CheckAuthoritativeEnqId: ObjShMem ...
    E  EnqId.EnqTabCreaTime    = -999
    E  EnqId.RandomNumber      = -999
    E  ReqOrd.TimeInSecs       = -999
    E  ReqOrd.ReqNumberThisSec = -999
    E  ObjShMem_CheckAuthoritativeEnqId: ObjShMem ...
    E  EnqId.EnqTabCreaTime    = -999
    E  EnqId.RandomNumber      = -999
    E  ReqOrd.TimeInSecs       = -999
    E  ReqOrd.ReqNumberThisSec = -999
    E  ObjShMem_CheckAuthoritativeEnqId: EnqId is initial in ShMem
    E  ObjShMem_CheckAuthoritativeEnqId: Overwrite incoming auth EnqId, continue
    E  EnqId inscribed into initial ObjShMem: (ObjShMem_CheckAuthoritativeEnqId)
    E  -SHMEM--
    E  EnqId:          EnqTabCreaTime/RandomNumber    = 20.10.2008 12:38:10  1224486490 / 4140
    E  ReqOrd at Srv:  TimeInSecs/ReqNumberThisSec    = 20.10.2008 12:38:11  1224486491 / 1
    E  ReqOrd at Cli:  TimeInSecs/ReqNumberThisSec    = 20.10.2008 12:38:11  1224486491 / 1
    E  Status:         STATUS_OK
    E  -
    M  ThActivateServer: state = STARTING
    L  Begin of BtcSysStartRaise
    L  Raise event SAP_SYSTEM_START with parameter <starxi_SXI_00       >
    L  End of BtcSysStartRaise

    I  MPI<c>9#3 Peak buffer usage: 5 (@ 64 KB)

    M  *** WARNING => ThCheckReqInfo: req_info & DP_CANT_HANDLE_REQ
    M  return number range rc 12
    M  *** WARNING => ThNoGet: get from object (cli/obj/subobj/range = 000/ALAUTOUID /      /01) returned rc 12

    S  server @>SSRV:starxi_SXI_00@< appears or changes (state 1)
    B  table logging switched off for all clients

    S  server @>SSRV:starxi_SXI_00@< appears or changes (state 1)

    M  hostaddrlist return 0

    M  hostaddrlist return 0

    M  hostaddrlist return 0
    M  hostaddrlist return 0
    M  hostaddrlist return 0
    Regards,
    Varun.

    You probably made the same mistake as I did and added the tables manually to the "sample" database instead of the "sun-appserv-samples" database.
    marc

  • How to retrieve the java object in a proxy service in osb -- Plz help

    Hi all,
    I have a singleton java class which runs whenever the weblogic server gets started and store the output in its object. I need to access this java object from a proxy service in osb.
    We tried using java call out and retrieved that object but we couldn't know how to parse that object into XML.
    We are not sure of using the java call out in osb to solve this purpose because whenever we use a java callout, that particular java code will run which is not the case of singleton class.
    So kindly help us how to retrieve the java object which holds the output without running the java code every time because its already run and holding the output in its object.
    Regards
    Prabhu

    here the doc http://download.oracle.com/docs/cd/E13159_01/osb/docs10gr3/userguide/context.html#wp1106656
    but I guess you are already at the stage of getting a POJO in a first Java Callout and passing the POJO to a second Java Callout, which should then return it to OSB as a XMLObject.
    My recommendation is to write a Java function which returns a XMLObject and uses a XMLCursor to populate it with the values of the POJO.
    An XMLObject returned to the OSB is automatically transformed in a "XML" variable (which in reality is represented as a XMLObject in the Pipeline context)
    Here some code sample:
    http://www.javamonamour.org/2010/09/how-to-create-xmlobject-using-xmlcursor.html

  • How to use parameter file with java

    Is it possible to use a parameter file with Java, and is there any class/method to make it easy to call and use these parameter from a text file, other than scanning the whole text file manually as we can do normally with visual basic/c++, so we can call the program with the parameter file, like java testing c:\\testing.ini

    If I understand you correctly, you may be looking for a properties file. This is basically a text file that contains pairs of strings in the form:
    parameter1=value1
    parameter2=value2
    parameter3=value3
    ...etc.
    and the values are retrieved using the java.util.Properties class - see:
    http://java.sun.com/j2se/1.3/docs/api/java/util/Properties.html
    Sample use://Call chis method once, to load the props file.
    //props file is called "demo.properties", and is
    //in a directory that is included in the classpath
        private void loadMyProperties() throws Exception
         InputStream stream = getResourceAsStream("/demo.properties");
         if(stream == null)
             throw new Exception("stream is null!");
         demoProperties = new Properties();
         demoProperties.load(stream);
         stream.close();
    // Then you can retrieve properties in your code using:
    String param3 = demoProperties.getProperty("parameter3");
    //...etc

  • Rendering of an 8Bit-tiff with java.awt produces crap

    Hi Folks,
    i do a downsampling of tiff images. The source tiffs are colored 8 Bit greyscale with a 256 color-table. Now i have 2 possibilities to resample with java.awt:
    1. the target-tiff is of 24Bit true color:
    BufferedImage objDownsample = new BufferedImage(iTargetWidth, iTargetHeight, BufferedImage.TYPE_INT_RGB);The result is a perfect looking, but oversized tiff with 16 million colors each pixel.
    2. the target-tiff is of 8Bit like the source-tiff:
    BufferedImage objDownsample = new BufferedImage(iTargetWidth, iTargetHeight, BufferedImage.TYPE_BYTE_INDEXED,(IndexColorModel)image.getColorModel());The result is a small sized tiff image of 8Bit. Problem: it now has visible vertical stripes of two colors (which both composed result the source-color i assume).
    Does anybody know what's wrong here and how to retrieve the 8Bit color-image without stripes?
    Here comes the whole source:
        private BufferedImage resize(int newHeight, int newWidth, BufferedImage image) {
            int iTargetHeight = newHeight;
            int iTargetWidth = newWidth;
            //Create a BufferedImage that fits
            BufferedImage objDownsample = new BufferedImage(iTargetWidth, iTargetHeight, BufferedImage.TYPE_BYTE_INDEXED,(IndexColorModel)image.getColorModel());
            //A map with all necessary rendering hints to optimize the quality of the image
            Map<java.awt.RenderingHints.Key, java.lang.Object> obj_Map = new HashMap<java.awt.RenderingHints.Key, java.lang.Object>();       
            obj_Map.put(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
            obj_Map.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            obj_Map.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
          // Draw the scaled image
          Graphics2D graphics2D = objDownsample.createGraphics();
            graphics2D.addRenderingHints(obj_Map);
            graphics2D.drawImage(image, 0, 0, iTargetWidth, iTargetHeight, null);
            return objDownsample;
        }Thanks
    Albrecht

    As far as I can tell, this solution only allows compositing within the component that is currently being painted. What would be nice is if I could add a custom composite to say .. a JLabel, which paints based on the colors of the underlying pixel data (ie. from its parent container). In this way you could make a JLabel that always inverts the color of what's underneath.
    Here, painting to the screen using a composite allows me to get the pixels underneath as the destination raster, the pixels in the JLabel as the source raster, and what actually gets painted which is the destination output raster.
    If I paint to a BufferedImage instead, the composite's 'destination raster' is the new BufferedImage's default values which are all black. Thus compositing over this would not have the desired effects described above (inverting the underlying image for instance). The missing piece when rendering to the BufferedImage is first copying the underlying screen data into a BufferedImage before painting to it. How do I do that? Something tells me it's very difficult.

  • Problems with Java Scripting API

    Hello Everyone!
    Guys, I need help with Java scripting API. A problem is that I cannot understand how can I operate Java Object's fields and methods from the script language. I have chosen embedded javascript to work with. And I can get the fields and methods of in-box java classes (such as ArrayList for example), but I cannot work with methods and fields from my own classes!
    Here is an example:
    public class ScriptingExample {  
        class MyClass {  
            int myfield = 5;  
            int getInt() {return 7;}  
        public void runExample() {  
            ScriptEngineManager mgr = new ScriptEngineManager();  
            List<ScriptEngineFactory> factories = mgr.getEngineFactories();  
            ScriptEngineManager factory = new ScriptEngineManager();  
            ScriptEngine engine = factory.getEngineByName("JavaScript");  
            MyClass mc = new MyClass();  
            try{  
                engine.put("mc", mc);  
                engine.eval("print(mc.myfield); print(mc.getInt())"); // or engine.eval("print(mc.myfield)");
            } catch (Exception e) {e.printStackTrace();}  
    }  If I run the code with the commented part it prints "undefined" instead of "5".
    If I run the code as it is it prints error instead of "7":
    undefinedjavax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function getInt. (<Unknown source>#1) in <Unknown source> at line number 1
    at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
    at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
    at javax.script.AbstractScriptEngine.eval(Unknown Source)
    at solutiondatabase.ScriptingExample.runExample(ScriptingExample.java:26)
    at solutiondatabase.Main.main(Main.java:49)
    How can I fix it?

    Guys,
    please let me raise this topic because several new questions emerged.
    (1) How can I get all the variables created inside my engine?
    There are two kinds of variables: first kind is Java obejcts put inside the engine and second kind is the variables created in my script, such as 'var a = 4;'. How can I list all the variables of that two kinds?
    (2) Is there is a way to make 'import static' to the engine? I dont want to write MyClass.MyEnum.MyEnumItem every time. Also, I cannot put the whole enum into the engine with engine.put("MyEnum", MyEnum); I can put only enum items separately: engine.put("MyEnum", MyEnum.EnumItemA);. Thats why I ask about static import.
    (3) How can I cast engine variables back to java variables inside my java code?
    Here is my example:
    package mypackage;
    import java.util.ArrayList;
    import java.util.List;
    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineFactory;
    import javax.script.ScriptEngineManager;
    public class Main
         public static void main(String[] args) throws Exception 
              ScriptEngineManager mgr = new ScriptEngineManager();
              List<ScriptEngineFactory> factories = mgr.getEngineFactories();
              ScriptEngineManager factory = new ScriptEngineManager();
              ScriptEngine engine = factory.getEngineByName("JavaScript");
              ArrayList<Double> myList = new ArrayList<Double>();
              myList.add(5.0);                    
              engine.put("MyList", myList);     
              engine.eval("MyVar = MyList.get(0);");
              System.out.println((Double)engine.get("MyVar"));
    }The result is:
    Exception in thread "main" java.lang.ClassCastException: sun.org.mozilla.javascript.internal.NativeJavaObject cannot be cast to java.lang.Double
    +     at mypackage.Main.main(Main.java:28)+
    Is it possible to retrieve my Double java object from the engine?
    Edited by: Dmitry_MSK on Aug 6, 2010 1:56 AM

  • Perform Hamming window and FFT with Java

    Hi all,
    I am trying to apply Hamming window on my lengthy sound data soundSample[1000] with window length 100. Then proceed with FFT.
    And i found that java does have the package for Hamming window and FFT. As below,
    http://code.compartmental.net/minim/javadoc/ddf/minim/analysis/FFT.html
    http://marf.sourceforge.net/api/marf/math/Algorithms.Hamming.html
    But i hardly find an example that illustrate how to use the package in a java program. So no idea how should i use the method in package.
    Please advise and appreciate if reference is provided.
    Thank you.

    Hi,
    I have spent sometimes to study and do the coding for FFT on audio samples.
    My project is to study the FFT working by performing the FFT on audio sampled data.
    After this is done, then only proceed to extract the pitch value in the audio data.
    Below is the coding that i have done by referring to the provided steps:
    In my main, i call this method and past the retrieved sampled sound data to this method.
    public static void Analyze(int[] soundSample,float sample_rate ) {
            int N = (int)sample_rate/5;
            int Number_Sample = soundSample.length;
            Complex[] fftBuffer = new Complex [2*N];
            Complex[] fftResult = new Complex [2*N];
            Complex [] lastN = new Complex [N];   // The array to save the last N sample
            int delay = 0;
            double delta = 2*Math.PI/(2*N);
            // I have no idea how can i convert my sample array to double so that it will be in the range of [-1,+1]
            while(delay <=soundSample.length){
                //Extract the 2N sample for FFT analysis and convert the data to complex number.
                for (int z=0; z<2*N; z++){
                    fftBuffer[z] = new Complex(soundSample[z+delay],0) ;                
                for (int i=N-1;i>=N/2; i-- ){
                    lastN[N-1-i] = fftBuffer;
    for (int z=0; z<2*N; z++){
    fftBuffer[z] = fftBuffer[z].times(0.54-0.46*Math.cos(z*delta));
    fftResult = FFT1.fft(fftBuffer);
    delay = 2*N + delay;
    1) I was trying to perform FFT with 2N samples then keep on looping the FFT method until 2N reaches the ends of sampled data.
    But the FFT that i am working with is radix 2... It doesn't work with my 2N samples... Please teach me how should i work out FFT regardless the number of sample?
    2) The hamming window coefficient i m using is based on http://www.mathworks.com/help/toolbox/signal/hamming.html . I am working on index [0:2N] ..
    Is it appropriate?
    3) According to your No1 steps, the acceptable frequency resolution is 5Hz. May i know what is this representing? And is it application for most of the FFT application? How can i determine the frequency resolution that i should used in my project?
    Sorry for late reply as i was trying to work out the thing..
    Hereby attach to your the my coding.. and hopes to have your guidance and tutorial how to extract the pitch for recording audio file with Java.
    I have done the pitch extraction with MATLAB.. but Matlab as built-in FFT function... 
    So i m now get stucked how to perform FFT on audio sound sample regardless the N value of sound sample for FFT buffer.
    Many thanks for your former advise... and
    Looking forward for your replies again.
    Happy New Year 2011 :)
    Edited by: 诸葛 on Dec 31, 2010 9:29 AM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

  • Get html data with java

    Ok say I want to get some kind of data from a html page? How could it be done? Is this possible with java, or do I have to use some kind of scripting language?

    It looks like what you might be looking for is a method of getting HTTP, not HTML, data. HTML is simply text and can therefore be retrieved any way that a File could be retrieved (using a FileReader/FileWriter). HTTP, on the other hand, is the protocol that we use the most when viewing websites.
    If you're looking to make HTTP request, you may want to look into something like java.net.HttpURLConnection. Try searching these forums for HTTP, not html.

  • Doubt handling Clob columns with Java JDBC api

    Hi,
    we have a doubt handling Clob columns with Java JDBC api.
    Reading Oracle 10g official documentation (document b10979.pdf, page 236), we found this note:
    ============================================
    To write LOB data, the application must acquire a write lock on the LOB object. One way to accomplish this is through a SELECT FOR UPDATE. Also, disable auto-commit mode.
    ============================================
    We also found a java sample code about how to handle Lob objects at this URL:
    http://www.oracle.com/technology/sample_code/tech/java/sqlj_jdbc/files/advanced/LOBSample/LOBSample.java.html
    In our java2 application, we access Clob objects in a quite different
    manner: we use normal setString() and getString() methods, as described into paragraph "Shortcuts For Inserting and Retrieving CLOB Data"
    (document b10979.pdf, page 244).
    Using those methods, we never lock the table row by a SELECT FOR UPDATE statement (as described into the note above). We use simply SELECT, UPDATE and INSERT prepared statement.
    In this way we can insert both clob objects and normal timestamp, number and other types with a single insert statement. Idem for update.
    To recap, our question is:
    Is it mandatory to create a SELECT FOR UPDATE statement when updating clob data? What may be the consequences if we don't use it? It is also correct to insert with a single sql statement both clob and not clob data using the setString() method for the clob types? And more than one lob column in the same record?
    bye,
    luca acri.

    And columns of type FLOAT. These also have, for some unknown reason a metadata type of OTHER, and a type string of 'FLOAT'. Yet PreparedStatement.setNull(x, Types.OTHER) doesn't work and setNull(x, Types.DECIMAL) does.

  • Only 274 mails are coming when using pop3 with java mail

    Only 274 mails are coming from GMAIL when using pop3 with java mail. but there are more than 3000 mails.
    I'm not getting the reason, code is given below:
    public static void main(String[] args) {
            // SUBSTITUTE YOUR ISP's POP3 SERVER HERE!!!
    //        String host = "pop.bizmail.yahoo.com";
    //        final String user = "[email protected]";
    //        final String password = "xxx";
            String host = "pop.gmail.com";
            final String user = "gauravjlj";
            final String password = "xxx";
            String subjectSubstringToSearch = "Test E-Mail through Java";
            try {
                 Properties prop = new Properties();
                prop.setProperty("mail.pop3.socketFactory.class",
                                            "javax.net.ssl.SSLSocketFactory");
                prop.setProperty("mail.pop3.socketFactory.fallback", "false");
                prop.setProperty("mail.pop3.port", "995");
                prop.setProperty("mail.pop3.socketFactory.port", "995");
                prop.put("mail.pop3.host", host);
                prop.put("mail.store.protocol", "pop3");
                Session session = Session.getDefaultInstance(prop);
                Store store = session.getStore();
                System.out.println("your ID is : "+ user);
                System.out.println("Connecting...");
                store.connect(host, user, password);
                System.out.println("Connected...");
                // Get "INBOX"
                Folder fldr = store.getFolder("INBOX");
                fldr.open(Folder.READ_ONLY);
                int count = fldr.getMessageCount();
                System.out.println(count  + " total messages");
                // Message numebers start at 1
                for(int i = 1; i <= count; i++) {
                                            // Get  a message by its sequence number
                    Message m = fldr.getMessage(i);
                    // Get some headers
                    Date date = m.getSentDate();
                    Address [] from = m.getFrom();
                    String subj = m.getSubject();
                    String mimeType = m.getContentType();
                    System.out.println(date + "\t" + from[0] + "\t" +
                                        subj + "\t" + mimeType);
                // Search for e-mails by some subject substring
                String pattern = subjectSubstringToSearch;
                SubjectTerm st = new SubjectTerm(pattern);
                // Get some message references
                Message [] found = fldr.search(st);
                System.out.println(found.length +
                                    " messages matched Subject pattern \"" +
                                    pattern + "\"");
                for (int i = 0; i < found.length; i++) {
                    Message m = found;
    // Get some headers
    Date date = m.getSentDate();
    Address [] from = m.getFrom();
    String subj = m.getSubject();
    String mimeType = m.getContentType();
    System.out.println(date + "\t" + from[0] + "\t" +
    subj + "\t" + mimeType);
    Object o = m.getContent();
    if (o instanceof String) {
    System.out.println("**This is a String Message**");
    System.out.println((String)o);
    else if (o instanceof Multipart) {
    System.out.print("**This is a Multipart Message. ");
    Multipart mp = (Multipart)o;
    int count3 = mp.getCount();
    System.out.println("It has " + count3 +
    " BodyParts in it**");
    for (int j = 0; j < count3; j++) {
    // Part are numbered starting at 0
    BodyPart b = mp.getBodyPart(j);
    String mimeType2 = b.getContentType();
    System.out.println( "BodyPart " + (j + 1) +
    " is of MimeType " + mimeType);
    Object o2 = b.getContent();
    if (o2 instanceof String) {
    System.out.println("**This is a String BodyPart**");
    System.out.println((String)o2);
    else if (o2 instanceof Multipart) {
    System.out.print(
    "**This BodyPart is a nested Multipart. ");
    Multipart mp2 = (Multipart)o2;
    int count2 = mp2.getCount();
    System.out.println("It has " + count2 +
    "further BodyParts in it**");
    else if (o2 instanceof InputStream) {
    System.out.println(
    "**This is an InputStream BodyPart**");
    } //End of for
    else if (o instanceof InputStream) {
    System.out.println("**This is an InputStream message**");
    InputStream is = (InputStream)o;
    // Assumes character content (not binary images)
    int c;
    while ((c = is.read()) != -1) {
    System.out.write(c);
    // Uncomment to set "delete" flag on the message
    //m.setFlag(Flags.Flag.DELETED,true);
    } //End of for
    // "true" actually deletes flagged messages from folder
    fldr.close(true);
    store.close();
    catch (MessagingException mex) {
    // Prints all nested (chained) exceptions as well
    mex.printStackTrace();
    catch (IOException ioex) {
    ioex.printStackTrace();
    Please tell me.
    Thanks                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

    Is it possible that GMail only allows access to untagged emails via POP3? Or only to emails from the last x days?
    POP3 is the older email retrieval protocol (IMAP4 is the more current one) and only has very limited support for folders (or anything but a single inbox, really). It's quite common that POP3 only allows access to a subset of all emails stored by a provider.

  • Java web start security dialog with Java 7 update 51

    I build a Java Web Start application signed with a valid certificate.
    When I star the application the security dialog appear correctly as show in this figure
    http://www.java.com/en/img/download/trusted_signed.jpg
    My issue is about the "do not show again" checkbox.
    If the attributes href are present in the jnlp tag of the jnlp file the checkbox appear.
    If the attribute are not present, the checkbox doesn't appear and the run needs to be confirmed every time.
    (Example:
    <jnlp spec="1.0+" codebase=
    "http://docs.oracle.com/javase/tutorialJWS/samples/deployment/webstart_ComponentArch_DynamicTreeDemo"
    href="dynamictree_webstart.jnlp">
    This is a problem because my jnlp file is under a password protected directory and if href is specifed, the Java Web Start application try to retrieve it as the other resources. ( result in access denied because only the browser session is authenticated and the run fails)
    The documentation at Deploying a Java Web Start Application said:
    The codebase and href attributes are optional when deploying Java Web Start applications that will run on at least the Java SE 6 update 18 release or later. You must specify the codebase and href attributes when deploying Java Web Start applications that will run with previous releases of the Java Runtime Environment software.
    What is the right code? With href or without?
    Is this a BUG or a feature?
    How can I show the "don't show again" checkbox without having to specify the href attribute?

    From the documentation at JAR File Manifest Attributes for Security
    If the Application-Library-Allowable-Codebase attribute is present and matches the location from which the RIA is started, then a single host is listed in the Location field for the prompt and the option to hide future prompts is provided.
    This issue is also discussed here: Java Web Start security dialogs with Java 7 update 51 - Stack Overflow

  • Read GUID with java

    Hi to all, I need some help with java to retrieve the eDirectory GUID. I
    know it's a binary data field and I need to decode it to read the value,
    but I'm not able to retrieve anything, even if I name the attribute
    because it is operational.
    This is my code. What am I doing wrong?
    import com.novell.ldap.*;
    import java.io.UnsupportedEncodingException;
    public class GuidReader {
    public static void main( String[] args ) {
    String loginDN = "cn=admin,o=system";
    String password = "MYPASSWORD";
    String searchBase = "MYCONTEXT";
    String searchFilter = "(cn=MYUSERNAME)";
    int searchScope = LDAPConnection.SCOPE_SUB;
    LDAPConnection lc = new LDAPConnection();
    try {
    lc.connect( "MYIPADDRESS", 389 );
    try {
    lc.bind( LDAPConnection.LDAP_V3, loginDN,
    password.getBytes("UTF8"));
    } catch (UnsupportedEncodingException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    LDAPSearchResults searchResults = lc.search(
    searchBase,
    searchScope,
    searchFilter,
    null,
    false );
    while ( searchResults.hasMore() ) {
    LDAPEntry nextEntry = null;
    try {
    nextEntry = searchResults.next();
    } catch(LDAPException e ) {
    System.out.println("Error: " + e.toString());
    continue;
    LDAPAttribute attribute =
    nextEntry.getAttribute("objectGuid");
    if (attribute == null) System.out.println("not
    returned");
    attribute = nextEntry.getAttribute("GUID");
    if (attribute == null) System.out.println("not
    returned");
    attribute = nextEntry.getAttribute("cn");
    if (attribute == null) System.out.println("not
    returned");
    else System.out.println("returned");
    } catch( LDAPException e ) {
    System.out.println("Error " + e.toString() );
    If I run it, i get this result:
    not returned
    not returned
    returned
    Thank you,
    Natan Sanson
    nsanson
    nsanson's Profile: http://forums.novell.com/member.php?userid=1637
    View this thread: http://forums.novell.com/showthread.php?t=410589

    So I did it this way:
    LDAPAttribute attr = nextEntry.getAttribute( "GUID" );
    Enumeration allValues = attr.getByteValues();
    if ( allValues != null )
    System.out.println( getGUID( allValues ) );
    public static String getGUID( Enumeration values )
    String returnThis = "";
    while ( values.hasMoreElements() )
    int offset = 0;
    byte Value[] = ( byte[] ) values.nextElement();
    while ( offset < Value.length )
    int val = Value[offset++] & 0xff;
    String s = Integer.toHexString( val );
    if ( s.length() == 1 )
    s = "0" + s;
    returnThis = returnThis + s + " ";
    return returnThis;
    -jim
    On 5/14/2010 11:56 AM, nsanson wrote:
    >
    > Hi to all, I need some help with java to retrieve the eDirectory GUID. I
    > know it's a binary data field and I need to decode it to read the value,
    > but I'm not able to retrieve anything, even if I name the attribute
    > because it is operational.
    >
    > This is my code. What am I doing wrong?
    >
    > import com.novell.ldap.*;
    >
    > import java.io.UnsupportedEncodingException;
    >
    >
    > public class GuidReader {
    > public static void main( String[] args ) {
    > String loginDN = "cn=admin,o=system";
    > String password = "MYPASSWORD";
    > String searchBase = "MYCONTEXT";
    > String searchFilter = "(cn=MYUSERNAME)";
    > int searchScope = LDAPConnection.SCOPE_SUB;
    >
    > LDAPConnection lc = new LDAPConnection();
    > try {
    > lc.connect( "MYIPADDRESS", 389 );
    > try {
    > lc.bind( LDAPConnection.LDAP_V3, loginDN,
    > password.getBytes("UTF8"));
    > } catch (UnsupportedEncodingException e1) {
    > // TODO Auto-generated catch block
    > e1.printStackTrace();
    > }
    > LDAPSearchResults searchResults = lc.search(
    > searchBase,
    > searchScope,
    > searchFilter,
    > null,
    > false );
    > while ( searchResults.hasMore() ) {
    > LDAPEntry nextEntry = null;
    > try {
    > nextEntry = searchResults.next();
    > } catch(LDAPException e ) {
    > System.out.println("Error: " + e.toString());
    > continue;
    > }
    > LDAPAttribute attribute =
    > nextEntry.getAttribute("objectGuid");
    > if (attribute == null) System.out.println("not
    > returned");
    > attribute = nextEntry.getAttribute("GUID");
    > if (attribute == null) System.out.println("not
    > returned");
    > attribute = nextEntry.getAttribute("cn");
    > if (attribute == null) System.out.println("not
    > returned");
    > else System.out.println("returned");
    >
    >
    > } catch( LDAPException e ) {
    > System.out.println("Error " + e.toString() );
    > }
    > }
    >
    > }
    >
    >
    > If I run it, i get this result:
    >
    > not returned
    > not returned
    > returned
    >
    > Thank you,
    >
    > Natan Sanson
    >
    >

  • Crawling the Web with Java

    Hi everyone.
    I've been trying to learn how to make a web crawler in java following this detailed albeit old tutorial: http://www.devarticles.com/c/a/Java/Crawling-the-Web-with-Java/
    The SearchCrawler class they feature can be found in two parts:
    First part: http://www.devarticles.com/c/a/Java/Crawling-the-Web-with-Java/3/
    Second part: http://www.devarticles.com/c/a/Java/Crawling-the-Web-with-Java/4/
    I don't want to copy and paste the code because it is really long and an eyesore if viewing here.
    I get a lot of errors when compiling of which I do not understand. The majority of the errors (62 of them to be precise) are "class, interface or enum expected" errors, with the remaining few being "illegal start of type" and "<identifier> expected" errors.
    Can someone here perhaps take a look at it and compile it and see if they also get the same errors? I realise it is an old tutorial but there are hardly any detailed resources I can find for java web crawlers.
    Thanks.

    Odd I can't seem to log into my account. Never mind.
    I have used java before, the problem here I suppose is I'm not good enough to spot what's the problem. The code seems fine bracket wise and it has really left me stumped.
    If someone code put it in their editor and attempt to compile and see if I'm not the only one that's having a problem.. that would be much appreciated.
    For your convenience... the code from the example I linked:
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import java.util.regex.*;
    import javax.swing.*;
    import javax.swing.table.*;
    // The Search Web Crawler
    public class SearchCrawler extends JFrame
      // Max URLs drop-down values.
      private static final String[] MAX_URLS =
        {"50", "100", "500", "1000"};
      // Cache of robot disallow lists.
      private HashMap disallowListCache = new HashMap();
      // Search GUI controls.
      private JTextField startTextField;
      private JComboBox maxComboBox;
      private JCheckBox limitCheckBox;
      private JTextField logTextField;
      private JTextField searchTextField;
      private JCheckBox caseCheckBox;
      private JButton searchButton;
      // Search stats GUI controls.
      private JLabel crawlingLabel2;
      private JLabel crawledLabel2;
      private JLabel toCrawlLabel2;
      private JProgressBar progressBar;
      private JLabel matchesLabel2;
      // Table listing search matches.
      private JTable table;
      // Flag for whether or not crawling is underway.
      private boolean crawling;
      // Matches log file print writer.
      private PrintWriter logFileWriter;
      // Constructor for Search Web Crawler.
      public SearchCrawler()
        // Set application title.
        setTitle("Search Crawler");
        // Set window size.
        setSize(600, 600);
         // Handle window closing events.
        addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
           actionExit();
        // Set up File menu.
        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File"); 
        fileMenu.setMnemonic(KeyEvent.VK_F);
        JMenuItem fileExitMenuItem = new JMenuItem("Exit",
          KeyEvent.VK_X);
        fileExitMenuItem.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) { 
            actionExit();
        fileMenu.add(fileExitMenuItem);
        menuBar.add(fileMenu);
        setJMenuBar(menuBar);
        // Set up search panel.
        JPanel searchPanel = new JPanel();
        GridBagConstraints constraints;
        GridBagLayout layout = new GridBagLayout();
        searchPanel.setLayout(layout);
        JLabel startLabel = new JLabel("Start URL:");
        constraints = new GridBagConstraints();
        constraints.anchor = GridBagConstraints.EAST; 
        constraints.insets = new Insets(5, 5, 0, 0);
        layout.setConstraints(startLabel, constraints);
        searchPanel.add(startLabel);
        startTextField = new JTextField();
        constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        constraints.insets = new Insets(5, 5, 0, 5);
        layout.setConstraints(startTextField, constraints);
        searchPanel.add(startTextField);
        JLabel maxLabel = new JLabel("Max URLs to Crawl:");
        constraints = new GridBagConstraints();
        constraints.anchor = GridBagConstraints.EAST;
        constraints.insets = new Insets(5, 5, 0, 0);
        layout.setConstraints(maxLabel, constraints);
        searchPanel.add(maxLabel);
        maxComboBox = new JComboBox(MAX_URLS);
        maxComboBox.setEditable(true);
        constraints = new GridBagConstraints();
        constraints.insets = new Insets(5, 5, 0, 0);
        layout.setConstraints(maxComboBox, constraints);
        searchPanel.add(maxComboBox);
        limitCheckBox =
          new JCheckBox("Limit crawling to Start URL site");
        constraints = new GridBagConstraints();
        constraints.anchor = GridBagConstraints.WEST;
        constraints.insets = new Insets(0, 10, 0, 0);
        layout.setConstraints(limitCheckBox, constraints);
        searchPanel.add(limitCheckBox);
        JLabel blankLabel = new JLabel();
        constraints = new GridBagConstraints();
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        layout.setConstraints(blankLabel, constraints);
        searchPanel.add(blankLabel);
        JLabel logLabel = new JLabel("Matches Log File:");
        constraints = new GridBagConstraints();
        constraints.anchor = GridBagConstraints.EAST;
        constraints.insets = new Insets(5, 5, 0, 0);
        layout.setConstraints(logLabel, constraints);
        searchPanel.add(logLabel);
        String file =
          System.getProperty("user.dir") +
          System.getProperty("file.separator") +
          "crawler.log";
        logTextField = new JTextField(file);
        constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        constraints.insets = new Insets(5, 5, 0, 5);
        layout.setConstraints(logTextField, constraints);
        searchPanel.add(logTextField);
        JLabel searchLabel = new JLabel("Search String:");
        constraints = new GridBagConstraints();
        constraints.anchor = GridBagConstraints.EAST; 
        constraints.insets = new Insets(5, 5, 0, 0);
        layout.setConstraints(searchLabel, constraints);
        searchPanel.add(searchLabel);
        searchTextField = new JTextField();
        constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.insets = new Insets(5, 5, 0, 0);
        constraints.gridwidth= 2;
        constraints.weightx = 1.0d;
        layout.setConstraints(searchTextField, constraints);
        searchPanel.add(searchTextField);
        caseCheckBox = new JCheckBox("Case Sensitive");
        constraints = new GridBagConstraints();
        constraints.insets = new Insets(5, 5, 0, 5);
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        layout.setConstraints(caseCheckBox, constraints);
        searchPanel.add(caseCheckBox);
        searchButton = new JButton("Search");
        searchButton.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            actionSearch();
        constraints = new GridBagConstraints();
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        constraints.insets = new Insets(5, 5, 5, 5);
        layout.setConstraints(searchButton, constraints);
        searchPanel.add(searchButton);
        JSeparator separator = new JSeparator();
        constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        constraints.insets = new Insets(5, 5, 5, 5);
        layout.setConstraints(separator, constraints);
        searchPanel.add(separator);
        JLabel crawlingLabel1 = new JLabel("Crawling:");
        constraints = new GridBagConstraints();
        constraints.anchor = GridBagConstraints.EAST;
        constraints.insets = new Insets(5, 5, 0, 0);
        layout.setConstraints(crawlingLabel1, constraints);
        searchPanel.add(crawlingLabel1);
        crawlingLabel2 = new JLabel();
        crawlingLabel2.setFont(
          crawlingLabel2.getFont().deriveFont(Font.PLAIN));
        constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        constraints.insets = new Insets(5, 5, 0, 5);
        layout.setConstraints(crawlingLabel2, constraints);
        searchPanel.add(crawlingLabel2);
        JLabel crawledLabel1 = new JLabel("Crawled URLs:");
        constraints = new GridBagConstraints();
        constraints.anchor = GridBagConstraints.EAST;
        constraints.insets = new Insets(5, 5, 0, 0);
        layout.setConstraints(crawledLabel1, constraints);
        searchPanel.add(crawledLabel1);
        crawledLabel2 = new JLabel();
        crawledLabel2.setFont(
          crawledLabel2.getFont().deriveFont(Font.PLAIN));
        constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        constraints.insets = new Insets(5, 5, 0, 5);
        layout.setConstraints(crawledLabel2, constraints);
        searchPanel.add(crawledLabel2);
        JLabel toCrawlLabel1 = new JLabel("URLs to Crawl:");
        constraints = new GridBagConstraints();
        constraints.anchor = GridBagConstraints.EAST;
        constraints.insets = new Insets(5, 5, 0, 0);
        layout.setConstraints(toCrawlLabel1, constraints);
        searchPanel.add(toCrawlLabel1);
        toCrawlLabel2 = new JLabel();
        toCrawlLabel2.setFont(
          toCrawlLabel2.getFont().deriveFont(Font.PLAIN));
        constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        constraints.insets = new Insets(5, 5, 0, 5);
        layout.setConstraints(toCrawlLabel2, constraints);
        searchPanel.add(toCrawlLabel2);
        JLabel progressLabel = new JLabel("Crawling Progress:");
        constraints = new GridBagConstraints();
        constraints.anchor = GridBagConstraints.EAST;
        constraints.insets = new Insets(5, 5, 0, 0);
        layout.setConstraints(progressLabel, constraints);
        searchPanel.add(progressLabel);
        progressBar = new JProgressBar();
        progressBar.setMinimum(0);
        progressBar.setStringPainted(true);
        constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        constraints.insets = new Insets(5, 5, 0, 5);
        layout.setConstraints(progressBar, constraints);
        searchPanel.add(progressBar);
        JLabel matchesLabel1 = new JLabel("Search Matches:");
        constraints = new GridBagConstraints();
        constraints.anchor = GridBagConstraints.EAST;
        constraints.insets = new Insets(5, 5, 10, 0);
        layout.setConstraints(matchesLabel1, constraints);
        searchPanel.add(matchesLabel1);
        matchesLabel2 = new JLabel();
        matchesLabel2.setFont(
          matchesLabel2.getFont().deriveFont(Font.PLAIN));
        constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.HORIZONTAL;
        constraints.gridwidth = GridBagConstraints.REMAINDER;
        constraints.insets = new Insets(5, 5, 10, 5);
        layout.setConstraints(matchesLabel2, constraints);
        searchPanel.add(matchesLabel2);
        // Set up matches table.
        table =
          new JTable(new DefaultTableModel(new Object[][]{},
            new String[]{"URL"}) {
          public boolean isCellEditable(int row, int column)
            return false;
        // Set up Matches panel.
        JPanel matchesPanel = new JPanel();
        matchesPanel.setBorder(
          BorderFactory.createTitledBorder("Matches"));
        matchesPanel.setLayout(new BorderLayout());
        matchesPanel.add(new JScrollPane(table),
          BorderLayout.CENTER);
        // Add panels to display.
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(searchPanel, BorderLayout.NORTH);
        getContentPane().add(matchesPanel,BorderLayout.CENTER);
      // Exit this program.
      private void actionExit() {
        System.exit(0);
      // Handle Search/Stop button being clicked.
      private void actionSearch() {
        // If stop button clicked, turn crawling flag off.
        if (crawling) {
          crawling = false;
          return;
      ArrayList errorList = new ArrayList();
      // Validate that start URL has been entered.
      String startUrl = startTextField.getText().trim();
      if (startUrl.length() < 1) {
        errorList.add("Missing Start URL.");
      // Verify start URL.
      else if (verifyUrl(startUrl) == null) {
        errorList.add("Invalid Start URL.");
      // Validate that Max URLs is either empty or is a number.
      int maxUrls = 0;
      String max = ((String) maxComboBox.getSelectedItem()).trim();
      if (max.length() > 0) {
        try {
          maxUrls = Integer.parseInt(max);
        } catch (NumberFormatException e) {
        if (maxUrls < 1) {
          errorList.add("Invalid Max URLs value.");
      // Validate that matches log file has been entered.
      String logFile = logTextField.getText().trim();
      if (logFile.length() < 1) {
        errorList.add("Missing Matches Log File.");
      // Validate that search string has been entered.
      String searchString = searchTextField.getText().trim();
      if (searchString.length() < 1) {
        errorList.add("Missing Search String.");
      // Show errors, if any, and return.
      if (errorList.size() > 0) {
        StringBuffer message = new StringBuffer();
        // Concatenate errors into single message.
        for (int i = 0; i < errorList.size(); i++) {
          message.append(errorList.get(i));
          if (i + 1 < errorList.size()) {
            message.append("\n");
        showError(message.toString());
        return;
      // Remove "www" from start URL if present.
      startUrl = removeWwwFromUrl(startUrl);
      // Start the Search Crawler.
      search(logFile, startUrl, maxUrls, searchString);
    private void search(final String logFile, final String startUrl,
      final int maxUrls, final String searchString)
      // Start the search in a new thread.
      Thread thread = new Thread(new Runnable() {
        public void run() {
          // Show hour glass cursor while crawling is under way.
          setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
          // Disable search controls.
          startTextField.setEnabled(false);
          maxComboBox.setEnabled(false);
          limitCheckBox.setEnabled(false);
          logTextField.setEnabled(false);
          searchTextField.setEnabled(false);
          caseCheckBox.setEnabled(false);
          // Switch Search button to "Stop."
          searchButton.setText("Stop");
          // Reset stats.
          table.setModel(new DefaultTableModel(new Object[][]{},
            new String[]{"URL"}) {
            public boolean isCellEditable(int row, int column)
              return false;
           updateStats(startUrl, 0, 0, maxUrls);
          // Open matches log file.
          try {
            logFileWriter = new PrintWriter(new FileWriter(logFile));
          } catch (Exception e) {
            showError("Unable to open matches log file.");
            return;
          // Turn crawling flag on.
          crawling = true;
          // Perform the actual crawling.
          crawl(startUrl, maxUrls, limitCheckBox.isSelected(),
            searchString, caseCheckBox.isSelected());
          // Turn crawling flag off.
          crawling = false;
          // Close matches log file.
          try {
            logFileWriter.close();
          } catch (Exception e) {
            showError("Unable to close matches log file.");
          // Mark search as done.
          crawlingLabel2.setText("Done");
          // Enable search controls.
          startTextField.setEnabled(true);
          maxComboBox.setEnabled(true);
          limitCheckBox.setEnabled(true);
          logTextField.setEnabled(true);
          searchTextField.setEnabled(true);
          caseCheckBox.setEnabled(true);
          // Switch search button back to "Search."
          searchButton.setText("Search");
          // Return to default cursor.
          setCursor(Cursor.getDefaultCursor());
          // Show message if search string not found.
          if (table.getRowCount() == 0) {
            JOptionPane.showMessageDialog(SearchCrawler.this,
              "Your Search String was not found. Please try another.",
              "Search String Not Found",
              JOptionPane.WARNING_MESSAGE);
      thread.start();
    // Show dialog box with error message.
    private void showError(String message) {
      JOptionPane.showMessageDialog(this, message, "Error",
        JOptionPane.ERROR_MESSAGE);
    // Update crawling stats.
    private void updateStats(
      String crawling, int crawled, int toCrawl, int maxUrls)
      crawlingLabel2.setText(crawling);
      crawledLabel2.setText("" + crawled);
      toCrawlLabel2.setText("" + toCrawl);
      // Update progress bar.
      if (maxUrls == -1) {
        progressBar.setMaximum(crawled + toCrawl);
      } else {
        progressBar.setMaximum(maxUrls);
      progressBar.setValue(crawled);
      matchesLabel2.setText("" + table.getRowCount());
    // Add match to matches table and log file.
    private void addMatch(String url) {
      // Add URL to matches table.
      DefaultTableModel model =
        (DefaultTableModel) table.getModel();
      model.addRow(new Object[]{url});
      // Add URL to matches log file.
      try {
        logFileWriter.println(url);
      } catch (Exception e) {
        showError("Unable to log match.");
    // Verify URL format.
    private URL verifyUrl(String url) {
      // Only allow HTTP URLs.
      if (!url.toLowerCase().startsWith("http://"))
        return null;
      // Verify format of URL.
      URL verifiedUrl = null;
      try {
        verifiedUrl = new URL(url);
      } catch (Exception e) {
        return null;
      return verifiedUrl;
    // Check if robot is allowed to access the given URL. private boolean isRobotAllowed(URL urlToCheck) {
      String host = urlToCheck.getHost().toLowerCase();
      // Retrieve host's disallow list from cache.
      ArrayList disallowList =
        (ArrayList) disallowListCache.get(host);
      // If list is not in the cache, download and cache it.
      if (disallowList == null) {
        disallowList = new ArrayList();
        try {
          URL robotsFileUrl =
            new URL("http://" + host + "/robots.txt");
          // Open connection to robot file URL for reading.
          BufferedReader reader =
            new BufferedReader(new InputStreamReader(
              robotsFileUrl.openStream()));
          // Read robot file, creating list of disallowed paths.
          String line;
          while ((line = reader.readLine()) != null) {
            if (line.indexOf("Disallow:") == 0) {
              String disallowPath =
                line.substring("Disallow:".length());
              // Check disallow path for comments and remove if present.
              int commentIndex = disallowPath.indexOf("#");
              if (commentIndex != -1) {
                disallowPath =
                  disallowPath.substring(0, commentIndex);
              // Remove leading or trailing spaces from disallow path.
              disallowPath = disallowPath.trim();
              // Add disallow path to list.
              disallowList.add(disallowPath);
          // Add new disallow list to cache.
          disallowListCache.put(host, disallowList);
        catch (Exception e) {
          /* Assume robot is allowed since an exception
             is thrown if the robot file doesn't exist. */
          return true;
      /* Loop through disallow list to see if
         crawling is allowed for the given URL. */
      String file = urlToCheck.getFile();
      for (int i = 0; i < disallowList.size(); i++) {
        String disallow = (String) disallowList.get(i);
        if (file.startsWith(disallow)) {
          return false;
      return true;
    // Download page at given URL.
    private String downloadPage(URL pageUrl) {
      try {
        // Open connection to URL for reading.
        BufferedReader reader =
          new BufferedReader(new InputStreamReader(
            pageUrl.openStream()));
        // Read page into buffer.
        String line;
        StringBuffer pageBuffer = new StringBuffer();
        while ((line = reader.readLine()) != null) {
          pageBuffer.append(line);
        return pageBuffer.toString();
      } catch (Exception e) {
      return null;
    // Remove leading "www" from a URL's host if present.
    private String removeWwwFromUrl(String url) {
      int index = url.indexOf("://www.");
      if (index != -1) {
        return url.substring(0, index + 3) +
          url.substring(index + 7);
      return (url);
    // Parse through page contents and retrieve links.
    private ArrayList retrieveLinks(
      URL pageUrl, String pageContents, HashSet crawledList,
      boolean limitHost)
      // Compile link matching pattern.
      Pattern p =
        Pattern.compile("<a\\s+href\\s*=\\s*\"?(.*?)[\"|>]",
          Pattern.CASE_INSENSITIVE);
      Matcher m = p.matcher(pageContents);
      // Create list of link matches.
      ArrayList linkList = new ArrayList();
      while (m.find()) {
        String link = m.group(1).trim();
        // Skip empty links.
        if (link.length() < 1) {
          continue;
        // Skip links that are just page anchors.
        if (link.charAt(0) == '#') {
          continue;
        // Skip mailto links.
        if (link.indexOf("mailto:") != -1) {
          continue;
        // Skip JavaScript links.
        if (link.toLowerCase().indexOf("javascript") != -1) {
          continue;
        // Prefix absolute and relative URLs if necessary.
        if (link.indexOf("://") == -1) {
          // Handle absolute URLs.
          if (link.charAt(0) == '/') {
            link = "http://" + pageUrl.getHost() + link;
          // Handle relative URLs.
          } else {
            String file = pageUrl.getFile();
            if (file.indexOf('/') == -1) {
              link = "http://" + pageUrl.getHost() + "/" + link;
            } else {
              String path =
                file.substring(0, file.lastIndexOf('/') + 1);
              link = "http://" + pageUrl.getHost() + path + link;
        // Remove anchors from link.
        int index = link.indexOf('#');
        if (index != -1) {
          link = link.substring(0, index);
        // Remove leading "www" from URL's host if present.
        link = removeWwwFromUrl(link);
        // Verify link and skip if invalid.
        URL verifiedLink = verifyUrl(link);
        if (verifiedLink == null) {
          continue;
        /* If specified, limit links to those
          having the same host as the start URL. */
        if (limitHost &&
            !pageUrl.getHost().toLowerCase().equals(
              verifiedLink.getHost().toLowerCase())) 
          continue;
        // Skip link if it has already been crawled.
        if (crawledList.contains(link)) {
          continue;
        // Add link to list.
        linkList.add(link);
      return (linkList);
    /* Determine whether or not search string is
       matched in the given page contents. */
    private boolean searchStringMatches(
      String pageContents, String searchString,
      boolean caseSensitive)
      String searchContents = pageContents;
      /* If case-sensitive search, lowercase
         page contents for comparison. */
      if (!caseSensitive) {
        searchContents = pageContents.toLowerCase();
      // Split search string into individual terms.
      Pattern p = Pattern.compile("[\\s]+");
      String[] terms = p.split(searchString);
      // Check to see if each term matches.
      for (int i = 0; i < terms.length; i++) {
        if (caseSensitive) {
          if (searchContents.indexOf(terms) == -1) {
    return false;
    } else {
    if (searchContents.indexOf(terms[i].toLowerCase()) == -1) {
    return false;
    return true;
    // Perform the actual crawling, searching for the search string.
    public void crawl(
    String startUrl, int maxUrls, boolean limitHost,
    String searchString, boolean caseSensitive)
    // Set up crawl lists.
    HashSet crawledList = new HashSet();
    LinkedHashSet toCrawlList = new LinkedHashSet();
    // Add start URL to the to crawl list.
    toCrawlList.add(startUrl);
    /* Perform actual crawling by looping
    through the To Crawl list. */
    while (crawling && toCrawlList.size() > 0)
    /* Check to see if the max URL count has
    been reached, if it was specified.*/
    if (maxUrls != -1) {
    if (crawledList.size() == maxUrls) {
    break;
    // Get URL at bottom of the list.
    String url = (String) toCrawlList.iterator().next();
    // Remove URL from the To Crawl list.
    toCrawlList.remove(url);
    // Convert string url to URL object.
    URL verifiedUrl = verifyUrl(url);
    // Skip URL if robots are not allowed to access it.
    if (!isRobotAllowed(verifiedUrl)) {
    continue;
    // Update crawling stats.
    updateStats(url, crawledList.size(), toCrawlList.size(),
    maxUrls);
    // Add page to the crawled list.
    crawledList.add(url);
    // Download the page at the given URL.
    String pageContents = downloadPage(verifiedUrl);
    /* If the page was downloaded successfully, retrieve all its
    links and then see if it contains the search string. */
    if (pageContents != null && pageContents.length() > 0)
    // Retrieve list of valid links from page.
    ArrayList links =
    retrieveLinks(verifiedUrl, pageContents, crawledList,
    limitHost);
    // Add links to the To Crawl list.
    toCrawlList.addAll(links);
    /* Check if search string is present in
    page, and if so, record a match. */
    if (searchStringMatches(pageContents, searchString,
    caseSensitive))
    addMatch(url);
    // Update crawling stats.
    updateStats(url, crawledList.size(), toCrawlList.size(),
    maxUrls);
    // Run the Search Crawler.
    public static void main(String[] args) {
    SearchCrawler crawler = new SearchCrawler();
    crawler.show();
    }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • [End of TNS data channel] with Java SDO API (JDBC thin 9.0.1.2.1)

    Hello folks,
    Environment:
    Win2K, 1.2GHz Intel, 500MB RAM, Oracle 9i, Oracle JDBC Thin (9.0.1.2.1), JDK1.3
    Our data in the DB is 2-D. It consists of SDO LineString geometries. We use SRID = 8307.
    I run into this problem with Java SDO API. I got this exception: "Io exception: End of TNS data channel"
    when I try to execute query that uses the SDO_RELATE function:
    SELECT e.shape
    FROM edge e
    WHERE SDO_RELATE(e.shape,
    mdsys.sdo_geometry( 2003, 8307, NULL,
    mdsys.sdo_elem_info_array(1,1003,1),
    mdsys.sdo_ordinate_array(-125.8,49.9,-125.6,49.9,-125.6,50.0,-125.8,50.0,-125.8,49.9) ),
    'mask=ANYINTERACT querytype=WINDOW') = 'TRUE'
    If I use SDO_FILTER instead of SDO_RELATE it works!
    Here is how I execute the query in Java:
    public int executeSpatialQuery(OracleConnection conn, String spatialQuery) throws Exception
    int numberOfGeometries = 0;
    conn.setDefaultRowPrefetch(1000);
    Statement ps = conn.createStatement();
    ResultSet rs = ps.executeQuery(spatialQuery);
    while (rs.next()) {
    numberOfGeometries++;
    rs.close();
    ps.close();
    return numberOfGeometries;
    Note: I was playing with the "conn.setDefaultRowPrefetch(n)" method hoping that there might be something to do with that but with no success.
    Any help will be much appreciated. Thank you.
    GKK

    Hello folks,
    Here is what I've done:
    1. Created a "mini" Realtional model (modelB) which mimics exactly our existing "big" Realtional model (modelA). The tables, sequences, indices, etc. in modelB have been created in exactly the same fashion we'd created the corresponding entities in modelA. The only difference is that I preceeded the entities in our test modelB with "TEST_".
    2. Populated the modelB with 1298 Lakes (3993 edges in total) in exatly the same fashion we use to populate our modelA - using a Data Loader based on Java SDO API.
    3. Indexed the test modelB in exactly the same fashion as modelA.
    4. Ran the query:
    SELECT e.shape FROM test_edge e WHERE SDO_RELATE(e.shape,
    mdsys.sdo_geometry(
    2003,
    8307,
    NULL,
    mdsys.sdo_elem_info_array(1,1003,1),
    mdsys.sdo_ordinate_array(
    -123.80833332065798,48.58352678668598,
    -123.80833332065798,48.675352618459506,
    -123.65050767229724,48.675352618459506,
    -123.65050767229724,48.58352678668598,
    -123.80833332065798,48.58352678668598
    ), 'mask=ANYINTERACT querytype=WINDOW'
    ) = 'TRUE'
    in SQL*PLUS and it worked fine (retrieved a bunch of geometries)!
    Ran the same query in the Daniel Geringer's OraTest utility and it worked this time and returned:
    TIME : 1.222 seconds, TOTAL FETCH TIME 267 ROWS
    Ran the query with our JCS Query Plug-In and it worked fine!
    ANALYSIS
    ========
    ModelA
    ======
    - 59652 Lakes and 178764 edges
    - it's properly indexed
    - its SDO layers and geometries are valid
    - when we count the number of related SDO geometries for this query we get:
    SQL> SELECT count(e.shape) FROM edge e WHERE SDO_RELATE(e.shape,
    2 mdsys.sdo_geometry(
    3 2003,
    4 8307,
    5 NULL,
    6 mdsys.sdo_elem_info_array(1,1003,1),
    7 mdsys.sdo_ordinate_array(
    8 -123.80833332065798,48.58352678668598,
    9 -123.80833332065798,48.675352618459506,
    10 -123.65050767229724,48.675352618459506,
    11 -123.65050767229724,48.58352678668598,
    12 -123.80833332065798,48.58352678668598
    13 )
    14 ), 'mask=ANYINTERACT querytype=WINDOW'
    15 ) = 'TRUE';
    COUNT(E.SHAPE)
    267
    - when we run the following query via the Java SDO API:
    SELECT e.shape FROM edge e WHERE SDO_RELATE(e.shape,
    mdsys.sdo_geometry(
    2003,
    8307,
    NULL,
    mdsys.sdo_elem_info_array(1,1003,1),
    mdsys.sdo_ordinate_array(
    -123.80833332065798,48.58352678668598,
    -123.80833332065798,48.675352618459506,
    -123.65050767229724,48.675352618459506,
    -123.65050767229724,48.58352678668598,
    -123.80833332065798,48.58352678668598
    ), 'mask=ANYINTERACT querytype=WINDOW'
    ) = 'TRUE'
    it FAILS with: "TNS end of communaction channel"!
    ModelB
    ======
    - 1298 Lakes and 3993 edges
    - it's properly indexed
    - its SDO layers and geometries are valid
    - when we count the number of related SDO geometries for this query we get:
    SQL> SELECT count(e.shape) FROM test_edge e WHERE SDO_RELATE(e.shape,
    2 mdsys.sdo_geometry(
    3 2003,
    4 8307,
    5 NULL,
    6 mdsys.sdo_elem_info_array(1,1003,1),
    7 mdsys.sdo_ordinate_array(
    8 -123.80833332065798,48.58352678668598,
    9 -123.80833332065798,48.675352618459506,
    10 -123.65050767229724,48.675352618459506,
    11 -123.65050767229724,48.58352678668598,
    12 -123.80833332065798,48.58352678668598
    13 )
    14 ), 'mask=ANYINTERACT querytype=WINDOW'
    15 ) = 'TRUE';
    COUNT(E.SHAPE)
    267
    - when we run the following query via the Java SDO API:
    SELECT e.shape FROM test_edge e WHERE SDO_RELATE(e.shape,
    mdsys.sdo_geometry(
    2003,
    8307,
    NULL,
    mdsys.sdo_elem_info_array(1,1003,1),
    mdsys.sdo_ordinate_array(
    -123.80833332065798,48.58352678668598,
    -123.80833332065798,48.675352618459506,
    -123.65050767229724,48.675352618459506,
    -123.65050767229724,48.58352678668598,
    -123.80833332065798,48.58352678668598
    ), 'mask=ANYINTERACT querytype=WINDOW'
    ) = 'TRUE'
    it SUCCESSFULLY returns the related geometries!
    So, what can we make of all this? We know that there exists a model for which the SDO_RELATE works via the Java SDO API. This model is a subset (w.r.t. the data set) of our original model in which we detected the "TNS end of communication channel problem". The environment we used for these tests is exactly the same: JDBC Thin driver (version 9.0.1.0.0), Oracle9i Enterprise Edition (Release 9.0.1.2.1 - Production).
    One can think that the problem lies in the Oracle Object-Realational or Oracle Spatial but the fact that we can successfully execute the same SDO_RELATE queries in SQL*PLUS rejects this possibility. Perhaps it depends on the amount of data passed to the JDBC driver and the fashion in which it handles it! In our test above we had RELATED 267 geometries. We know that there exist SDO_RELATE queries that run successfully with modelA, but those are queries which ONLY retrieve an EMPTY set of RELATED geometries. In other words we don't get the "TNS end of communication channel" because NO data gets fetched from the server to the client! As soon as we find a SDO_RELATE query which retrieves (RELATES) at least 1 geometry that runs successfully in SQL*PLUS and run it via the Java SDO API - it FAILS! This means that no matter what volume of data is fetched from the server-JDBCThin-SDOAPI-client as long as there is ANY data, the query FAILS in modelA.
    Perhaps something internally in the Oracle 9i Server happens that prevent the data being fetch to the JDBCThin for that particular modelA. But what that might be?
    Very peculiar problem!
    Regards,
    Georgi

  • XSLT Mapping with Java class not working in Integration Repository

    Hi,
    I have an XSLT mapping program with Java enhancement and I was able to successfully tested it in Stylus Studio. However, when I imported the Java class and the xslt program in Enterprise Service Builder and tested it, my program does not compile.
    Here is the error message: "Transformer Configuration Exception occurred when loading XSLT mapping_temp.xsl; details: Could not compile stylesheet".
    My java program is in a zip file containing SOAPHeaderHandler.java and SOAPHeaderhandler.class. My Java has a package com.nga.xslt.
    Here is the declaration of my Java class in the XSLT: xmlns:javamap="java:com.nga.xslt.SOAPHeaderHandler"
    It seems that it could not read the java class. Can you please advice what is wrong?

    Hi ,
    select XMLTOOLKIT option in Operation mapping and execute it.
    I am not sure we can call java program in XSLT Program,but alternative is copy the code and use it in XSLT mapping it self,that means your XSLT program will become with JAVA extensions.
    then in Operation mapping level select SAPXMLTOOL kit option and execute it. i hope it will work. if it is not working then you have deploy some JAXP files on server,because the way execution of XSLT Mpaping program got changed,like when eve you executing XSLT with extnasions( if you are not using XMLTOOL kit option) then you have to use latest version of JAXP.JDK files.
    Regards,
    Raj

Maybe you are looking for