You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Johannes Fiala <jo...@fwd.at> on 2016/10/23 16:10:37 UTC
CXF Spring Boot integration tests with BeanValidation -
ValidationException occurs after successful call
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
Re: CXF Spring Boot integration tests with BeanValidation -
ValidationException occurs after successful call
Posted by ramunask <ra...@gmail.com>.
Using of "org.apache.cxf.jaxrs.validation.JAXRSBeanValidationFeature" instead
of "org.apache.cxf.validation.BeanValidationFeature" for me solved the
issue.
--
View this message in context: http://cxf.547215.n5.nabble.com/CXF-Spring-Boot-integration-tests-with-BeanValidation-ValidationException-occurs-after-successful-cal-tp5774306p5779840.html
Sent from the cxf-user mailing list archive at Nabble.com.
Re: CXF Spring Boot integration tests with BeanValidation -
ValidationException occurs after successful call
Posted by "J. Fiala" <mo...@fwd.at>.
Hi,
Thank you, moving the validationFeature to the endpoint did the job
perfectly!
Best regards,
Johannes
Am 24.10.2016 um 14:11 schrieb Sergey Beryozkin:
> Or register the validation feature directly on the server endpoint
>
> Sergey
> On 24/10/16 13:10, Sergey Beryozkin wrote:
>> 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
>>
>
>
Re: CXF Spring Boot integration tests with BeanValidation -
ValidationException occurs after successful call
Posted by Sergey Beryozkin <sb...@gmail.com>.
Or register the validation feature directly on the server endpoint
Sergey
On 24/10/16 13:10, Sergey Beryozkin wrote:
> 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
>
--
Sergey Beryozkin
Talend Community Coders
http://coders.talend.com/
Re: CXF Spring Boot integration tests with BeanValidation -
ValidationException occurs after successful call
Posted by Sergey Beryozkin <sb...@gmail.com>.
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
Re: CXF Spring Boot integration tests with BeanValidation -
ValidationException occurs after successful call
Posted by "John D. Ament" <jo...@apache.org>.
Can you share the implementation of HelloApi?
On Oct 24, 2016 07:36, "Johannes Fiala" <jo...@fwd.at> 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.validati
> on.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.checkN
> otNull(BeanValidationInInterceptor.java:49) ~[cxf-core-3.1.7.jar:3.1.7]
> at org.apache.cxf.validation.BeanValidationInInterceptor.getSer
> viceObject(BeanValidationInInterceptor.java:38)
> ~[cxf-core-3.1.7.jar:3.1.7]
> at org.apache.cxf.validation.AbstractValidationInterceptor.hand
> leMessage(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$WrappedOutputStrea
> m.handleResponseInternal(HTTPConduit.java:1670)
> [cxf-rt-transports-http-3.1.7.jar:3.1.7]
> at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStrea
> m.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$MessageS
> enderEndingInterceptor.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
>