Hi *,
We happen to have a bug in WildFly Camel (WFC), that is caused by a race
between camel-cxf and jboss-ws subsystem both wanting to set
BusFactory.defaultBus and the default thread local bus.
To fix it, I want to leave jboss-ws to rule the BusFactory and rather
set the CxfRsEndpoint.bus explicitly from our WFC subsystem, so that the
BusFactory defaults broken by jboss-ws are not used. To do that, I was
hoping to use either EndpointStrategy.registerEndpoint(String, Endpoint)
or LifecycleStrategy.onEndpointAdd(Endpoint).
It turned out that none of the two callbacks is called for endpoints
created by a direct invocation of the CxfRsEndpoint constructor, which I
happened to be using in one of my tests:
CxfRsComponent cxfConsumerComponent = new CxfRsComponent(camelContext);
CxfRsEndpoint cxfConsumerEndpoint = new
CxfRsEndpoint(CXF_ENDPOINT_BASE_URI, cxfConsumerComponent);
If I change the above to
CxfRsEndpoint cxfConsumerEndpoint = camelContext.getEndpoint("cxfrs:" +
CXF_ENDPOINT_BASE_URI, CxfRsEndpoint.class);
both callback are invoked properly.
I found no other way how I could set CxfRsEndpoint.bus between the
CxfRsEndpoint creation and the call to CxfRsConsumer.createServer()
where CxfRsEndpoint.bus should be used.
Is it a known issue that EndpointStrategy.registerEndpoint() and
LifecycleStrategy.onEndpointAdd() are not called for endpoints created
by direct invocation of the endpoint constructor?
I tend to think that it is a design flaw. Once the API offers the
callbacks it should also guarantee that endpoints cannot avoid those
callbacks.
If this is really a defect of some sort, I can file a Jira.
Please utter your opinions.
Thanks,
-- Peter