This is possibly a duplicate of this question ( Avoiding Compiler warnings on code generated by xjc ) but since I am not very well versed in XJC/JAXB custom bindings idiosyncrasies, I'll presume I may have misunderstood the mentioned question.
My question seems simple enough - how can I add @SuppressWarnings("all")
annotation to generated JAXB class? We have 0 warning policy on our project and after JAXB generation step, we end up with 350+ warnings which are just terrible noise.
I would expect either a simple flag on the XJC or at least an easy way to provide such info but I cannot find any.
From what I've seen in my travels, people do one of these things:
Formerly, we dealt with this by shoving the XML-related code in a separate Eclipse project and then disabling the warnings/errors on the project. Now, as part of code consolidation/refactoring, we've reshuffled things around and no longer have that luxury.
Is there really no elegant solution for such a seemingly trivial problem? Any feedback/thoughts are greatly appreciated.
FWIW, our project uses Ant as build system.
You have to use this plugin : jaxb2-annotate-plugin
2 solutions :
1 - Modify your xsd and add this kind of block
<xsd:element name="foobar" type="xsd:string">
<xsd:annotation>
<xsd:appinfo>
<annox:annotate>@java.lang.SuppressWarnings("all")</annox:annotate>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
2 - Create a custom binding
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:annox="http://annox.dev.java.net"
xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
jaxb:extensionBindingPrefixes="xjc annox"
version="2.1">
<jaxb:bindings schemaLocation="schema.xsd" node="/xs:schema">
<annox:annotate target="class">@java.lang.SuppressWarnings("all")</annox:annotate>
</jaxb:bindings>
</jaxb:bindings>
Disclaimer : I am the author of the jaxb2-annotate-plugin mentioned in @ToYonos answer.
This is not a standalone answer but rather an addition to @ToYonos answer.
I would like to address the following point from the question.
- Annox plugin from Atlassian's JAXB2 Basics framework/project (according to examples, seems to do the job but to add a whole framework and hundreds of kB of code just to add simple annotation to a bunch of classes? Really??),
I just need to add a few notes:
jaxb2-annotate-plugin
was moved to a standalone project , it is not longer part of JAXB2 Basics . It just got too large and deserved to be a standalone thing. jaxb2-annotate-plugin
does not require or add ANY runtime dependencies to your code . If you annotations have runtime retention, you'll need the classes of your annotations in runtime, but it should be obvious. jaxb2-annotate-plugin
does indeed have a number of compile-time dependencies like javaparser which is used to parse annotations from Java syntax. Well, this is due to the fact the plugin has to do a lot of moderately advanced stuff like parse annotations from Java syntax and transform them to codemodel to add to the generated code. I personally don't think that a few hundred kBs in the compile time is a problem at all. So, from my point of view, @ToYonos offered a reasonable workaround for the moment.
Now, how would a correct fix look like?
1.6
has to be supported, the diamond fix can't be applied. The correct fix does not look like an easy task, I'd opt to a workaround and wait for the vendor fix at the moment.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.