Как примирить конфликт между оригинальным и сгенерированным файлом в веб-сервисах Java? - PullRequest
2 голосов
/ 30 марта 2010

У меня есть устаревшее Java-приложение, которое использует класс mypackage.Foo. Я хотел бы, чтобы это приложение использовало веб-сервис, который возвращает экземпляры Foo. Чтобы подключиться к этому веб-сервису, я использую wsimport в WSDL для генерации артефактов, и он дает мне другой файл Foo.java. В идеале я хотел бы сказать wsimport генерировать артефакты, которые используют оригинальный Foo, и не создавать никаких дополнительных файлов Foo, но я не нашел способа сделать это. Как согласовать два файла Foo в приложении Java? Похоже, мои варианты:

1) положить сгенерированный файл Foo в другой пакет. Но затем присвоение otherpackage.Foo переменной mypackage.Foo завершается ошибкой

2) использовать сгенерированный Foo вместо исходного Foo. В некоторых случаях это может показаться лучшим решением, но оригинальный Foo имеет функциональность, которой нет в сгенерированном Foo. Кроме того, внесение изменений в масштабах всего приложения невозможно.

3) используйте первую опцию и напишите метод для ручного копирования полей otherpackage.Foo в mypackage.Foo. Если все остальное не поможет, это будет то, что я делаю, но кажется ужасно не элегантным.

Я уверен, что пропускаю простую лучшую практику. Цени любые идеи!

1 Ответ

1 голос
/ 30 марта 2010

Когда вы генерируете Java-код из WSDL, вы можете использовать Apache CXF и его инструмент wsdl2java (или с помощью maven-cxf-codegen-plugin) и указать следующую опцию:

-nexclude <schema-namespace>=<java-package> 

Использование этой опции:

  • говорит инструменту wsdl2java не генерировать классы из заданного пространства имен XML,
  • указать инструменту для импорта в сгенерированный код из данного java-пакета.

Конечно, указанный класс должен существовать в java-пакете позже во время компиляции (не требуется при генерации кода).

В вашем примере используйте:

wsdl2java -nexclude <some-schema-namespace-I-dont-know>=mypackage
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...