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

Reply via email to