cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Beryozkin <sberyoz...@gmail.com>
Subject Re: CXF Spring Boot integration tests with BeanValidation - ValidationException occurs after successful call
Date Mon, 24 Oct 2016 12:10:01 GMT
Hi

This is caused by the fact that a server-scoped feature is visible to a 
client because this feature is set on a bus visible to the client.

I've just updated the code for this feature be explicitly marked as a 
Server scoped feature - but it will only help for now if the features 
are auto-discovered. The CXF core code may need to be updated to exclude 
the CXF providers which are out of scope (ex, the server is being 
initialized and a client only feature is available or vice versa)

I'll have a look at it a bit later on

For now create a dedicated bus for the client test code

Thanks, Sergey


On 23/10/16 17:10, Johannes Fiala wrote:
> Hi there,
>
> cxf-spring-boot-starter-jaxrs: 3.1.7
>
> I tried using Spring Boot CXF in combination with Spring Boot
> integration tests (running as a Spring Boot application everything runs
> fine without exceptions):
>
> As soon as the BeanValidation Feature is enabled:
>
> <bean id="commonValidationFeature"
> class="org.apache.cxf.validation.BeanValidationFeature"/>
>
> <cxf:bus>
>         <cxf:features>
>             <ref bean="commonValidationFeature" />
>         </cxf:features>
> </cxf:bus>
>
> running an integration test
>
> ============================
>
> @RunWith(SpringJUnit4ClassRunner.class)
> @SpringApplicationConfiguration(classes = SpringBootApplication.class)
> @WebAppConfiguration
> @IntegrationTest("server.port=0")
> public class HelloApiTest {
>
>     @Value("${local.server.port}")
>     private int serverPort;
>
>     private HelloApi api;
>
>     @Before
>     public void setup() {
>         JacksonJsonProvider provider = new JacksonJsonProvider();
>         List providers = new ArrayList();
>         providers.add(provider);
>
>         api = JAXRSClientFactory.create("http://localhost:" + serverPort
> + "/services/services", HelloApi.class,
>                 providers);
>         org.apache.cxf.jaxrs.client.Client client = WebClient.client(api);
>
>  }
>
>     @Test
>     public void helloPostTest() {
>         String name = "name";
>
>         String response = api.sayHello(name);
>         System.out.println("response: " + response);
>         assertNotNull(response);
>     }
>
> ============================
>
>
> will show the following error after the response has been received (the
> test itself is green, a valid response is received):
>
> 2016-10-23 17:54:37.145 ERROR 4556 --- [           main]
> o.a.c.v.AbstractValidationInterceptor    : Service Object is null
> 2016-10-23 17:54:37.148  WARN 4556 --- [           main]
> o.a.cxf.phase.PhaseInterceptorChain      : Interceptor for
> {http://api.swagger.io/}HelloApi has thrown exception, unwinding now
>
> javax.validation.ValidationException: Service Object is null
>     at
> org.apache.cxf.validation.BeanValidationInInterceptor.checkNotNull(BeanValidationInInterceptor.java:49)
> ~[cxf-core-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.validation.BeanValidationInInterceptor.getServiceObject(BeanValidationInInterceptor.java:38)
> ~[cxf-core-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.validation.AbstractValidationInterceptor.handleMessage(AbstractValidationInterceptor.java:59)
> ~[cxf-core-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
> [cxf-core-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.jaxrs.client.ClientMessageObserver.onMessage(ClientMessageObserver.java:56)
> [cxf-rt-rs-client-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1670)
> [cxf-rt-transports-http-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1551)
> [cxf-rt-transports-http-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1348)
> [cxf-rt-transports-http-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:56)
> [cxf-core-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:216)
> [cxf-core-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
> [cxf-core-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:651)
> [cxf-rt-transports-http-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
> [cxf-core-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
> [cxf-core-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.jaxrs.client.AbstractClient.doRunInterceptorChain(AbstractClient.java:666)
> [cxf-rt-rs-client-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:744)
> [cxf-rt-rs-client-3.1.7.jar:3.1.7]
>     at
> org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:231)
> [cxf-rt-rs-client-3.1.7.jar:3.1.7]
> response: Hello name
>
> This is not causing any errors, its only a bit odd to see the exception
> in the tests...
>
> Best regards,
> Johannes


Mime
View raw message