I ended up implementing this via a ContainerRequestFilter:
package org.example.filters;
import org.example.engine.Engine;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.Response;
import java.io.IOException;
public class OfflineModeFilter implements ContainerRequestFilter{
private Engine engine;
public void setEngine(Engine engine){
this.engine = engine;
}
@Override
public void filter(ContainerRequestContext requestContext) throws
IOException{
if (engine.isOfflineMode()){
requestContext.abortWith(Response.status(Response.Status.SERVICE_UNAVAILABLE)
.entity("engine offline").build()
);
}
}
}
...and injecting the engine via Blueprint:
<blueprint xmlns...>
<jaxrs:server id="restService" address="/">
<jaxrs:providers>
<bean class="org.example.filters.OfflineModeFilter">
<property name="engine" ref="engineSvc"/>
</bean>
</jaxrs:providers>
</jaxrs:server>
<reference id="engineSvc" interface="org.example.engine.Engine"
availability="mandatory"/>
</blueprint>
-Max
On 02/20/2018 02:29 PM, Max Spring wrote:
I'm using CXF 3.1.3 with Karaf 3.0.5.
I have a engine which exposes its functionality via REST.
My engine takes some time to properly start up.
I would like all my REST functions to always return 503 (Service Unavailable)
while the OSGi container and my engine is starting up,
until my engine declares "up".
Is there such a global flag to control CXF REST?
Thanks!
-Max