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 David Melgar <dm...@us.ibm.com> on 2006/07/25 07:03:52 UTC

Axis1 style="message" in Axis2?

I need to implement a message style web service in Axis2. In Axis1 wsdd, 
this would be a web service declared with 
<service name=xxx style="message">

How do I declare the equivalent web service in Axis2? In addition, I will 
expect that WS-Addressing headers will be sent and received. From reading 
the Axis2 documentation, it looks like the <actionMapping> element is used 
to map an action header value to an operation name. In my case I want 
Axis2 to always send me the body of the message. I do not want Axis2 to 
try and determine which operation is being invoked, I want it to send the 
message to a specific method all the time, as a message style service did 
in Axis1.

I'm doing this because my service is mapping web service invocations of 
operations to another form of invocation on non-Java objects.

Thanks

Re: Axis1 style="message" in Axis2?

Posted by David Melgar <dm...@us.ibm.com>.
Can you clarify what Axis is generating an error if <actionMapping> is not
specified? I had commented out the dispatch phase from axis2.xml and it was
still returning a 500. Where is the exception being logged?

I'd like to have more confidence in the solution before investing too much
time in it.



                                                                           
             "Ajith Ranabahu"                                              
             <ajith.ranabahu@g                                             
             mail.com>                                                  To 
                                       axis-user@ws.apache.org             
             08/16/06 10:59 PM                                          cc 
                                                                           
                                                                   Subject 
             Please respond to         Re: Axis1 style="message" in Axis2? 
             axis-user@ws.apac                                             
                  he.org                                                   
                                                                           
                                                                           
                                                                           
                                                                           




Hi,
Given what you need to do (which is possible ofcourse) it simply
requires a bit more knowledge about the internals of Axis2. I am going
to outline a doable procedure but unfortunatley I don't have the time
to write a lengthy description and elaborate each point.

1. You need to introduce a custom dispatcher (Axis does not enforce
the action but it comes addressing enabled by default). What this
dispatcher does is figuring out the static and runtime service and
operation  'data  bags'. We call them AxisService,AxisOperation and
serviceContext, operationContext. Ultimately your custom dispatcher
should provide the these 'data bags' relevant to your service. Please
have a look at the dispatcher implementations to get an idea of how
these work.

2. Write a custom message receiver. If you generate code for server
side using a simple WSDL you will see the source for a custom message
receiver. Modify the code off that not to find the method using the
action.

That should do it :)

Ajith
On 8/16/06, David Melgar <dm...@us.ibm.com> wrote:
> I'm still trying to figure out how to deploy a message style service
> WITHOUT having to declare each possible wsa:Action value which might be
> used on the invocation. Its a message style service... I dont want or
need
> Axis to figure out what method to invoke. There's only one method
> available.
>
> I tried the 1st possible solution mentioned below,
> "1. Remove the dispach phase from your Axis2 configuration and write
> your own MessageReceiver (which removes the need for an AxisOperation
> to be identified)"
>
> I wrote a new message receiver but ran into bigger problems. If I remove
> the <actionMapping> tags in the service's deployment descriptor, my new
> message receiver never gets called. I receive a fault with a response
code
> 500 with no additional information to help diagnose where the problem
> occured. Nothing showed up in Tomcat's catalina.log.
>
> Same problem seems to occur if the wsa:Action header value in the request
> doesn't match the set of <actionMapping> tags for the service.
>
> I tried commenting out the dispatch phase as stated as a suggestion
without
> any difference in behavior.
>
> Suggestions? Is there an easier way to accomplish this? It still appears
to
> me to be an Axis design issue. Axis should not force declaration of
> specific wsa:Action values for a message based service. It could be an
> option, but should not be required. Wildcard or similar should be
> supported.
>
>
>
>
>
>              "David Illsley"
>              <davidillsley@gma
>              il.com>
To
>                                        axis-user@ws.apache.org
>              07/26/06 02:00 PM
cc
>
>
Subject
>              Please respond to         Re: Axis1 style="message" in
Axis2?
>              axis-user@ws.apac
>                   he.org
>
>
>
>
>
>
>
>
> On 26/07/06, David Melgar <dm...@us.ibm.com> wrote:
> >
> >
> > Setting the message receiver to RawXMLMessageReceiver still appears to
> require <actionMapping> to determine which method to invoke. In axis1,
the
> specified method would receive all messages for that service. Equivalent
> behavior should be available in axis2 regardless of the value of the
> wsa:Action header.
> >
> > To further clarrify, the service I'm writing bridges between
webservices
> and a non-Java object invocation mechanism. It dynamically determines
what
> operations are allowed. This services does not know at deployment time
what
> operations are possible. I therefore don't know all the wsa:Action header
> values that it might be included in request messages. Therefore I cannot
> declare <actionMapping> values in the service deployment descriptor. In
> case you're wondering, this service also dynamically generates WSDL to
> describe the discovered supported operations.
> >
> > Is there a way to wildcard <actionMapping> to say that any action maps
to
> a method? Or to avoid the requirement for specifying an actionMapping if
> RawXMLMessageReceiver is used.
> >
> > Are there other approaches that could be used?
>
> What you are trying to do sounds pretty advanced (given that you're
> dynamically generating WSDL).
>
> There are a couple of options I can think of...
> 1. Remove the dispach phase from your Axis2 configuration and write
> your own MessageReceiver (which removes the need for an AxisOperation
> to be identified)
> 2. Define a single operation for the service and add a handler to the
> DispatchPhase which selects that operation when the
> RawXMLInOutReceiver will then invoke on the endpoint object.
>
> David
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-user-help@ws.apache.org
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-user-help@ws.apache.org
>
>


