AbstractTransportFactory registers itself as extension, before being fully
initialized
--------------------------------------------------------------------------------------
Key: CXF-4066
URL: https://issues.apache.org/jira/browse/CXF-4066
Project: CXF
Issue Type: Bug
Affects Versions: 2.5.2, 2.4.5
Reporter: Vitaliy Garnashevich
AbstractTransportFactory calls register() at the end of its constructor, to
register itself as a DestinationFactory and/or as a ConduitInitiator. Classes
that extend AbstractTransportFactory (e.g. HTTPTransportFactory), and which
call super's constructor, have no way to properly initialize, before being
exposed as an extension. Such classes must call super() constructor, before
initializing their fields.
This could lead to concurrency issues, when such object is used as an
extension, before being fully initialized. Here is a stack trace of such
problem:
java.lang.NullPointerException
at
org.apache.cxf.transport.http.HTTPTransportFactory.getDestination(HTTPTransportFactory.java:261)
at
org.apache.cxf.binding.soap.SoapTransportFactory.getDestination(SoapTransportFactory.java:134)
at
org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:93)
at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:72)
at
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:158)
at
org.apache.cxf.dosgi.dsw.handlers.PojoConfigurationTypeHandler.createServer(PojoConfigurationTypeHandler.java:143)
at
org.apache.cxf.dosgi.dsw.hooks.ServiceHookUtils.createServer(ServiceHookUtils.java:86)
at
org.apache.cxf.dosgi.dsw.hooks.CxfPublishHook.createServer(CxfPublishHook.java:106)
at
org.apache.cxf.dosgi.dsw.hooks.CxfPublishHook.publishEndpoint(CxfPublishHook.java:80)
at org.apache.cxf.dosgi.dsw.Activator$1.run(Activator.java:164)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Here, the HTTPTransportFactory.getDestination() method, implementing
DestinationFactory interface, is called before HTTPTransportFactory's
"registry" field is assigned by constructor.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira