Генерация метода 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).

Другие вопросы по тегам