You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-user@axis.apache.org by Oscar Pernas <os...@pernas.es> on 2013/02/26 12:54:15 UTC

send_receive blocking

Hi all,

Im using axis2c trunk version, over Windows 7, and I'm falling into a
problem with axis2_svc_client_send_receive method.

I have a class in c++ where I'm using axis2c api. I have a method init
where I made all initializations, and a method run where I made the
svc_client_create.

The first time that I send a message, message is sent correctly and Iam
receiving the response well. But the second time, petition is sent (I can
see in wireshark) but I dont have any response (but is received because I
see in wireshark), axiom node returned by send_receive is null.

My code is:

void send(){

axiom_node_t* payload=buildWSMessage(env,message);
if (payload){
  axiom_node_t* retNode=axis2_svc_client_send_receive(svc_client, env,
payload);
 if (retNode){
extractAndSend(retNode);
}
}
}

Im only calling init() and run() one time, and after that I am allways
calling to this send method. What should I do if i want to use the previous
method twice? shoud I have to free some structures of svc_client? any help
would be appreciated!

regards

-- 
Óscar Pernas Plaza.

Re: send_receive blocking

Posted by Alex Mantaut <al...@intraway.com>.
Hi Oscar,
              Yeah, there are many problems with asynchronous communication
in Axis2/C... Can you send me a sample in which the patch fails, and
explain how it fails, so I can try to fix it?

Best Regards
Alex



On Tue, Feb 26, 2013 at 11:44 AM, Oscar Pernas <os...@pernas.es> wrote:

> Hi, I think that I've solved it. To see what I'm receiving I had this code
> for every response:
>
> //xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE,
> AXIS2_FALSE,
>  // AXIS2_XML_PARSER_TYPE_BUFFER);
> //om_output = axiom_output_create(env, xml_writer);
>
> //if (messageNode){
> // axiom_node_serialize(messageNode, env, om_output);
>  //}else{
> // axiom_node_serialize(genericNode, env, om_output);
>  //}
> //buffer = (axis2_char_t *) axiom_xml_writer_get_xml(xml_writer, env);
> ////AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "\nSending OM node in XML : %s
> \n",
>  ////                buffer);
> //if (om_output){
> // axiom_output_free(om_output, env);
>  // om_output = NULL;
> //}
>
> After commented it, I can send more than one message, and everything seems
> to go fine. Any idea of the reason?
>
> I've given up myself in trying to get an asynchronous communication (not
> blocking) working. OnError callback ends in a crash. Have anyone tested it
> with trunk code? I've applied Alex Mantaut patch but doesnt work at all.
>
> Regards
>
>
>
> 2013/2/26 Stadelmann Josef <jo...@axa-winterthur.ch>
>
>> Hi Oscar****
>>
>> what states the servers log if any created? ****
>>
>> you're saying that the second send() goes out, ****
>>
>> is it received at the servers end?****
>>
>> is it received at the servers method end?****
>>
>> if yes what does the method do with the second request? ****
>>
>> will it just return the payload as an echo too? ****
>>
>> In this case can you see the incoming second response as soap/xml data on
>> the wire.****
>>
>> ** **
>>
>> Also for ease of use, unless really required, ****
>>
>> I would suggest to use TCP Monitor to watch the wire transfer. ****
>>
>> You can see much better the soap/xml traffic on the wire than with
>> Wireshark.****
>>
>> Nothing against Wireshark, both a very OK.****
>>
>> Josef****
>>
>> ** **
>>
>> *Von:* Oscar Pernas [mailto:oscar@pernas.es]
>> *Gesendet:* Dienstag, 26. Februar 2013 12:54
>> *An:* c-user@axis.apache.org
>> *Betreff:* send_receive blocking****
>>
>> ** **
>>
>> Hi all,****
>>
>> ** **
>>
>> Im using axis2c trunk version, over Windows 7, and I'm falling into a
>> problem with axis2_svc_client_send_receive method.****
>>
>> ** **
>>
>> I have a class in c++ where I'm using axis2c api. I have a method init
>> where I made all initializations, and a method run where I made the
>> svc_client_create.****
>>
>> ** **
>>
>> The first time that I send a message, message is sent correctly and Iam
>> receiving the response well. But the second time, petition is sent (I can
>> see in wireshark) but I dont have any response (but is received because I
>> see in wireshark), axiom node returned by send_receive is null.****
>>
>> ** **
>>
>> My code is:****
>>
>> ** **
>>
>> void send(){****
>>
>> ** **
>>
>> axiom_node_t* payload=buildWSMessage(env,message);****
>>
>> if (payload){****
>>
>>     axiom_node_t* retNode=axis2_svc_client_send_receive(svc_client, env,
>> payload);****
>>
>>             if (retNode){****
>>
>>                 extractAndSend(retNode);****
>>
>>             }****
>>
>> }****
>>
>> }****
>>
>> ** **
>>
>> Im only calling init() and run() one time, and after that I am allways
>> calling to this send method. What should I do if i want to use the previous
>> method twice? shoud I have to free some structures of svc_client? any help
>> would be appreciated!****
>>
>> ** **
>>
>> regards****
>>
>> ** **
>>
>> --
>> Óscar Pernas Plaza. ****
>>
>
>
>
> --
> Óscar Pernas Plaza.
>



-- 
-- 
Mantaut Alex
Intraway Corp.

+54 (11) 6040-4000
MSN: alex.mantaut@intraway.com

