You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Dong Liu <ed...@gmail.com> on 2006/01/06 03:18:33 UTC

[Axis2] how does the SOAPAction be identified on the service provider?

Hi, folks,

I found something strange about the mechanism how axis2 service
identifies the operation corresponding to a request message.

When I used the following code to invoke a service:
...
OMElement result = call.invokeBlocking("operationName", payload);
...

If the SOAP body is *not* something like
      <soapenv:Body>
         <ns:operationName xmlns:ns="http://www.example.org/ns">
            ...
         </ns:operationName>
      </soapenv:Body>
I would get the fault message like

<faultstring>Operation Not found EPR is http://the targetEPR and WSA
Action = </faultstring>

However, if I hardcode the SOAPAction part and send it to the
targetEPR, the service works fine.

I checked the HTTP content of the requests in all the cases, and found
that the SOAPAction part in the HTTP head is always *empty*.

I am not sure if this behavior is by design. And I would like to know
how to specify the SOAPAction part when I use Call client.

Thanks,

Don

Re: [Axis2] how does the SOAPAction be identified on the service provider?

Posted by Dong Liu <ed...@gmail.com>.
Thank you, Chinthaka,

I figure out options.setSoapAction(operationName) is exactly what I want.

Don



On 1/5/06, Eran Chinthaka <ch...@opensource.lk> wrote:
>  -----BEGIN PGP SIGNED MESSAGE-----
>  Hash: SHA1
>
>  Hi Dong,
>
>  When you give the operationName to the invoke method, that parameter
>  is only for the client side of Axis2 engine, and this will not be
>  passed in to the SOAP message you send out. This basically will be
>  used to engage modules in the client side Axis2 engine. (In our new
>  ServiceClient implemenation, which is still in the SVN, this method
>  name has become optional)
>
>  We have couple of methods to pass the operationName, that you invoke,
>  to the server side. So that name will be used for dispatching your
>  message to the correct service and operation.
>
>     1. You can append that to the URL. I think thats what you did and
>        its not a hack.
>     2. You can say options.setAction(operationName)
>     3. You can say options.setSoapAction(operationName)
>     4. or you can use the RPC based dispatching by putting the QName of
>        the operation as the first child of the body.
>
>  HTH,
>
>  - -- Chinthaka
>
>  Dong Liu wrote:
>
>  > Hi, folks,
>  >
>  > I found something strange about the mechanism how axis2 service
>  > identifies the operation corresponding to a request message.
>  >
>  > When I used the following code to invoke a service: ... OMElement
>  > result = call.invokeBlocking("operationName", payload); ...
>  >
>  > If the SOAP body is *not* something like <soapenv:Body>
>  > <ns:operationName xmlns:ns="http://www.example.org/ns"> ...
>  > </ns:operationName> </soapenv:Body> I would get the fault message
>  > like
>  >
>  > <faultstring>Operation Not found EPR is http://the targetEPR and
>  > WSA Action = </faultstring>
>  >
>  > However, if I hardcode the SOAPAction part and send it to the
>  > targetEPR, the service works fine.
>  >
>  > I checked the HTTP content of the requests in all the cases, and
>  > found that the SOAPAction part in the HTTP head is always *empty*.
>  >
>  > I am not sure if this behavior is by design. And I would like to
>  > know how to specify the SOAPAction part when I use Call client.
>  >
>  > Thanks,
>  >
>  > Don
>  >
>  -----BEGIN PGP SIGNATURE-----
>  Version: GnuPG v1.4.2 (MingW32)
>
> iD8DBQFDvegwjON2uBzUhh8RAjDSAJ90CB5v5Q7TxYxzHoNf0vVG7U90pgCeOZWO
>  q415kSphpfyyNb/NxlG3dFs=
>  =P7kL
>  -----END PGP SIGNATURE-----
>
>

Re: [Axis2] how does the SOAPAction be identified on the service provider?

Posted by Eran Chinthaka <ch...@opensource.lk>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
 
Hi Dong,

When you give the operationName to the invoke method, that parameter
is only for the client side of Axis2 engine, and this will not be
passed in to the SOAP message you send out. This basically will be
used to engage modules in the client side Axis2 engine. (In our new
ServiceClient implemenation, which is still in the SVN, this method
name has become optional)

We have couple of methods to pass the operationName, that you invoke,
to the server side. So that name will be used for dispatching your
message to the correct service and operation.

   1. You can append that to the URL. I think thats what you did and
      its not a hack.
   2. You can say options.setAction(operationName)
   3. You can say options.setSoapAction(operationName)
   4. or you can use the RPC based dispatching by putting the QName of
      the operation as the first child of the body.

HTH,

- -- Chinthaka
Dong Liu wrote:

> Hi, folks,
>
> I found something strange about the mechanism how axis2 service
> identifies the operation corresponding to a request message.
>
> When I used the following code to invoke a service: ... OMElement
> result = call.invokeBlocking("operationName", payload); ...
>
> If the SOAP body is *not* something like <soapenv:Body>
> <ns:operationName xmlns:ns="http://www.example.org/ns"> ...
> </ns:operationName> </soapenv:Body> I would get the fault message
> like
>
> <faultstring>Operation Not found EPR is http://the targetEPR and
> WSA Action = </faultstring>
>
> However, if I hardcode the SOAPAction part and send it to the
> targetEPR, the service works fine.
>
> I checked the HTTP content of the requests in all the cases, and
> found that the SOAPAction part in the HTTP head is always *empty*.
>
> I am not sure if this behavior is by design. And I would like to
> know how to specify the SOAPAction part when I use Call client.
>
> Thanks,
>
> Don
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (MingW32)
 
iD8DBQFDvegwjON2uBzUhh8RAjDSAJ90CB5v5Q7TxYxzHoNf0vVG7U90pgCeOZWO
q415kSphpfyyNb/NxlG3dFs=
=P7kL
-----END PGP SIGNATURE-----