О, брат! ...
Чтобы переопределить wsdlLocation
для моих тестов JUnit, я создал производные от моих реализаций Web-сервиса, которые переопределяют только аннотацию @WebService
.В результате я столкнулся с той же проблемой, которую окончательно решил сегодня утром (см. Мой первый ответ выше).
Проведя множество тестов, я выяснил, что это присутствие @WebService
-аннотированногокласс, расширяющий мою реализацию Web-сервиса, которая не позволяет валидации XSD правильно обрабатывать <xsd:restriction>
теги.
Чтобы проиллюстрировать это странное поведение, предположим, что у меня есть следующие классы:
@WebService(...)
public interface JeffWebService {...}
@WebService(..., wsdlLocation = "path/myWsdl.wsdl", ...)
public class JeffWebServiceImpl implements JeffWebService {...}
где path/myWsdl.wsdl
правильно находит WSDL.Тогда проверка XSD работает правильно, т.е. содержание моего первого ответа выше полностью допустимо.
Теперь я добавляю следующий класс, который я использую в моих вызовах Endpoint.publish()
на основе JUnit:
@WebService(..., wsdlLocation = "alternatePath/myWsdl.wsdl", ...)
public class TestWebServiceImpl extends JeffWebServiceImpl {}
, которая переопределяет только аннотацию @WebService
.Затем проверка XSD исключает теги <xsd:restriction>
, как это делалось до указания атрибута wsdlLocation
, несмотря на тот факт, что я все еще использую реализацию JeffWebServiceImpl
в своем коде, не являющемся JUnit!Если я закомментирую аннотацию в TestWebServiceImpl
, то все снова будет работать правильно, за исключением, конечно, модульных тестов.
Другими словами, как только в classpath появится какой-то класс, расширяющий мою реализацию Web-сервиса.аннотация @WebService
наиболее определенного класса переопределяет все остальные, независимо от того, какой класс я использую в обычном контексте веб-приложения.Странно, не правда ли?!?
Итог: я пока отключу юнит-тесты на основе Endpoint.Если я (или кто-то читает эту ветку) найду чистый, не фиктивный способ интеграции как производственных, так и JUnit-конфигураций, я рассмотрю вопрос о том, чтобы вернуть их в свой набор тестов JUnit.
Надеюсь, эта ветка поможет всемстолкнуться с той же проблемой, решить ее быстрее, чем я ...
Джефф