Sergey,

Thank you for the quick response!

I'm using cxf-spring-boot-starter-jaxrs 3.1.7 with Spring Boot 1.3.3.RELEASE.

You only have to add the XML using @ImportResource, then it is working immediately:

@ImportResource({"classpath:/mySpringContext.xml"})
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer {

    @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }


}

We have lots of existing spring XML configurations so we like to reuse them.

Inside the XML configuration the JacksonProvider is declared and connected to the endpoints:

<bean id="jsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />

 <jaxrs:server id="restServer" address="/myservice">
        <jaxrs:serviceBeans>
            <ref bean="myController" />
        </jaxrs:serviceBeans>
        <jaxrs:providers>
            <ref bean="jsonProvider" />
            <ref bean="wadlGenerator" />
        </jaxrs:providers>
        <jaxrs:features>
            <ref bean="swagger2Feature" />
        </jaxrs:features>
    </jaxrs:server>

So the Jackson Provider should be picked up when the Spring configuration is used by the Spring Boot starter.

In fact, I think the @Xml..-annotations in the model classes are causing the issue (generated using wadl2java). If you like, I can provide a sample using wadl2java generated classes based on your sample (spring_boot_scan) and try to reproduce the issue.

Best regards,
Johannes


Am 17.08.2016 um 18:52 schrieb Sergey Beryozkin:
Hi

To be honest I'm not sure traditional Spring XML configuration files are even supported with Spring Boot ? (XML is the old citizen, properties is the new citizen :-)), but if it is then let me know how.

Are you using CXF 3.1.7 Spring Boot starter ?

I think you need to have a @Bean method returning
new JacksonJsonProvider()

It can also be auto-scanned - but I found in my experiments that muiltiple Jackson providers can be picked up, so I'd rather return an instance from the code

Sergey
On 17/08/16 17:40, J. Fiala wrote:
I try to run a CXF JAX-RS endpoint using Spring XML configuration and
Spring Boot.

The services are listed correctly when I access the server and the
WADL/Swagger endpoint is generated correctly:

http://localhost:8080/services/

The API methods are annoted with:
    @Consumes("application/json")
    @Produces("application/json")

However, when I invoke any service using Json, I get:

|JAXBException occurred : unable to marshal type "..." as an element
because it is missing an @XmlRootElement annotation. unable to marshal
type "..." as an element because it is missing an @XmlRootElement
annotation. |

I'm using wadl2java to generate the api and model classes at server side
from the WADL, so there are @XmlAccessorType/@XmlType annotation in my
model classes on the server side.

Spring-Boot/CXF seems ignore the provider configured in the Spring
configuration XML (which is working perfectly if deployed without Spring
Boot to e.g. Jboss/Tomcat):
<bean id="jsonProvider"
class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />

How can I set the JacksonJsonProvider to be used by Spring Boot/CXF, or
are model classes annotated with @Xml... not supported for Spring Boot/CXF?

Best regards,
Johannes





Reply via email to