Hi everybody,

today I upgraded an application from cxf 2.5.5 to 2.7.11 and encountered a 
small obstacle in the JAXRSServerFactoryBean. 

The application uses spring and initializes a lot of endpoints and clients in 
the test cases through some common spring configuration files that use the 
jaxrs namespace and the jaxrs:server tag. In the test case the factories are 
reconfigured and create is explicitly called and depending on the test case 
stop at different times in the process.

The problem I ran into was that in the past it seems the default value of the 
JAXRSServerFactoryBean variable "start" was false. 

So the Junit test cases fetched the pre-configured  JAXRSServerFactoryBean like 
this:

final JAXRSServerFactoryBean sfserver = (JAXRSServerFactoryBean) 
applicationContext.getBean("beanname");

modified it for the specific test case and then creates a Server by calling

final Server server = sfserver.create(); 

the problem now is that with the default value of "start" set to true as it is 
now the JAXRSServerFactoryBeanDefinitionParser builds the 
JAXRSServerFactoryBean and immediately calls "init()" which calls "create()" 
and creates the server and starts it during the initialization of the spring 
context.
 
If now the Junit test calls "create()" a second time to fetch the Server 
instance "create()" throws a runtime exception because the port is already in 
use. But the JAXRSServerFactoryBean provides no getter for  the "server" member 
nor does the schema provide me a way to set "start" to false. Or at least I did 
not see it.


Right now I partly solved this by reflection but that's not a long term 
solution:

final JAXRSServerFactoryBean sfserver = (JAXRSServerFactoryBean) 
applicationContext.getBean("syncRSserver");
// final Server masterServer = sfserver.create();
final Field serverField = 
JAXRSServerFactoryBean.class.getDeclaredField("server");
serverField.setAccessible(true);
final Server masterServer = (Server) serverField.get(sfserver);

//some test case logic

masterServer.stop();

//more test case logic


Maybe I did miss a way to fetch the server from the factory bean and  thanks 
for any other suggestions.
Greetings
Matthias

Reply via email to