Сгенерированные исходные классы с использованием Axis java2wsdl / wsdl2java отличаются от оригинальных

Я реализую WebService с Apache Axis. Эта служба получает в качестве параметра класс ParameterBean, который содержит следующие члены:

public class ParameterBean {
    protected String userName   = "";
    protected String password   = "";
    protected int    clientID   = 0;
    protected int    orgID  = 0;
    protected HashMap<String, String> mainTable = new HashMap<String, String>();
}    

Плюс традиционные геттеры и сеттеры. Я реализовал специальный конструктор:

public ParameterBean(String userName, String password, int clientID, int orgID) {
    this.userName = userName;
    this.password = password;
    this.clientID = clientID;
    this.orgID = orgID;
}

Кроме того, у этого класса есть несколько основных методов, например:

public void addColumnToMainTable(String columnName, String columnValue) {
    addColumnOnTable(mainTable, columnName, columnValue);
}

Однако, когда я запускаю java2wsdl и wsdl2java; сгенерированный исходный код ParameterBean сильно отличается. Метод addColumnToMainTable () пропал, а сгенерированный конструктор является следующим (который отличается от оригинала):

public ParameterBean(
    int clientID,
    java.util.HashMap mainTable,
    int orgID,
    java.lang.String password,
    java.lang.String userName) {
    this.clientID = clientID;
    this.mainTable = mainTable;
    this.orgID = orgID;
    this.password = password;
    this.userName = userName;
}

Мой build.xml:

<target name="generateWSDL" description="Generates wsdl files from the java service interfaces">  
<mkdir dir="${wsdl.dir}"/>  
<axis-java2wsdl classpathref="classpath"  
    output="${wsdl.dir}/ExampleWS.wsdl"  
    location="http://localhost:8080/axis/services/ExampleWS"  
    namespace="org.example.ws"  
    classname="org.example.ws.ExampleWS">  
</axis-java2wsdl>  
</target>  

<target name="generateWSDD" description="Generates wsdd files from the wsdl files">  
<mkdir dir="${wsdd.dir}"/>  
<axis-wsdl2java  
    output="${wsdd.dir}"  
    deployscope="Application"  
    serverside="true"  
    url="${wsdl.dir}\ExampleWS.wsdl">  
</axis-wsdl2java>  
</target>

Почему различия в сгенерированном коде? Как я могу это исправить? Я использую Axis 1.4. Спасибо.

РЕДАКТИРОВАТЬ: Что для меня важнее: какой класс я должен использовать (на стороне сервера и на стороне клиента)? Моя или сгенерированная?


person Federico Cristina    schedule 22.08.2012    source источник


Ответы (1)


Итак, внимательно прочитав документацию Axis, сгенерированные классы будут отличаться потому что WSDL не содержит никакой информации о реализации кода, следовательно, конструктор по умолчанию и никаких других методов, кроме геттеров / сеттеров.

Для клиента я могу использовать сгенерированный класс или исходный, оба работают нормально.

person Federico Cristina    schedule 28.08.2012