Oleg Atamanenko

thoughts about programming

Apache Ant и Metro

Столкнулся с такой проблемой - в некоторых случаях приложение, собранное антом не работает. Конкретно - не работает десереализация запросов на веб-сервис. Получаемый запрос содержит null в значениях полей.

Опытным путём было выяснено, что на это влияет используемая версия Java. Под 1.5 работает корректно, под 1.6 - не работает. Нашли ошибку в метро, связанную именно с версией JDK и на этом успокоились. Но было одно исключение из правил. У одного из разработчиков под 1.5 тоже не работало.

Как выяснилось позже, виноват был во всё Ant. Metro создавал файл package-info.java, в котором было примерно следующее содержание:

@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://z.y.x.com", 
    elementFormDefault=javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED)
package com.x.y.z;

Ант, в свою очередь, должен был этот файл компилировать. А в реальности этого не происходило, поэтому Metro не мог корректно отобразить XML-запрос на объекты доменной области.

Решение было немного кривым, но при этом поразительно простым - принудительный вызов javac на файлах package-info.java.