Hi devs,

As most of you might know we (Chinthaka and myself) created a branch [1] to
work on Axis2 to improve it for WSDL 2.0 support. We have successfully
completed most of the work now. The rest can be completed within a week or
so.  So we thought we better discuss  the  changes we had to do before
merging the branch to the trunk. We had to do a couple of notable changes to
Axis2 in order to  do the improvements in a cleaner way. We did not want to
hack axis2 to provide WSDL 2 support.

The following briefing might help those who are not very familiar with WSDL
2.0.

Approximate mapping of WSDL 2.0 components to WSDL 1.1
Note : This mapping is just for explanatory purposes.

WSDL 2.0                     WSDL 1.1

endpoint                     port
binding                       binding
interface                     portType


WSDL 2.0 uses lots of defaulting rules and thrives on the principle of reuse
(Which enables the user to write a WSDL 2.0 document without specifying too
many things). A service can have multiple endpoints, an endpoint has a
single binding (a binding may be used by several endpoints). A binding may
be bound to an interface (Generic Bindings can also exist where the binding
is not bound to an interface).

In order to maximize the benefits of WSDL is it clear that axis2 needs to
support multiple endpoints. Currently axis2 does not support multiple
services or multiple endpoints. Axis2 just processors the first endpoint and
deploys the service. While integrating WSDL 2.0 support to axis2 it was
clear that we needed to support multiple endpoints.

*Proposal for supporting multiple endpoints.*

Introduce the following classes (class diagram attached)

AxisEndpoint - Hold information about an endpoint

AxisBinding - Hold information about a Binding

AxisBindingOperation - Hold information about a binding operation.
AxisOperation will hold general information  pertaining to an operation .
All additional information (Binding specific information) will be captured
by this class. It will also have a link to its corresponding AxisOperation.

AxisBindingMessage - Hold information about a binding Message. AxisMessage
will hold general information  pertaining to
a message . All additional information (Binding specific message
information) will be captured by this class. It will also have a
link to its corresponding AxisMessage

In correspondence to the inclusion of the new binding hierarchy,
WSDL20ToAxisServiceBuilder and WSDL11ToAxisServiceBuilder will have to be
updated to pump the new classes. (We have already updated
WSDL20ToAxisServiceBuilder.  WSDL11ToAxisServiceBuilder is in the process of
been updated). Also AxisServiceBasedMultiLanguageEmitter will have to be
updated to draw information from the new binding hierarchy (This has also
been completed).

**Effects on Dispatching**

With the introduction of multiple endpoints we should have a way of
dispatching messages to the correct endpoints now. The mechanism we used was
to have the default URIs as
$Prefix/ServiceName.EndpointName[/OperationName][/Other Stuff]. It will be
nice if we can include something like

<endpoints>
   <endpoint alias="NSPath" name="" />*
</endpoints>?

in the services.xml. which will make the request url look like
$Prefix/alias[/OperationName][/Other Stuff]

We have updated RequestURIBasedDispatcher to dispatch messages to the
correct endpoint based on the above. The allServices map in
AxisConfiguration has been updated to map ServiceName.EndpointName to the
corresponding  AxisService. Once we find the correct AxisService we add the
name of the endpoint (the endpoint that the message came to) as a property
to the message context.

We would like to know your comments on this before going ahead and merging
the WSDL 2.0 branch to the trunk.

[1] :
https://svn.apache.org/repos/asf/webservices/axis2/branches/java/WSDL_2_0
<https://svn.apache.org/repos/asf/webservices/axis2/branches/java/WSDL_2_0><https://svn.apache.org/repos/asf/webservices/axis2/branches/java/WSDL_2_0>

Thanks,
Keith

<<attachment: classDiagram.jpg>>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to