Я пытаюсь создать проект maven, пакет OSGi, который содержит веб-сервисы. Я использую JAX-WS со всеми аннотациями @WebService
для указания веб-сервисов, которые у меня есть. Для загрузки этих веб-сервисов в расположении клиента вы обычно используете wsgen
и wsimport
для экспорта / импорта файлов WSDL. Я планирую использовать jaxws-maven-plugin для этого, но вот проблема:
Пакет может одновременно выполнять роль сервера и клиента. Он может зарегистрироваться в качестве клиента на родительском узле того же пакета (работающем на другой JVM / хосте). Таким образом, этот проект / пакет maven определяет интерфейс для веб-сервиса и определяет класс реализации, который реализует этот интерфейс. И интерфейс, и класс используют аннотацию @WebService
как обычно.
@WebService
public interface Example {
public void callMe();
}
@WebService
public class ExampleImpl implements Example {
public void callMe() {};
}
А потом где-то в моем коде:
Endpoint p = Endpoint.publish(
"http://localhost:8080/example",
new ExampleImpl());
jaxws: wsgen goal читает аннотации и создает выходные файлы (файлы .class, файлы .java, файлы WSDL, в зависимости от конфигурации ...). Но как мне использовать эти файлы во время выполнения jaxws: wsimport для того же запуска mvn package
? В том же проекте Maven я хочу использовать этот веб-сервис, поэтому мне нужно написать что-то вроде этого:
ExampleImplService service = new ExampleImplService();
Example port = service.getExampleImplPort();
port.callMe();
Цель jaxws:gen
выполняется в фазе process-classes
, так как она должна читать скомпилированные классы, но jaxws:import
должна выполняться в фазе generate-sources
, чтобы подготовить все для компиляции. И теперь я сталкиваюсь с проблемой куриного яйца. Мне нужны скомпилированные классы для генерации выходных файлов через wsgen
, но мне нужны выходные файлы wsgen
для wsimport
в фазе generate-sources
maven. Моей первой попыткой было назначить цель jaxws:wsgen
фазе generate-sources
, но, конечно, она не работает, поскольку классы отсутствуют / еще не скомпилированы.
Какие есть варианты решения этой проблемы? Если мне нужно выполнить цель antrun
для компиляции некоторых классов (а именно только классов с аннотациями @WebService
) перед фазой generate-sources
, чтобы jaxws:wsgen
могла использовать ее (на этой фазе), создайте выходные файлы, которые затем используются jaxws:wsimport
в фазе generate-sources
? Есть ли другие способы решить эту проблему куриного яйца? Существуют ли другие "maven-способы" для компиляции серверной и клиентской части веб-сервисов в одном проекте maven? Это должно быть кстати. запускать из чистой mvn clean
сборки, поэтому я не хочу / не люблю никаких решений, таких как «запустить mvn package
дважды, чтобы сначала сгенерировать файлы веб-сервисов, а затем скомпилировать все остальное». Другими словами: mvn clean package
должен скомпилировать весь проект maven / пакет osgi.