Just adding a few more comments as we have exactly this setup with our 
projects. We're using Maven and have a spring file 
(main-applicationContext.xml)under src/main/resources defining the jaxrs bean 
with the property placeholder as Sergey has
specified. This references a properties file with the actual address defined.

We've then got another Spring file (IntegrationTestsAppContext.xml) under 
src/integrationtest/resources which also has a property placeholder, pointing 
to another properties file with the local: address specified. This Spring file 
imports the main
Spring file (so we get all the jaxrs bean detail):

   <import
       resource="classpath:conf/spring/main-applicationContext.xml" />

and specifies this bean to enable local transport (we don't want this for live 
hence defining it in the integration test spring config).

       <bean class="org.apache.cxf.transport.local.LocalTransportFactory"
           lazy-init="false">
           <property name="transportIds">
               <list>
                   <value>http://cxf.apache.org/transports/local</value>
               </list>
           </property>
       </bean>

We then run our tests as follows:-

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:conf/spring/IntegrationTestsAppContext.xml" 
})
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class MyIntegrationTests {
   // Must match the overridden local endpoint.address
   private final static String ENDPOINT_ADDRESS = "local://abcd";

   @Test
   public void testStuff() throwsException {
   WebClient client = WebClient.create(ENDPOINT_ADDRESS);
       WebClient.getConfig(client).getRequestContext()
               .put(LocalConduit.DIRECT_DISPATCH, Boolean.TRUE);

       Response response = client
               .path("v1/some/path/to/your/service")
               .type(MediaType.APPLICATION_XML)
               .accept(MediaType.APPLICATION_XML)
               .matrix("date", "2013-11-30")
               .get(Response.class);

   // do some asserts on the response

}

CXF makes it very nice and easy!

Hope this helps

Mandy

Sent from a mobile device

> On 28 Nov 2013, at 10:59, Sergey Beryozkin <[email protected]> wrote:
> 
> Hi
>> On 27/11/13 18:22, David Karlsen wrote:
>> Hi.
>> 
>> I´ve looked at
>> https://cwiki.apache.org/confluence/display/CXF20DOC/JAXRS+Testing#JAXRSTesting-LocalTransportfor
>> information on howto test JAX-RS services.
>> 
>> I´d like the LocalTransport approach (so I don´t have to configure TCP
>> ports etc), but I´d like to use springs test support (@ContextConfiguration
>> etc) and only add the LocalTransport configuration.
>> 
>> I´d also like to reuse the spring context file as it will look when
>> using/packaging it into a .war, which looks like:
>> 
>>   <jaxrs:server address="/v1">
>>         <jaxrs:serviceBeans>
>>             <ref bean="trackService" />
>>             <ref bean="blobService" />
>>         </jaxrs:serviceBeans>
>>         <jaxrs:providers>
>>             <bean
>> class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
>>             <ref bean="serviceExceptionMapper" />
>>         </jaxrs:providers>
>>         <jaxrs:properties>
>>             <entry key="mtom-enabled" value="true" />
>>         </jaxrs:properties>
>>     </jaxrs:server>
>> 
>> Is it possible to configure only the LocalTransport stuff in my test, and
>> inject the configured Server from the context file with spring?
> The initialized server in this case will already HTTP Destination attached to 
> it by default, so you can try to parameterize either the address or 
> transportId attribute, for example, you'd have either
> 
> <jaxrs:server address="${prefix}/v1">
> 
> and default to "" and set to "local://" for tests
> 
> or
> 
> <jaxrs:server address="/v1" transportId=${transportId}>
> 
> default to "http://cxf.apache.org/transports/http"; and set to
> "http://cxf.apache.org/transports/local"; for tests.
> 
> I've update the wiki to show how to create the clients in the latter case:
> https://cwiki.apache.org/confluence/display/CXF20DOC/JAXRS+Testing
> (see at the end)
> 
> HTH, Sergey
> 
> 

Reply via email to