We must be able to separate interface from Stub implementation when generating
code
-----------------------------------------------------------------------------------
Key: AXIS2-4018
URL: https://issues.apache.org/jira/browse/AXIS2-4018
Project: Axis 2.0 (Axis2)
Issue Type: Bug
Components: adb, codegen
Reporter: Glen Daniels
I was just running through some slides and tests re: Axis2 codegen when I
suddenly realized that we don't currently have the ability to separate out a
client-side abstract interface for the abstract part of a WSDL when doing
wsdl2java.
I searched JIRA and, unbelievably, didn't see anything quite like this, but
please add to this if you know of another open issue on this topic.
This is doubleplus ungood, folks. The whole point of "loose coupling" via
bindings in WSDL is precisely so I can program to the abstract interface and
not care what the actual implementation is. I want that same flexibility to
reflect itself in the generated Java. Right now, if you tell wsdl2java to
generate code for all ports, we get multiple Stubs which are all completely
separate and do not share a common interface!! :(
We need to discuss exactly how this should look, and then switch to doing it
this way BY DEFAULT (IMO).
My proposal would be - "wsdl2java foo.wsdl" (assuming that contains a single
portType and N bindings/ports) should generate three things:
1) A Java interface Foo reflecting the portType in the abstract, which all
concrete Stubs implement
2) A FooFactory for obtaining an implementation of said interface. The factory
has methods like:
public Foo getFoo();
public Foo getFoo(String address);
public Foo getFooByEndpointName(String endpintName);
public Foo getFoo(Context ctx);
The context parameter is basically a Map which contains arbitrary info to
help the factory decide what to do.
3) The actual concrete FooSOAP11Stub (for instance).
The factory needs a plugin API so that new stubs can be dynamically added, and
this API is how the concrete stubs hook themselves into the creation logic.
To be clear - the goal is to be able to generate a SINGLE interface for a WSDL
portType/interface that client code can be written to use, independent of
binding type, policies, etc. After I've already generated some stubs, I should
be able to generate code for a brand new WSDL containing a new binding of the
same interface, and (assuming I run wsdl2java in the same directory I used the
first time) it should end up just generating a new concrete stub class and
hooking that in to the existing Factory class so it can be accessed.
Thoughts?
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]