/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.cxf.jaxrs.ext; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.Application; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Request; import javax.ws.rs.core.SecurityContext; import javax.ws.rs.core.UriInfo; import javax.ws.rs.ext.ContextResolver; import javax.ws.rs.ext.Providers; import javax.xml.bind.JAXBContext; import org.apache.cxf.endpoint.Endpoint; import org.apache.cxf.jaxrs.impl.HttpHeadersImpl; import org.apache.cxf.jaxrs.impl.HttpServletRequestFilter; import org.apache.cxf.jaxrs.impl.HttpServletResponseFilter; import org.apache.cxf.jaxrs.impl.ProvidersImpl; import org.apache.cxf.jaxrs.impl.RequestImpl; import org.apache.cxf.jaxrs.impl.SecurityContextImpl; import org.apache.cxf.jaxrs.impl.UriInfoImpl; import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.provider.ServerProviderFactory; import org.apache.cxf.message.Exchange; import org.apache.cxf.message.ExchangeImpl; import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageImpl; import org.apache.cxf.transport.http.AbstractHTTPDestination; import org.easymock.EasyMock; import org.junit.Assert; import org.junit.Test; public class MessageContextImplTest extends Assert { @Test public void testGetProperty() { Message m = new MessageImpl(); m.put("a", "b"); MessageContext mc = new MessageContextImpl(m); assertEquals("b", mc.get("a")); assertNull(mc.get("b")); } @Test public void testGetPropertyFromExchange() { Message m = new MessageImpl(); Exchange ex = new ExchangeImpl(); ex.put("a", "b"); ex.setInMessage(m); MessageContext mc = new MessageContextImpl(m); assertEquals("b", mc.get("a")); assertNull(mc.get("b")); } @Test public void testGetPropertyFromOtherMessage() { Message m1 = new MessageImpl(); Message m2 = new MessageImpl(); m2.put("a", "b"); Exchange ex = new ExchangeImpl(); ex.setInMessage(m1); ex.setOutMessage(m2); MessageContext mc = new MessageContextImpl(m1); assertEquals("b", mc.get("a")); assertNull(mc.get("b")); } @Test public void testGetUriInfo() { MessageContext mc = new MessageContextImpl(new MessageImpl()); assertSame(UriInfoImpl.class, mc.getUriInfo().getClass()); assertSame(UriInfoImpl.class, mc.getContext(UriInfo.class).getClass()); } @Test public void testGetRequest() { MessageContext mc = new MessageContextImpl(new MessageImpl()); assertSame(RequestImpl.class, mc.getRequest().getClass()); assertSame(RequestImpl.class, mc.getContext(Request.class).getClass()); } @Test public void testGetHttpHeaders() { MessageContext mc = new MessageContextImpl(new MessageImpl()); assertSame(HttpHeadersImpl.class, mc.getHttpHeaders().getClass()); assertSame(HttpHeadersImpl.class, mc.getContext(HttpHeaders.class).getClass()); } @Test public void testGetSecurityContext() { MessageContext mc = new MessageContextImpl(new MessageImpl()); assertSame(SecurityContextImpl.class, mc.getSecurityContext().getClass()); assertSame(SecurityContextImpl.class, mc.getContext(SecurityContext.class).getClass()); } @Test public void testProviders() { MessageContext mc = new MessageContextImpl(new MessageImpl()); assertSame(ProvidersImpl.class, mc.getProviders().getClass()); assertSame(ProvidersImpl.class, mc.getContext(Providers.class).getClass()); } @Test public void testHttpRequest() { Message m = createMessage(); MessageContext mc = new MessageContextImpl(m); HttpServletRequest request = EasyMock.createMock(HttpServletRequest.class); m.put(AbstractHTTPDestination.HTTP_REQUEST, request); assertSame(request.getClass(), ((HttpServletRequestFilter)mc.getHttpServletRequest()).getRequest().getClass()); assertSame(request.getClass(), ((HttpServletRequestFilter)mc.getContext(HttpServletRequest.class)).getRequest().getClass()); } @Test public void testHttpResponse() { Message m = createMessage(); MessageContext mc = new MessageContextImpl(m); HttpServletResponse request = EasyMock.createMock(HttpServletResponse.class); m.put(AbstractHTTPDestination.HTTP_RESPONSE, request); HttpServletResponseFilter filter = (HttpServletResponseFilter)mc.getHttpServletResponse(); assertSame(request.getClass(), filter.getResponse().getClass()); filter = (HttpServletResponseFilter)mc.getContext(HttpServletResponse.class); assertSame(request.getClass(), filter.getResponse().getClass()); } @Test public void testServletContext() { Message m = createMessage(); MessageContext mc = new MessageContextImpl(m); ServletContext request = EasyMock.createMock(ServletContext.class); m.put(AbstractHTTPDestination.HTTP_CONTEXT, request); assertSame(request.getClass(), mc.getServletContext().getClass()); assertSame(request.getClass(), mc.getContext(ServletContext.class).getClass()); } @Test public void testServletConfig() { Message m = createMessage(); MessageContext mc = new MessageContextImpl(m); ServletConfig request = EasyMock.createMock(ServletConfig.class); m.put(AbstractHTTPDestination.HTTP_CONFIG, request); assertSame(request.getClass(), mc.getServletConfig().getClass()); assertSame(request.getClass(), mc.getContext(ServletConfig.class).getClass()); } @SuppressWarnings("unchecked") @Test public void testContextResolver() { ContextResolver<JAXBContext> resolver = new CustomContextResolver(); ProviderFactory factory = ServerProviderFactory.getInstance(); factory.registerUserProvider(resolver); Message m = new MessageImpl(); Exchange ex = new ExchangeImpl(); m.setExchange(ex); ex.setInMessage(m); Endpoint e = EasyMock.createMock(Endpoint.class); e.get(ServerProviderFactory.class.getName()); EasyMock.expectLastCall().andReturn(factory); EasyMock.replay(e); ex.put(Endpoint.class, e); MessageContext mc = new MessageContextImpl(m); ContextResolver<JAXBContext> resolver2 = mc.getResolver(ContextResolver.class, JAXBContext.class); assertNotNull(resolver2); assertSame(resolver2, resolver); } @Test public void testNoContext() { MessageContext mc = new MessageContextImpl(createMessage()); assertNull(mc.getContext(Message.class)); } private Message createMessage() { ProviderFactory factory = ServerProviderFactory.getInstance(); Message m = new MessageImpl(); m.put("org.apache.cxf.http.case_insensitive_queries", false); Exchange e = new ExchangeImpl(); m.setExchange(e); e.setInMessage(m); Endpoint endpoint = EasyMock.createMock(Endpoint.class); endpoint.getEndpointInfo(); EasyMock.expectLastCall().andReturn(null).anyTimes(); endpoint.get(Application.class.getName()); EasyMock.expectLastCall().andReturn(null); endpoint.size(); EasyMock.expectLastCall().andReturn(0).anyTimes(); endpoint.isEmpty(); EasyMock.expectLastCall().andReturn(true).anyTimes(); endpoint.get(ServerProviderFactory.class.getName()); EasyMock.expectLastCall().andReturn(factory).anyTimes(); EasyMock.replay(endpoint); e.put(Endpoint.class, endpoint); return m; } public static class CustomContextResolver implements ContextResolver<JAXBContext> { public JAXBContext getContext(Class<?> type) { // TODO Auto-generated method stub return null; } } }