Would you consider submitting a patch to the CXF ts plugin that enables this?
We currently have a few "styles" that can be selected via: -Xts:style:simple -Xts:style:mulitline We could definitely add a: -Xts:style:guava or similar that would do this. Dan On Sep 1, 2012, at 4:17 AM, Simon <[email protected]> wrote: > Thank you for your answer Glen. I missed this plugin in my search. > > Though this plugin offers a lot of flexibility, it generates too much > code for my needs. > > In the meantime, I tried to make my own plugin which appear to be > quite simple. As I was inspired by the cxf-xjc-ts plugin, I post it > here so anyone can use it : > > package com.package; > > import java.util.logging.Logger; > import org.xml.sax.*; > import com.sun.codemodel.*; > import com.sun.tools.xjc.*; > import com.sun.tools.xjc.outline.*; > > /** > * @author Simon B. > */ > public class ToStringPlugin extends Plugin { > > private static final Logger LOG = > Logger.getLogger(ToStringPlugin.class.getName()); > > private static final String NAME = "toString() XJC Plugin"; > > @Override > public String getOptionName() { > return "Xto-string"; > } > > @Override > public String getUsage() { > return "-Xto-string : Activate plugin to add a toString() > method to > generated classes."; > } > > @Override > public boolean run(Outline outline, Options opt, ErrorHandler > errorHandler) throws SAXException { > LOG.fine("Running " + NAME + "."); > > JClass guavaObjects = > outline.getCodeModel().ref("com.google.common.base.Objects"); > > for (ClassOutline co : outline.getClasses()) { > addToStringMethod(co, guavaObjects); > } > > return true; > } > > private void addToStringMethod(ClassOutline co, JClass guavaObjects) { > > JDefinedClass implementation = co.implClass; > > // > // Create toString() method > // > JMethod toStringMethod = implementation.method(JMod.PUBLIC, > String.class, "toString"); > > JDocComment doc = toStringMethod.javadoc(); > doc.add("Generated by " + NAME); > toStringMethod.annotate(Override.class); > > // > // return Objects.toStringHelper(this) > // .add("propertyName0", propertyValue0) > // ... > // .add("propertyNameN", propertyValueN) > // .toString(); > // > > JInvocation toStringHelperInvocation = > guavaObjects.staticInvoke("toStringHelper"); > toStringHelperInvocation.arg(JExpr._this()); > > JInvocation lastAddInvocation = toStringHelperInvocation; > for (JFieldVar var : implementation.fields().values()) { > if (isStatic(var.mods()) == false) { > JInvocation addInvocation = > JExpr.invoke(lastAddInvocation, "add"); > addInvocation.arg(JExpr.lit(var.name())); > addInvocation.arg(JExpr.ref(var.name())); > lastAddInvocation = addInvocation; > } > } > > JInvocation toStringInvocation = > JExpr.invoke(lastAddInvocation, "toString"); > > toStringMethod.body()._return(toStringInvocation); > > } > > private static boolean isStatic(JMods mods) { > return (mods.getValue() & JMod.STATIC) != 0; > } > > } > > > > > > 2012/8/31 Glen Mazza <[email protected]>: >> Hi Simon, I haven't done this before, but the alternative ToString plugin >> (http://confluence.highsource.org/display/J2B/ToString+plugin) has a >> "-XtoString-toStringStrategyClass" option where you can apparently make up >> whatever toString() format you desire. This blog entry: >> http://www.jroller.com/gmazza/entry/enhancing_jaxb_artifacts#Plugin can show >> you how to use the plugin itself, but creating the toString() strategy >> itself may require some googling of source code to find out the process. >> >> HTH, >> Glen >> >> >> On 08/31/2012 06:09 AM, Simon wrote: >>> >>> Hi ! >>> >>> I'am using CXF (2.6.1) for my projects and I would like to have a >>> toString() method for our generated JAXB classes. >>> >>> I'am using Maven as the build system. >>> >>> The easier solution seems to use the 'cxf-codegen-plugin' in >>> combination with the 'toString() XJC Plugin' like this : >>> >>> <plugin> >>> <groupId>org.apache.cxf</groupId> >>> <artifactId>cxf-codegen-plugin</artifactId> >>> <version>2.6.1</version> >>> <dependencies> >>> <dependency> >>> <groupId>org.apache.cxf.xjcplugins</groupId> >>> <artifactId>cxf-xjc-ts</artifactId> >>> <version>2.6.0</version> >>> </dependency> >>> </dependencies> >>> <configuration> >>> <defaultOptions> >>> <extraargs> >>> >>> <extraarg>-xjc-Xts:style:org.apache.commons.lang.builder.ToStringStyle.SIMPLE_STYLE</extraarg> >>> </extraargs> >>> </defaultOptions> >>> </configuration> >>> <executions> >>> <execution> >>> <id>generate-sources</id> >>> <goals> >>> <goal>wsdl2java</goal> >>> </goals> >>> </execution> >>> </executions> >>> </plugin> >>> >>> This will generate this : >>> >>> @Override >>> public String toString() { >>> return ToStringBuilder.reflectionToString(this, >>> ToStringStyle.SIMPLE_STYLE); >>> } >>> >>> However, as my projects are all using Guava, I would prefere to >>> generate the toString() method this way : >>> >>> @Override >>> public String toString() { >>> return Objects.toStringHelper(this) >>> .add("name", name) >>> .add("phone", phone) >>> .add("eMail", eMail) >>> .add("fax", fax) >>> .toString(); >>> } >>> >>> Is there a plan to add this feature (using Guava) in the existing XJC >>> Plugin ? >>> >>> Thank you ! >> >> >> >> -- >> Glen Mazza >> Talend Community Coders - coders.talend.com >> blog: www.jroller.com/gmazza >> -- Daniel Kulp [email protected] - http://dankulp.com/blog Talend Community Coder - http://coders.talend.com
