Hi,

I am running some unit tests using local transport to see what happens when
an interceptor throws a Fault. I was expecting to get a Response back with
a status code of 500 but instead I get this:

javax.ws.rs.client.ClientException: java.lang.NullPointerException
>     at
> org.apache.cxf.jaxrs.client.AbstractClient.setResponseBuilder(AbstractClient.java:374)
>     at
> org.apache.cxf.jaxrs.client.WebClient.handleResponse(WebClient.java:1101)
>     at
> org.apache.cxf.jaxrs.client.WebClient.doResponse(WebClient.java:1088)
>     at
> org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1038)
>     at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:858)
>     at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:832)
>     at org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:395)
>     at org.apache.cxf.jaxrs.client.WebClient.get(WebClient.java:574)
>

My test setup is as follows:-

I declare a DummyInterceptor which throws a Fault..

public class DummyInterceptor extends AbstractPhaseInterceptor<Message> {
>
>     public DummyInterceptor() {
>         super(Phase.MARSHAL);
>     }
>
>     public void handleMessage(Message message) throws Fault {
>         throw new Fault(new RuntimeException("hello from runtime
> exception"));
>     }
> }
>

My test case configures local transport & registers the DummyInterceptor

    @Before
>     public void setup() {
>         // enable local transport
>         bus = BusFactory.newInstance().createBus();
>         LocalTransportFactory localTransport = new LocalTransportFactory();
>         DestinationFactoryManager dfm = bus
>                 .getExtension(DestinationFactoryManager.class);
>         dfm.registerDestinationFactory("
> http://schemas.xmlsoap.org/soap/http";,
>                 localTransport);
>         dfm.registerDestinationFactory(
>                 "http://schemas.xmlsoap.org/wsdl/soap/http";,
> localTransport);
>         dfm.registerDestinationFactory(
>                 "http://cxf.apache.org/bindings/xformat";, localTransport);
>         dfm.registerDestinationFactory(
>                 "http://cxf.apache.org/transports/local";, localTransport);
>
>         ConduitInitiatorManager extension = bus
>                 .getExtension(ConduitInitiatorManager.class);
>         extension.registerConduitInitiator(
>                 "http://cxf.apache.org/transports/local";, localTransport);
>         extension.registerConduitInitiator(
>                 "http://schemas.xmlsoap.org/wsdl/soap/http";,
> localTransport);
>         extension.registerConduitInitiator(
>                 "http://schemas.xmlsoap.org/soap/http";, localTransport);
>         extension.registerConduitInitiator(
>                 "http://cxf.apache.org/bindings/xformat";, localTransport);
>
>         // create a local endpoint
>         sf = new JAXRSServerFactoryBean();
>         sf.setBus(bus);
>         sf.setAddress(LOCAL_ADDRESS);
>         sf.setServiceBean(new SimpleRestServiceImpl());
>         sf.setServiceClass(SimpleRestServiceImpl.class);
>     }
>
>     @After
>     public void teardown() throws Exception {
>         if (null != jaxrsServer) {
>             // explicitly stop server
>             jaxrsServer.destroy();
>         }
>         if (null != bus) {
>             // shutdown the bus
>             bus.shutdown(false);
>         }
>     }
>
>     @Test
>     public void
> testExceptionWhichOccursWithinAnOutboundFrameworkInterceptorReturnsAppropriateException()
>             throws Exception {
>
>         // register the DummyInterceptor which throws an exception
>         List<Interceptor<? extends Message>> outInterceptors = new
> ArrayList<Interceptor<? extends Message>>(
>                 1);
>         outInterceptors.add(new DummyInterceptor());
>
>         sf.setOutInterceptors(outInterceptors);
>
>         // start the server
>         jaxrsServer = sf.create();
>
>         WebClient client = WebClient.create(LOCAL_ADDRESS);
>         WebClient.getConfig(client).getRequestContext()
>                 .put(LocalConduit.DIRECT_DISPATCH, Boolean.TRUE);
>
>         try {
>             Response response = client
>                     .path("v1/greetings/aveeeeename")
>                     .type(MediaType.APPLICATION_JSON)
>                     .accept(MediaType.APPLICATION_JSON)
>                     .get(Response.class);
>             assertEquals(500, response.getStatus());
>         } finally {
>             if (null != client) {
>                 client.close();
>             }
>         }
>     }
>

I am using apache cxf version 2.7.4

Any help much appreciated

Thanks

Mandy

Reply via email to