--
Ajith Ranabahu

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org


Re: Axis1 style="message" in Axis2?

Posted by Ajith Ranabahu <aj...@gmail.com>.
Hi,
Given what you need to do (which is possible ofcourse) it simply
requires a bit more knowledge about the internals of Axis2. I am going
to outline a doable procedure but unfortunatley I don't have the time
to write a lengthy description and elaborate each point.

1. You need to introduce a custom dispatcher (Axis does not enforce
the action but it comes addressing enabled by default). What this
dispatcher does is figuring out the static and runtime service and
operation  'data  bags'. We call them AxisService,AxisOperation and
serviceContext, operationContext. Ultimately your custom dispatcher
should provide the these 'data bags' relevant to your service. Please
have a look at the dispatcher implementations to get an idea of how
these work.

2. Write a custom message receiver. If you generate code for server
side using a simple WSDL you will see the source for a custom message
receiver. Modify the code off that not to find the method using the
action.

That should do it :)

Ajith
On 8/16/06, David Melgar <dm...@us.ibm.com> wrote:
> I'm still trying to figure out how to deploy a message style service
> WITHOUT having to declare each possible wsa:Action value which might be
> used on the invocation. Its a message style service... I dont want or need
> Axis to figure out what method to invoke. There's only one method
> available.
>
> I tried the 1st possible solution mentioned below,
> "1. Remove the dispach phase from your Axis2 configuration and write
> your own MessageReceiver (which removes the need for an AxisOperation
> to be identified)"
>
> I wrote a new message receiver but ran into bigger problems. If I remove
> the <actionMapping> tags in the service's deployment descriptor, my new
> message receiver never gets called. I receive a fault with a response code
> 500 with no additional information to help diagnose where the problem
> occured. Nothing showed up in Tomcat's catalina.log.
>
> Same problem seems to occur if the wsa:Action header value in the request
> doesn't match the set of <actionMapping> tags for the service.
>
> I tried commenting out the dispatch phase as stated as a suggestion without
> any difference in behavior.
>
> Suggestions? Is there an easier way to accomplish this? It still appears to
> me to be an Axis design issue. Axis should not force declaration of
> specific wsa:Action values for a message based service. It could be an
> option, but should not be required. Wildcard or similar should be
> supported.
>
>
>
>
>
>              "David Illsley"
>              <davidillsley@gma
>              il.com>                                                    To
>                                        axis-user@ws.apache.org
>              07/26/06 02:00 PM                                          cc
>
>                                                                    Subject
>              Please respond to         Re: Axis1 style="message" in Axis2?
>              axis-user@ws.apac
>                   he.org
>
>
>
>
>
>
>
>
> On 26/07/06, David Melgar <dm...@us.ibm.com> wrote:
> >
> >
> > Setting the message receiver to RawXMLMessageReceiver still appears to
> require <actionMapping> to determine which method to invoke. In axis1, the
> specified method would receive all messages for that service. Equivalent
> behavior should be available in axis2 regardless of the value of the
> wsa:Action header.
> >
> > To further clarrify, the service I'm writing bridges between webservices
> and a non-Java object invocation mechanism. It dynamically determines what
> operations are allowed. This services does not know at deployment time what
> operations are possible. I therefore don't know all the wsa:Action header
> values that it might be included in request messages. Therefore I cannot
> declare <actionMapping> values in the service deployment descriptor. In
> case you're wondering, this service also dynamically generates WSDL to
> describe the discovered supported operations.
> >
> > Is there a way to wildcard <actionMapping> to say that any action maps to
> a method? Or to avoid the requirement for specifying an actionMapping if
> RawXMLMessageReceiver is used.
> >
> > Are there other approaches that could be used?
>
> What you are trying to do sounds pretty advanced (given that you're
> dynamically generating WSDL).
>
> There are a couple of options I can think of...
> 1. Remove the dispach phase from your Axis2 configuration and write
> your own MessageReceiver (which removes the need for an AxisOperation
> to be identified)
> 2. Define a single operation for the service and add a handler to the
> DispatchPhase which selects that operation when the
> RawXMLInOutReceiver will then invoke on the endpoint object.
>
> David
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-user-help@ws.apache.org
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-user-help@ws.apache.org
>
>


