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 Shuaib Siddiqui <sh...@gmail.com> on 2012/02/20 17:13:26 UTC

Reading multiple input from client for POST method

Hi,

I am very new to axis2/c and web services in general. My goal is to
implement a service that takes in different values for an ethernet
interface (e.g., ip address, name, etc) as input and make respective
changes in the kernel of the target machine. It will be a POST REST method
and I've gone through the echo example but in that input from client,
"Hello World" string is predefined. I want to take the input from the
client through web browser and then feed it to the
build_om_payload_for_myservice.
Does anyone has any pointer to such an example ? Or how can we go about
this problem ?

Any help would be highly appreciated.

Regards,

S.S

Re: Reading multiple input from client for POST method

Posted by Shuaib Siddiqui <sh...@gmail.com>.
Hi,

Thanks to Josef Stadelmann's help, I was able understand how complex xml
nodes can be traversed in AXIS2/C. I will try to explain my problem and
solution below so others can benefit too.

I am using Firefox REST client to test the POST request. So,

*REST Request POST:
http://localhost:9090/services/service_openapi/os/setInterface
Request Header: Content-Type          text/xml
Request Body:
<ns1:setInterface xmlns:ns1="http://www.myname.com/axis2/quagga_openapi">
<interface>
<name>eth0</name>
<ip>
<address>147.83.159.197</address>
<prefixlen>24</prefixlen>
</ip>
</interface>
</ns1:setInterface>*

Now when the axis server receives this POST request it will parse it as:

