Apache CXF is an open source services framework. CXF helps you build and develop services using frontend programming APIs, like JAX-WS and JAX-RS. These services can speak a variety of protocols such as SOAP, XML/HTTP, RESTful HTTP, or CORBA and work over a variety of transports such as HTTP, JMS or JBI.
One of the features of Apache CXF is WSDL-to-Java code generation with the cxf-codegen-plugin for Maven. You can use JAXB2 Basics Plugins from cxf-codegen-plugin to augment your generated code - for instance to generate equals or hashCode methods, add missing collection setters, make your generated classes extend certain super-classes or implement certain interfaces and so on.
In brief, the steps to integrate JAXB2 Basics plugins into your CXF builds are as follows:
- Add jaxb2-basics dependency to cxf-codegen-plugin
- Turn on JAXB2 Basics plugins using extraargs
- (If necessary) add jaxb2-basics-runtime dependency to your project
- (If necessary} add your customizations to the binding files
|Since version 0.6.0 JAXB2 Basics artifacts are distributed via the central Maven repository.|
In order to be able to use JAXB2 Basics plugins, you first have to make them available to CXF by adding the dependency to the cxf-codegen-plugin:
It's not enough to just add the dependency, you also need to explicitly activate the plugins you want to use. You can do this using the configuration/wsdlOptions/wsdlOption/extraargs/extraarg configuration element:
Plugin options must be prefixed with -xjc. For instance for the Equals plugin (which is normally activated by the -Xequals option) you'll have an -xjc-Xequals extraarg element. Other exmples would be:
And so on. Check the documentation of the JAXB2 Basics Plugins for available options.
Some of the JAXB2 Basics plugins generate code which depends on jaxb2-basics-runtime artifact. I.e. Equals, HashCode, ToString, Copyable and Mergeable generate code which uses interfaces and tools from jaxb2-basics-runtime. If you're using these plugins, make sure you add jaxb2-basics-runtime as dependency:
In some cases you may need to add customizations. Here's an example: