Генерация метода toString с помощью ant
У меня есть файлы.wsdl и с помощью wsimport я создаю классы для использования веб-сервисов.
Проблема в том, что мне нужно добавить метод toString к сгенерированным классам. Я видел, что это возможно в xjc, но не могу найти способ сделать это в wsimport.
Вы знаете, как подойти к этому?
На данный момент функция выглядит так
<basename property="basename.file" file="${file}" />
<mkdir dir="/tmp" />
<exec executable="wsimport">
<arg value="-catalog" />
<arg value="jax-ws-catalog.xml" />
<arg value="-s" />
<arg value="${src.generated}" />
<arg value="-keep" />
<arg value="-d" />
<arg value="/temp" />
<arg value="-Xnocompile" />
<arg value="file://mock_${basename.file}" />
</exec>
2 ответа
По ссылке
Плагин CXF XJC toString предоставляет и плагин XJC, который обновляет сгенерированные bean-компоненты для реализации методов toString для переопределения метода Object.toString по умолчанию. Он использует класс Apache Commons Lang ToStringBuilder для построения String, поэтому commons-lang.jar должен быть доступен на пути к классам.
Добавьте аргумент -Xts
Отказ от ответственности: я являюсь автором JAXB2-Basics - мощного пакета плагинов XJC.
Для этого вы можете использовать ToString из JAXB2-Basics. Он использует "стратегический" подход, аналогичный commons-lang
но генерирует код без отражения - то есть сгенерированный toString()
методы будут довольно быстрыми.
Вы получите что-то вроде:
public String toString() {
final ToStringStrategy strategy = JAXBToStringStrategy.INSTANCE;
final StringBuilder buffer = new StringBuilder();
append(null, buffer, strategy);
return buffer.toString();
}
public StringBuilder append(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) {
strategy.appendStart(locator, this, buffer);
appendFields(locator, buffer, strategy);
strategy.appendEnd(locator, this, buffer);
return buffer;
}
public StringBuilder appendFields(ObjectLocator locator, StringBuilder buffer, ToStringStrategy strategy) {
{
USAddress theShipTo;
theShipTo = this.getShipTo();
strategy.appendField(locator, this, "shipTo", buffer, theShipTo);
}
{
USAddress theBillTo;
theBillTo = this.getBillTo();
strategy.appendField(locator, this, "billTo", buffer, theBillTo);
}
// ...
return buffer;
}
Использование муравья более или менее следующее:
<target name="generate-sources">
<taskdef name="xjc" classname="org.jvnet.jaxb2_commons.xjc.XJC2Task">
<!-- XJC2 Task classpath -->
<classpath>
<fileset dir="${basedir}/lib">
<include name="activation-*.jar"/>
<include name="jaxb-api-*.jar"/>
<include name="jaxb-impl-*.jar"/>
<include name="jaxb-runtime-*.jar"/>
<include name="jaxb-core-*.jar"/>
<include name="jsr173_api-*.jar"/>
<include name="stax-api-*.jar"/>
<include name="jaxb-xjc-*.jar"/>
<include name="jaxb2-basics-ant-*.jar"/>
<include name="slf4j-*.jar"/>
<include name="jcl-over-slf4j-*.jar"/>
</fileset>
</classpath>
</taskdef>
<mkdir dir="${basedir}/target/generated-sources/xjc"/>
<xjc destdir="${basedir}/target/generated-sources/xjc" extension="true">
<arg line="
-Xequals
-XhashCode
-Xinheritance
-XtoString
-Xcopyable
-XenumValue"/>
<binding dir="${basedir}/src/main/resources">
<include name="**/*.xjb"/>
</binding>
<schema dir="${basedir}/src/main/resources">
<include name="**/*.xsd"/>
</schema>
<!-- Plugins -->
<classpath>
<fileset dir="${basedir}/lib">
<include name="jaxb2-basics-plugins-*.jar"/>
</fileset>
</classpath>
</xjc>
</target>
В дистрибутиве есть готовый образец Ant (см. jaxb2-basics-sample-basic-<VERSION>-ant-src.zip
).