*    if (!root_node)                  /* root node (setInterface) */
    {
        set_interface_error(env, "Invalid payload; setInterface node is
NULL");
        return NULL;
    }

    child_1 = axiom_node_get_first_child(root_node, env);
    if (!child_1) /* <interface> */
    {
        set_interface_error(env, "Invalid payload; text node is NULL");
        return NULL;
    }

    child_1_1 = axiom_node_get_first_child(child_1, env);
    if (!child_1_1)             /* <name> */
    {
        set_interface_error(env, "Invalid payload; text to be echoed is
NULL");
        return NULL;
    }

    if (axiom_node_get_node_type(child_1_1, env) == AXIOM_ELEMENT)
    {
    axiom_element_t *element_1_1 = NULL;
    element_1_1 = (axiom_element_t *)
axiom_node_get_data_element(child_1_1, env);
    axis2_char_t *child_1_1_name =
axiom_element_get_localname(element_1_1, env);
    printf("child_1_1 localname is %s \n", child_1_1_name);

    axis2_char_t *child_1_1_value = axiom_element_get_text(element_1_1,
env,child_1_1 );
    printf("child_1_1 value is : %s \n", child_1_1_value);

       }
    else
    {
        set_interface_error(env, "Invalid payload; invalid XML in request");
        return NULL;
    }

    child_1_2 = axiom_node_get_next_sibling(child_1_1, env);
    if (!child_1_2)             /* <ip> */
    {
        set_interface_error(env, "Invalid payload; text to be echoed is
NULL");
        return NULL;
    }

    child_1_2_1 = axiom_node_get_first_child(child_1_2, env);
    if (!child_1_1)             /* <address> */
    {
        set_interface_error(env, "Invalid payload; text to be echoed is
NULL");
        return NULL;
    }

    if (axiom_node_get_node_type(child_1_2_1, env) == AXIOM_ELEMENT)
    {
    axiom_element_t *element_1_2_1 = NULL;
    element_1_2_1 = (axiom_element_t *)
axiom_node_get_data_element(child_1_2_1, env);
    axis2_char_t *child_1_2_1_name =
axiom_element_get_localname(element_1_2_1, env);
    printf("child_1_2_1 localname is %s \n", child_1_2_1_name);

    axis2_char_t *child_1_2_1_value = axiom_element_get_text(element_1_2_1,
env,child_1_2_1 );
    printf("child_1_2_1 value is : %s \n", child_1_2_1_value);

    }
    else
    {
        set_interface_error(env, "Invalid payload; invalid XML in request");
        return NULL;
    }

    child_1_2_2 = axiom_node_get_next_sibling(child_1_2_1, env);
    if (!child_1_2_2)             /* <prefixlen> */
    {
        set_interface_error(env, "Invalid payload; text to be echoed is
NULL");
        return NULL;
    }

    if (axiom_node_get_node_type(child_1_2_2, env) == AXIOM_ELEMENT)
    {
    axiom_element_t *element_1_2_2 = NULL;
    element_1_2_2 = (axiom_element_t *)
axiom_node_get_data_element(child_1_2_2, env);
    axis2_char_t *child_1_2_2_name =
axiom_element_get_localname(element_1_2_2, env);
    printf("child_1_2_2 localname is %s \n", child_1_2_2_name);

    axis2_char_t *child_1_2_2_value = axiom_element_get_text(element_1_2_2,
env,child_1_2_2 );
    printf("child_1_2_2 value is : %s \n", child_1_2_2_value);

    }
    else
    {
        set_interface_error(env, "Invalid payload; invalid XML in request");
        return NULL;
    }*

Best Regards,

Shuaib


On Tue, Feb 21, 2012 at 9:30 AM, Stadelmann Josef <
josef.stadelmann@axa-winterthur.ch> wrote:

> Hi S.S****
>
> ** **
>
> build_om_payload_for_myservice ****
>
> ** **
>
> we can't comment.****
>
> ** **
>
> But if your intention is to build a OMElement from a String then I can
> only say that the string needs to be a well formed SOAP XML Payload.****
>
> ** **
>
> You want get from the address line of any browser a complex object as
> OMElement is. ****
>
> So what you need is a real axis2c_client, then build your OMElement
> programmatically and pass it to the service. ****
>
> ** **
>
> With a browser you can only send simple data types like strings and int's
> etc. to the service but certainly NOT OMElement.****
>
> Josef****
>
> ****
>
> ** **
>
> *Von:* Shuaib Siddiqui [mailto:shuaibe@gmail.com]
> *Gesendet:* Montag, 20. Februar 2012 17:13
> *An:* c-user@axis.apache.org
> *Betre**ff:* Reading multiple input from client for POST method****
>
> ** **
>
> Hi,
>
> I am very new to axis2/c and web services in general. My goal is to
> implement a service that takes in different values for an ethernet
> interface (e.g., ip address, name, etc) as input and make respective
> changes in the kernel of the target machine. It will be a POST REST method
> and I've gone through the echo example but in that input from client,
> "Hello World" string is predefined. I want to take the input from the
> client through web browser and then feed it to the
> build_om_payload_for_myservice.
> Does anyone has any pointer to such an example ? Or how can we go about
> this problem ?
>
> Any help would be highly appreciated.
>
> Regards,
>
> S.S****
>

Re: Reading multiple input from client for POST method

Posted by Shuaib Siddiqui <sh...@gmail.com>.
Hi Josef,

Thanks a lot for the reply. Please find my concern inline.

Regards.

S.S

On Tue, Feb 21, 2012 at 9:30 AM, Stadelmann Josef <
josef.stadelmann@axa-winterthur.ch> wrote:

> Hi S.S****
>
> ** **
>
> build_om_payload_for_myservice
>
This will build the OMElement programmatically.

> ****
>
> ** **
>
> we can't comment.****
>
> ** **
>
> But if your intention is to build a OMElement from a String then I can
> only say that the string needs to be a well formed SOAP XML Payload.
>
Can you please, forward any pointer to an example ?

> ****
>
> ** **
>
> You want get from the address line of any browser a complex object as
> OMElement is. ****
>
> So what you need is a real axis2c_client, then build your OMElement
> programmatically and pass it to the service.
>
For building the OMElement programmatically, I need to have input from the
client, e.g, in my case, Interface name (eth0) and IP address
(192.168.1.1), etc. How do I take input from user ? My question could be
very naive so please bear with me as I am new to this stuff.

> ** **
>
> With a browser you can only send simple data types like strings and int's
> etc. to the service but certainly NOT OMElement.
>
agree!

> ****
>
> Josef****
>
> ****
>
> ** **
>
> *Von:* Shuaib Siddiqui [mailto:shuaibe@gmail.com]
> *Gesendet:* Montag, 20. Februar 2012 17:13
> *An:* c-user@axis.apache.org
> *Betre**ff:* Reading multiple input from client for POST method****
>
> ** **
>
> Hi,
>
> I am very new to axis2/c and web services in general. My goal is to
> implement a service that takes in different values for an ethernet
> interface (e.g., ip address, name, etc) as input and make respective
> changes in the kernel of the target machine. It will be a POST REST method
> and I've gone through the echo example but in that input from client,
> "Hello World" string is predefined. I want to take the input from the
> client through web browser and then feed it to the
> build_om_payload_for_myservice.
> Does anyone has any pointer to such an example ? Or how can we go about
> this problem ?
>
> Any help would be highly appreciated.
>
> Regards,
>
> S.S****
>

AW: Reading multiple input from client for POST method

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

 

build_om_payload_for_myservice 

 

we can't comment.

 

But if your intention is to build a OMElement from a String then I can
only say that the string needs to be a well formed SOAP XML Payload.

 

You want get from the address line of any browser a complex object as
OMElement is. 

So what you need is a real axis2c_client, then build your OMElement
programmatically and pass it to the service. 

 

With a browser you can only send simple data types like strings and
int's etc. to the service but certainly NOT OMElement.

Josef

 

Von: Shuaib Siddiqui [mailto:shuaibe@gmail.com] 
Gesendet: Montag, 20. Februar 2012 17:13
An: c-user@axis.apache.org
Betreff: Reading multiple input from client for POST method

 

Hi,

I am very new to axis2/c and web services in general. My goal is to
implement a service that takes in different values for an ethernet
interface (e.g., ip address, name, etc) as input and make respective
changes in the kernel of the target machine. It will be a POST REST
method and I've gone through the echo example but in that input from
client, "Hello World" string is predefined. I want to take the input
from the client through web browser and then feed it to the
build_om_payload_for_myservice. 
Does anyone has any pointer to such an example ? Or how can we go about
this problem ?

Any help would be highly appreciated.

Regards,

S.S