-- 
Ajith Ranabahu

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org


Re: Axis1 style="message" in Axis2?

Posted by David Melgar <dm...@us.ibm.com>.
I'm still trying to figure out how to deploy a message style service
WITHOUT having to declare each possible wsa:Action value which might be
used on the invocation. Its a message style service... I dont want or need
Axis to figure out what method to invoke. There's only one method
available.

I tried the 1st possible solution mentioned below,
"1. Remove the dispach phase from your Axis2 configuration and write
your own MessageReceiver (which removes the need for an AxisOperation
to be identified)"

I wrote a new message receiver but ran into bigger problems. If I remove
the <actionMapping> tags in the service's deployment descriptor, my new
message receiver never gets called. I receive a fault with a response code
500 with no additional information to help diagnose where the problem
occured. Nothing showed up in Tomcat's catalina.log.

Same problem seems to occur if the wsa:Action header value in the request
doesn't match the set of <actionMapping> tags for the service.

I tried commenting out the dispatch phase as stated as a suggestion without
any difference in behavior.

Suggestions? Is there an easier way to accomplish this? It still appears to
me to be an Axis design issue. Axis should not force declaration of
specific wsa:Action values for a message based service. It could be an
option, but should not be required. Wildcard or similar should be
supported.




                                                                           
             "David Illsley"                                               
             <davidillsley@gma                                             
             il.com>                                                    To 
                                       axis-user@ws.apache.org             
             07/26/06 02:00 PM                                          cc 
                                                                           
                                                                   Subject 
             Please respond to         Re: Axis1 style="message" in Axis2? 
             axis-user@ws.apac                                             
                  he.org                                                   
                                                                           
                                                                           
                                                                           
                                                                           




On 26/07/06, David Melgar <dm...@us.ibm.com> wrote:
>
>
> Setting the message receiver to RawXMLMessageReceiver still appears to
require <actionMapping> to determine which method to invoke. In axis1, the
specified method would receive all messages for that service. Equivalent
behavior should be available in axis2 regardless of the value of the
wsa:Action header.
>
> To further clarrify, the service I'm writing bridges between webservices
and a non-Java object invocation mechanism. It dynamically determines what
operations are allowed. This services does not know at deployment time what
operations are possible. I therefore don't know all the wsa:Action header
values that it might be included in request messages. Therefore I cannot
declare <actionMapping> values in the service deployment descriptor. In
case you're wondering, this service also dynamically generates WSDL to
describe the discovered supported operations.
>
> Is there a way to wildcard <actionMapping> to say that any action maps to
a method? Or to avoid the requirement for specifying an actionMapping if
RawXMLMessageReceiver is used.
>
> Are there other approaches that could be used?

