Hello Oleg,

1) I use the axis2c 1.0 libraries and sample as available at this
place<http://ws.apache.org/axis2/c/download.cgi>
.[1]

2) The sample I am trying out is the yahoo_client.c. The code is here [2]

3) I wrote the same in J. The code is here [3]

I have isolated the offending line in a call method. When I invoke this
method, J.exe crashes.  When debugged from VC, this leads to a function call
invocation that is prepared by the various libraries before the call is
made. So, an access is made into the J.exe process space that results in a
violation.

The way I went about the code is like follows:
a) Get the yahoo_client.c to work. (It cashes later on some free calls but
that I have not yet investigated)
b) Write the j version as a translation of dll calls using the declarations
as I found fit. For this I looked into the lib files to identify the
exported function name and used the header files to deduce the declarations.

c) There are no cd errors so far - only a big crash!!

(Note: I could have attached files but I am not sure if this mail server
accepts attachments. So I have pasted the whole code).

Do let me know if you have some ideas that I can try out.

Regards,
Yuva




[1] http://ws.apache.org/axis2/c/download.cgi
[2]
int main (int argc, char *argv[])
{
    const axutil_env_t *env = NULL;
    const axis2_char_t *address = NULL;
    axis2_endpoint_ref_t* endpoint_ref = NULL;
    axis2_options_t *options = NULL;
    const axis2_char_t *client_home = NULL;
    axis2_svc_client_t* svc_client = NULL;
    axiom_node_t *payload = NULL;
    axiom_node_t *ret_node = NULL;
    axis2_char_t *search_string = NULL;

    if (argc > 1)
    {

        if (!strcmp (argv[1], "-h") || !strcmp (argv[1], "--help"))
        {
            print_help ();
        }
        else
            search_string = argv[1];
    }


    env = axutil_env_create_all("yahoo_rest_search.log",
AXIS2_LOG_LEVEL_TRACE);
    address = "http://search.yahooapis.com/WebSearchService/V1/webSearch";;

    printf ("using endpoint %s \n", address);

    endpoint_ref = axis2_endpoint_ref_create(env, address);

    options = axis2_options_create(env);
    axis2_options_set_to(options, env, endpoint_ref);

    axis2_options_set_enable_rest(options, env, AXIS2_TRUE);
    axis2_options_set_http_method(options, env, AXIS2_HTTP_GET);

    client_home = AXIS2_GETENV("AXIS2C_HOME");
    if (!client_home || !strcmp (client_home, ""))
        client_home = "../..";

    /* Create service client */
    svc_client = axis2_svc_client_create(env, client_home);
    if (!svc_client)
    {
        printf("Error creating service client, Please check AXIS2C_HOME
again\n");
        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Stub invoke FAILED: Error
code:"
                " %d :: %s", env->error->error_number,
                AXIS2_ERROR_GET_MESSAGE(env->error));
          return -1;
    }

    /* Set service client options */
    axis2_svc_client_set_options(svc_client, env, options);

    /* adding proxy support */
    axis2_svc_client_set_proxy(svc_client,env, "proxy","8080");

    /* Build the SOAP request message payload using OM API.*/
    payload = build_yahoo_rest_payload (env, search_string);

    /* Send request */
    ret_node = axis2_svc_client_send_receive(svc_client, env, payload);

    if (ret_node)
    {
        format_output (env, ret_node);
        printf("\necho client invoke SUCCESSFUL!\n");
    }
    else
    {
        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Stub invoke FAILED: Error
code:"
                " %d :: %s", env->error->error_number,
                AXIS2_ERROR_GET_MESSAGE(env->error));
        printf("Yahoo REST client invoke FAILED!\n");
    }

    if (svc_client)
    {
        axis2_svc_client_free(svc_client, env);
        svc_client = NULL;
    }
    return 0;
}

[3]
ROOTDIR =: jpath '~user\projects\websvc\'
NB. v1 : echo application
d=. (<jhostpath ROOTDIR,'lib/') ,&.> cut 'axiom.dll axutil.dllaxis2_engine.dll'
'AXIOM UTILITY ENGINE' =:    ('"'&,@],&'" ') L:0 d
NB.DEBUG
ENGINE =: 'C:\08.Utils\axis2\axis2c-
bin-1.0.0-win32\samples\WebServiceSamples\debug\Engine.dll  '
NB. AXIOM =:  'C:\08.Utils\axis2\axis2c-
bin-1.0.0-win32\samples\WebServiceSamples\debug\Axiom.dll  '

cdu =: 1 : '(UTILITY,m)&cd'
cde =: 1 : '(ENGINE,m)&cd'
cda =: 1 : '(AXIOM,m)&cd'

NB. win32
setenv           =:            'kernel32 SetEnvironmentVariableA  > i *c
*c'&cd

NB. methods
strcmp           =:            '[EMAIL PROTECTED]  > i *c *c' cdu
env_create_all =:             '[EMAIL PROTECTED]  > i *c i' cdu

endpoint_ref   =:            '[EMAIL PROTECTED] >  i i *c' cde
options_create =:            '[EMAIL PROTECTED] > i i' cde
options_set_to =:             '[EMAIL PROTECTED] > i i i i' cde
options_set_enable_rest=:    '[EMAIL PROTECTED] > i i i i'
cde
options_set_http_method =:    '[EMAIL PROTECTED] > i i i *c'
cde
svc_client_create =:        '[EMAIL PROTECTED] > i i *c' cde
svc_client_set_options=:    '[EMAIL PROTECTED] > i i i i' cde
svc_client_set_proxy=:        '[EMAIL PROTECTED] > i i i *c *c'
cde
svc_client_send_receive =:     '[EMAIL PROTECTED] > i i i i'
cde
node_create =:                 '[EMAIL PROTECTED] > i i' cda
element_create =:             '[EMAIL PROTECTED] > i i i *c i i' cda
element_set_text =:            '[EMAIL PROTECTED] > i i i *c i' cda

NB. enumerations
'L_CRITICAL L_ERROR L_WARNING L_INFO L_DEBUG L_TRACE' =: 0 1 2 3 4 5
'TRUE FALSE' =: 1 0
HTTP_GET =: 'GET'

NB. Test
evp =: ROOTDIR
evv =: 'AXIS_HOME'
setenv evv;evp
l =: ROOTDIR,'/logs/test_yahoo.log'
a =: 'http://search.yahooapis.com/WebSearchService/V1/webSearch'
e =: env_create_all l;L_TRACE
ep =: endpoint_ref e;a
op =: options_create <e
options_set_to op;e;ep
options_set_enable_rest op;e;TRUE
options_set_http_method op;e;HTTP_GET
c =: svc_client_create e;ROOTDIR NB. axis2.xml + modules/ + services/
svc_client_set_options c;e;op
svc_client_set_proxy c;e;'proxy';'8080'

NB. build payload
rn =: node_create <e
an =: node_create <e
qn =: node_create <e
re =: element_create e;0;'yahoo_rest_search';0;rn
ae =: element_create e;rn;'appid';0;an
element_set_text ae;e;'Yahoo Demo';an
qe =: element_create e;rn;'query';0;qn
element_set_text qe;e;'finance';qn

NB. make the call
NB. retn =: svc_client_send_receive c;e;rn
call =: 3 : 0
    try.
        retn =: svc_client_send_receive c;e;rn
    catch.
        smoutput 'error occurred'
    end.
)



On 8/8/07, Oleg Kobchenko <[EMAIL PROTECTED]> wrote:
>
> You need to be either more specific, or the
> general advice is use the debuggers (J and C++)
> and trace up to the offending line and observe all
> the parameters carefully. This will involve a lot
> of crashes and restarts, which is normal. As you
> gain more handle over it, you will be constructing the
> definitions and preparing parameters that will work
> without crashing the first time around.
>
> Can you privide a few representative code samples
> what you are doing?
>
>
> --- Yuvaraj Athur Raghuvir <[EMAIL PROTECTED]> wrote:
>
> > Hello,
> >
> > I started the implementation of my own wrapper. Now, almost all the
> calls
> > are going fine. At the critical point when I have to establish the
> > connection and send the message, there is an  Access Violation that
> brings
> > down J environment. I am able to execute the same sequence of calls from
> a
> > simple client application.
> >
> > Now, how to debug this access violation?
> >
> > 1) I have done a simple mapping of pointers to structures as integers.
> This
> > seems to work because all I do is manage the various pointers - get it
> from
> > one call and pass it to the other. But is this the right way?
> >
> > 2) I built the engine in the VC++ Express edition. However, all I get to
> > understand if that a certain call causes a access violation in j.exe and
> the
> > second time J crashes. This is related to invoking a function pointer
> buried
> > deep in the various pointers I manage from J.
> >
> > Any clues?
> >
> > Regards,
> > Yuva
> >
> > p.s: If you need more info on the code I have written, just let me know
> and
> > I shall paste the code into the mail (the C/C++ working version & my J
> > translation)
> >
> > On 7/18/07, Yuvaraj Athur Raghuvir <[EMAIL PROTECTED]> wrote:
> > >
> > > Hello,
> > >
> > > I recently came across Axis2C - a C implementation for Web Service
> > > Consumption - developed by Apache (http://ws.apache.org/axis2/c/)
> > >
> > > Looking at the example clients that comes with the installation, I
> think
> > > it would be quite straight forward to provide a web service client
> facility
> > > in J via an addon.
> > >
> > > Being a novice at DLL integration into J, I was wondering if someone
> else
> > > is looking into this.
> > >
> > > I think adding this as another package under JAL would be quite
> useful.
> > >
> > > Let me know.
> > >
> > > Thanks,
> > > Yuva
> > >
> > >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
>
>
>
>
>       
> ____________________________________________________________________________________
> Park yourself in front of a world of choices in alternative vehicles.
> Visit the Yahoo! Auto Green Center.
> http://autos.yahoo.com/green_center/
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to