CAMEL-10914: CxfConsumer doesn't clean up the CXF endpoint MBean upon stop
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
index 43561ba..6330fd2 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
@@ -63,28 +63,39 @@
public CxfConsumer(final CxfEndpoint endpoint, Processor processor) throws Exception {
super(endpoint, processor);
cxfEndpoint = endpoint;
- // create server
- ServerFactoryBean svrBean = endpoint.createServerFactoryBean();
- svrBean.setInvoker(new CxfConsumerInvoker(endpoint));
- server = svrBean.create();
- // Apply the server configurer if it is possible
+ server = createServer();
+ }
+
+ protected Server createServer() throws Exception {
+ ServerFactoryBean svrBean = cxfEndpoint.createServerFactoryBean();
+ svrBean.setInvoker(new CxfConsumerInvoker(cxfEndpoint));
+ Server server = svrBean.create();
+ // Apply the server configurer if it is possible
if (cxfEndpoint.getCxfEndpointConfigurer() != null) {
cxfEndpoint.getCxfEndpointConfigurer().configureServer(server);
}
- if (ObjectHelper.isNotEmpty(endpoint.getPublishedEndpointUrl())) {
- server.getEndpoint().getEndpointInfo().setProperty("publishedEndpointUrl", endpoint.getPublishedEndpointUrl());
+ if (ObjectHelper.isNotEmpty(cxfEndpoint.getPublishedEndpointUrl())) {
+ server.getEndpoint().getEndpointInfo().setProperty("publishedEndpointUrl", cxfEndpoint.getPublishedEndpointUrl());
}
+ return server;
}
@Override
protected void doStart() throws Exception {
super.doStart();
+ if (server == null) {
+ server = createServer();
+ }
server.start();
}
@Override
protected void doStop() throws Exception {
- server.stop();
+ if (server != null) {
+ server.stop();
+ server.destroy();
+ server = null;
+ }
super.doStop();
}