What you are trying to do sounds pretty advanced (given that you're
dynamically generating WSDL).

There are a couple of options I can think of...
1. Remove the dispach phase from your Axis2 configuration and write
your own MessageReceiver (which removes the need for an AxisOperation
to be identified)
2. Define a single operation for the service and add a handler to the
DispatchPhase which selects that operation when the
RawXMLInOutReceiver will then invoke on the endpoint object.

David

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org


Re: Axis1 style="message" in Axis2?

Posted by David Illsley <da...@gmail.com>.
On 26/07/06, David Melgar <dm...@us.ibm.com> wrote:
>
>
> Setting the message receiver to RawXMLMessageReceiver still appears to require <actionMapping> to determine which method to invoke. In axis1, the specified method would receive all messages for that service. Equivalent behavior should be available in axis2 regardless of the value of the wsa:Action header.
>
> To further clarrify, the service I'm writing bridges between webservices and a non-Java object invocation mechanism. It dynamically determines what operations are allowed. This services does not know at deployment time what operations are possible. I therefore don't know all the wsa:Action header values that it might be included in request messages. Therefore I cannot declare <actionMapping> values in the service deployment descriptor. In case you're wondering, this service also dynamically generates WSDL to describe the discovered supported operations.
>
> Is there a way to wildcard <actionMapping> to say that any action maps to a method? Or to avoid the requirement for specifying an actionMapping if RawXMLMessageReceiver is used.
>
> Are there other approaches that could be used?

What you are trying to do sounds pretty advanced (given that you're
dynamically generating WSDL).

There are a couple of options I can think of...
1. Remove the dispach phase from your Axis2 configuration and write
your own MessageReceiver (which removes the need for an AxisOperation
to be identified)
2. Define a single operation for the service and add a handler to the
DispatchPhase which selects that operation when the
RawXMLInOutReceiver will then invoke on the endpoint object.

David

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org


RE: Axis1 style="message" in Axis2?

Posted by "Bhatra, Junaid" <jb...@rsasecurity.com>.
I ran into the same problem some time back in which I wanted Axis 1.x
"message" style behavior in Axis 2 in order to dispatch to non-standard
Java objects. I ended up using a work-around involving SOAPAction since
Axis 2 contains an action-based dispatcher. So every operation defined
in my WSDL specified the same SOAPAction value equal to my service
method name. I was using RawXMLMessageReceiver with a single method.
Note that I was using WSDL 1.1/SOAP 1.1. I haven't tried this with SOAP
1.2/WSDL 2.0, which does not have SOAPAction, although it does make use
of an action parameter with exactly the same semantics. I'm guessing you
could do the same using wsa:Action header as well.

 

It would definitely be nice though to have a wildcard <actionMapping>
with Axis 1.x "message" style semantics instead of having to work-around
this problem.

 

 - Junaid

 

________________________________

From: David Melgar [mailto:dmelgar@us.ibm.com] 
Sent: Wednesday, July 26, 2006 11:37 AM
To: axis-user@ws.apache.org
Subject: Re: Axis1 style="message" in Axis2?

 


Setting the message receiver to RawXMLMessageReceiver still appears to
require <actionMapping> to determine which method to invoke. In axis1,
the specified method would receive all messages for that service.
Equivalent behavior should be available in axis2 regardless of the value
of the wsa:Action header. 

To further clarrify, the service I'm writing bridges between webservices
and a non-Java object invocation mechanism. It dynamically determines
what operations are allowed. This services does not know at deployment
time what operations are possible. I therefore don't know all the
wsa:Action header values that it might be included in request messages.
Therefore I cannot declare <actionMapping> values in the service
deployment descriptor. In case you're wondering, this service also
dynamically generates WSDL to describe the discovered supported
operations. 

Is there a way to wildcard <actionMapping> to say that any action maps
to a method? Or to avoid the requirement for specifying an actionMapping
if RawXMLMessageReceiver is used. 

Are there other approaches that could be used? 