Visit our website at http://www.intraway.com
Proud to be an ISO 9001:2008 certified company

Re: send_receive blocking

Posted by Oscar Pernas <os...@pernas.es>.
Hi, I think that I've solved it. To see what I'm receiving I had this code
for every response:

//xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE,
AXIS2_FALSE,
 // AXIS2_XML_PARSER_TYPE_BUFFER);
//om_output = axiom_output_create(env, xml_writer);

//if (messageNode){
// axiom_node_serialize(messageNode, env, om_output);
 //}else{
// axiom_node_serialize(genericNode, env, om_output);
 //}
//buffer = (axis2_char_t *) axiom_xml_writer_get_xml(xml_writer, env);
////AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "\nSending OM node in XML : %s
\n",
 ////                buffer);
//if (om_output){
// axiom_output_free(om_output, env);
 // om_output = NULL;
//}

After commented it, I can send more than one message, and everything seems
to go fine. Any idea of the reason?

I've given up myself in trying to get an asynchronous communication (not
blocking) working. OnError callback ends in a crash. Have anyone tested it
with trunk code? I've applied Alex Mantaut patch but doesnt work at all.

Regards



2013/2/26 Stadelmann Josef <jo...@axa-winterthur.ch>

> Hi Oscar****
>
> what states the servers log if any created? ****
>
> you're saying that the second send() goes out, ****
>
> is it received at the servers end?****
>
> is it received at the servers method end?****
>
> if yes what does the method do with the second request? ****
>
> will it just return the payload as an echo too? ****
>
> In this case can you see the incoming second response as soap/xml data on
> the wire.****
>
> ** **
>
> Also for ease of use, unless really required, ****
>
> I would suggest to use TCP Monitor to watch the wire transfer. ****
>
> You can see much better the soap/xml traffic on the wire than with
> Wireshark.****
>
> Nothing against Wireshark, both a very OK.****
>
> Josef****
>
> ** **
>
> *Von:* Oscar Pernas [mailto:oscar@pernas.es]
> *Gesendet:* Dienstag, 26. Februar 2013 12:54
> *An:* c-user@axis.apache.org
> *Betreff:* send_receive blocking****
>
> ** **
>
> Hi all,****
>
> ** **
>
> Im using axis2c trunk version, over Windows 7, and I'm falling into a
> problem with axis2_svc_client_send_receive method.****
>
> ** **
>
> I have a class in c++ where I'm using axis2c api. I have a method init
> where I made all initializations, and a method run where I made the
> svc_client_create.****
>
> ** **
>
> The first time that I send a message, message is sent correctly and Iam
> receiving the response well. But the second time, petition is sent (I can
> see in wireshark) but I dont have any response (but is received because I
> see in wireshark), axiom node returned by send_receive is null.****
>
> ** **
>
> My code is:****
>
> ** **
>
> void send(){****
>
> ** **
>
> axiom_node_t* payload=buildWSMessage(env,message);****
>
> if (payload){****
>
>     axiom_node_t* retNode=axis2_svc_client_send_receive(svc_client, env,
> payload);****
>
>             if (retNode){****
>
>                 extractAndSend(retNode);****
>
>             }****
>
> }****
>
> }****
>
> ** **
>
> Im only calling init() and run() one time, and after that I am allways
> calling to this send method. What should I do if i want to use the previous
> method twice? shoud I have to free some structures of svc_client? any help
> would be appreciated!****
>
> ** **
>
> regards****
>
> ** **
>
> --
> Óscar Pernas Plaza. ****
>



-- 
Óscar Pernas Plaza.

AW: send_receive blocking

Posted by Stadelmann Josef <jo...@axa-winterthur.ch>.
Hi Oscar

what states the servers log if any created? 

you're saying that the second send() goes out, 

is it received at the servers end?

is it received at the servers method end?

if yes what does the method do with the second request? 

will it just return the payload as an echo too? 

In this case can you see the incoming second response as soap/xml data on the wire.

 

Also for ease of use, unless really required, 

I would suggest to use TCP Monitor to watch the wire transfer. 

You can see much better the soap/xml traffic on the wire than with Wireshark.

Nothing against Wireshark, both a very OK.

Josef

 

Von: Oscar Pernas [mailto:oscar@pernas.es] 
Gesendet: Dienstag, 26. Februar 2013 12:54
An: c-user@axis.apache.org
Betreff: send_receive blocking

 

Hi all,

 

Im using axis2c trunk version, over Windows 7, and I'm falling into a problem with axis2_svc_client_send_receive method.

 

I have a class in c++ where I'm using axis2c api. I have a method init where I made all initializations, and a method run where I made the svc_client_create.

 

The first time that I send a message, message is sent correctly and Iam receiving the response well. But the second time, petition is sent (I can see in wireshark) but I dont have any response (but is received because I see in wireshark), axiom node returned by send_receive is null.

 

My code is:

 

void send(){

 

axiom_node_t* payload=buildWSMessage(env,message);

if (payload){

    axiom_node_t* retNode=axis2_svc_client_send_receive(svc_client, env, payload);

            if (retNode){

                extractAndSend(retNode);

            }

}

}

 

Im only calling init() and run() one time, and after that I am allways calling to this send method. What should I do if i want to use the previous method twice? shoud I have to free some structures of svc_client? any help would be appreciated!

 

regards

 

-- 
Óscar Pernas Plaza.