This got sent before I'd finished editing it - I also wanted to note that I plan to 
keep around the DOM option (Element[]) as well for folks who don't want to program to 
the JAXM APIs.

--Glen

-----Original Message-----
From: Glen Daniels
To: [EMAIL PROTECTED]
Sent: 4/10/2002 4:49 PM
Subject: Doc/lit and the MsgProvider - cleanup time!

Hi all:

I've started cleaning up the "message style" service architecture for
Axis, and
wanted to run some thoughts by the assembled masses for comments.

As I see it, there are three cases we want to support.

NOTE: In all of these cases, I think that there's the "give me the
envelope"
option and the "give me the body contents" option.  This is simply
specifying
your method as taking a SOAPEnvelope or a SOAPBodyElement[], i.e.:

  public SOAPBodyElement [] envMethod(SOAPEnvelope env);

  public SOAPBodyElement [] bodyMethod(SOAPBodyElement [] bodies);

The engine will figure out the right thing to do based on the method
signature
(during OperationDesc introspection).

Now, here are the cases (each containing sample WSDD):

1) Single method handling all messages.

<service name="singleMethod" style="message">
  <operation name="envMethod"/>
  (or equiv <allowedMethods>)
</service>

In this case, any message which comes in would pass the whole envelope
to
envMethod().

2) Element localName "automaps" to method name

<service name="automap" style="message">
  <allowedMethods>bodyMethod envMethod</allowedMethods>
  (or equiv <operation>s)
</service>

So in this case, <Body><bodyMethod>...</bodyMethod></Body> would end up
calling
bodyMethod() with the body elements, and
<Body><envMethod>...</envMethod></Body> would call envMethod() with the
whole
envelope.  Other XML would result in "no such method".

3) Arbitrary mapping of element QName -> method

<service name="mapped" style="message">
  <operation name="method1" qname="ns:someElement"
xmlns:ns="http://foo"/>
  <operation name="method2" qname="ns:otherElement"
xmlns:ns="http://foo"/>
</service>

In this case, bodyMethod() would get called when a message arrived which
looks
like:

 <Body>
   <foo:someElement xmlns:foo="http://foo";>...</foo:someElement>
 </Body>

In a similar way, foo:otherElement would call envMethod, and other
elements
would get "unrecognized element".

Note that this approach makes the following assumption - if there is a
single
<operation> or allowed method, we should funnel ALL messages to it.  If
there
is more than one, we should do a mapping (either the default localname
one, or
a specific one).  It may be that there is a case where you have a single
method
that you want to accept a single body QName and fault on others - if so,
we'd
need to define another way of doing that (i.e. an "acceptAll" attribute
on the
<operation> to indicate the non-matching case).

QUESTIONS:

Are these the right options?

Does the suggested WSDD make sense?

Thanks for your input!

--Glen

Reply via email to