"Anne Thomas Manes" <at...@gmail.com> 

07/25/2006 02:06 PM 

Please respond to
axis-user@ws.apache.org

To

axis-user@ws.apache.org 

cc

 

Subject

Re: Axis1 style="message" in Axis2?

 

 

 




Use the RawXMLMessageReceiver.

On 7/25/06, David Melgar <dm...@us.ibm.com> wrote:
>
> I need to implement a message style web service in Axis2. In Axis1
wsdd,
> this would be a web service declared with
> <service name=xxx style="message">
>
> How do I declare the equivalent web service in Axis2? In addition, I
will
> expect that WS-Addressing headers will be sent and received. From
reading
> the Axis2 documentation, it looks like the <actionMapping> element is
used
> to map an action header value to an operation name. In my case I want
Axis2
> to always send me the body of the message. I do not want Axis2 to try
and
> determine which operation is being invoked, I want it to send the
message to
> a specific method all the time, as a message style service did in
Axis1.
>
> I'm doing this because my service is mapping web service invocations
of
> operations to another form of invocation on non-Java objects.
>
> Thanks

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org




Re: Axis1 style="message" in Axis2?

Posted by David Melgar <dm...@us.ibm.com>.
Setting the message receiver to RawXMLMessageReceiver still appears to 
require <actionMapping> to determine which method to invoke. In axis1, the 
specified method would receive all messages for that service. Equivalent 
behavior should be available in axis2 regardless of the value of the 
wsa:Action header.

To further clarrify, the service I'm writing bridges between webservices 
and a non-Java object invocation mechanism. It dynamically determines what 
operations are allowed. This services does not know at deployment time 
what operations are possible. I therefore don't know all the wsa:Action 
header values that it might be included in request messages. Therefore I 
cannot declare <actionMapping> values in the service deployment 
descriptor. In case you're wondering, this service also dynamically 
generates WSDL to describe the discovered supported operations.

Is there a way to wildcard <actionMapping> to say that any action maps to 
a method? Or to avoid the requirement for specifying an actionMapping if 
RawXMLMessageReceiver is used.

Are there other approaches that could be used?




"Anne Thomas Manes" <at...@gmail.com> 
07/25/2006 02:06 PM
Please respond to
axis-user@ws.apache.org


To
axis-user@ws.apache.org
cc

Subject
Re: Axis1 style="message" in Axis2?






Use the RawXMLMessageReceiver.

On 7/25/06, David Melgar <dm...@us.ibm.com> wrote:
>
> I need to implement a message style web service in Axis2. In Axis1 wsdd,
> this would be a web service declared with
> <service name=xxx style="message">
>
> How do I declare the equivalent web service in Axis2? In addition, I 
will
> expect that WS-Addressing headers will be sent and received. From 
reading
> the Axis2 documentation, it looks like the <actionMapping> element is 
used
> to map an action header value to an operation name. In my case I want 
Axis2
> to always send me the body of the message. I do not want Axis2 to try 
and
> determine which operation is being invoked, I want it to send the 
message to
> a specific method all the time, as a message style service did in Axis1.
>
> I'm doing this because my service is mapping web service invocations of
> operations to another form of invocation on non-Java objects.
>
> Thanks

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org



Re: Axis1 style="message" in Axis2?

Posted by Anne Thomas Manes <at...@gmail.com>.
Use the RawXMLMessageReceiver.

On 7/25/06, David Melgar <dm...@us.ibm.com> wrote:
>
> I need to implement a message style web service in Axis2. In Axis1 wsdd,
> this would be a web service declared with
> <service name=xxx style="message">
>
> How do I declare the equivalent web service in Axis2? In addition, I will
> expect that WS-Addressing headers will be sent and received. From reading
> the Axis2 documentation, it looks like the <actionMapping> element is used
> to map an action header value to an operation name. In my case I want Axis2
> to always send me the body of the message. I do not want Axis2 to try and
> determine which operation is being invoked, I want it to send the message to
> a specific method all the time, as a message style service did in Axis1.
>
> I'm doing this because my service is mapping web service invocations of
> operations to another form of invocation on non-Java objects.
>
> Thanks

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org