Why not have a version of the createService() method in the
ServiceFactoryBeans (ReflectionServiceFactoryBean,
JaxwsServiceFactoryBean etc, i.e. in an abstract base) that takes a
bindingId as a parameter - which replaces/supersedes the namespace of
the first child element of the wsdl:binding element that would be used
in the wsdl first approach.
Applicaton code then does not have to be aware of the
manager-factory-work pattern - only the factory beans have to.
This would also be helpful to build a service model and an endpoint from
wsdls that do not actually contain a binding elements, e.g. wsrm.wsdl.
<http://schemas.xmlsoap.org/ws/2005/02/rm/wsdl/wsrm.wsdl>
Andrea.
Dan Diephouse wrote:
OK, hopefully this will be the last time I respond to my own message
:-) I think there is also a third option:
JaxWsServiceFactoryBean serviceFactory = ...;
....
BindingInfoFactoryManager bifm = ...
BindingInfoFactory bif = bifm.getBindingInfoFactory("namespace");
bif.createBinding(serviceFactory);
Where createBinding creates a binding on serviceFactory.getService();
Though I do get sick of all this indirection: Manager->Factory->Work,
this whole pattern seems to becoming really prevalent in our
architecture and it seems there should be a Better Way....
- Dan
Dan Diephouse wrote:
One other small issue, if we go with the manager approach it needs to
create a new BindingInfoFactory when someone requests one as
BindingInfoFactorys are stateful. So it'd be:
void registerBindingInfoFactoryBean(String name, Class
bindInfoFactoryBeanClass);
as opposed to:
void registerBindingInfoFactoryBean(String name,
AbstractBindingInfoFactoryBean bindInfoFactoryBean);
Cheers,
- Dan
Dan Diephouse wrote:
I spent a bit of time looking at this today, and as I said earlier,
I'm not sure that the manager approach is the right one. But I'm not
sure what the right one is either :-). I like the discovery portion
of the manager approach, but I think the bindinginfofactories do
need to be coupled to the frontends and I also think there is some
power in the approach where you can do:
sf = new ServerFactoryBean()
bif = new SoapBindingInfoFactoryBean();
bif.setStyle("document");
sf.setBindingInfoFactory(bif);
that is, I like how you can set up the binding easily via the API &
getters/setters.
I'm wondering what the solution might be and here's what I've come
up with so far...
1. Keep the bean style approach and either a) require jax-ws to have
specific knowledge of the bindinginfofactory or b) have the user use
our internal APIs to specify their own bindinginfofactory
2. Have some sort of manager in the simple/jax-ws frontend
I guess the two approaches don't have to be opposed. That is we
could try looking up a BindingInfoFactory from the manager or the
user could also specify their own.
Thoughts? Other ideas?
- Dan
Dan Diephouse wrote:
[EMAIL PROTECTED] wrote:
Author: ningjiang
Date: Mon Oct 16 05:54:27 2006
New Revision: 464472
URL: http://svn.apache.org/viewvc?view=rev&rev=464472
Log:
[JIRA CXF-18] PhaseTow: Implemented BindingInfoFactoryBeanManager
to load the BingInfoFactoryBean just like BingFactoryManager.
Moved AbstractBindingInfoFactoryBean.java form frontend/simple to
api Moved SoapBindingInfoFactoryBean.java form frontend/simple to
SoapBinding
Added XMLBindingInfoFactoryBean.java for creating XMLBinding in
codefirst mode.
Finally got around to looking at this change and I'm not real keen
on it.
BindingInfoFactorys are highly tied to front ends and
servicefactorys. For instance, in the Jax-Ws module we need a
version of the SoapBindingInfoFactory which looks at the
@SOAPBinding annotations. So it will need access to the information
the service factory. We can't remove the setServiceFactory() method
from the BindingInfoFactoryBean and replace it with the
setService(). It is JAX-WS that needs to know about SOAP, not SOAP
that needs to know about JAX-WS.
I do understand that some discovery mechanism may be needed but I
think trying to promote this as a top level concept isn't the right
approach. I'm going to take a look a refactoring this a bit.
Cheers,
- Dan