Используя Apache CXF и Maven я получаю код, который выглядит неправильно - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть несколько файлов WSDL, которые я использую для генерации клиентского кода для связи с удаленным сервисом с использованием SOAP. Сгенерированный код содержит строку, которая выглядит следующим образом:

public class AddProductService extends Service {

    static {
        URL url = null;
        try {
            url = new URL("file:/Users/developer/spg/spg-subman/SubscriptionManager/src/main/resources/wsdl/AddProduct.xml");

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

Файлы WSDL находятся в проекте в src/main/resources/wsdl, и этот каталог не будет существовать, где будет развернут этот код.

Я использую плагин cxf-codegen-plugin с maven для генерации этого кода.

У меня есть пара вопросов:

  1. Требуется ли WSDL ввремя выполнения?
  2. Если это так, могу ли я просто скопировать его в файл JAR и указать указанный выше URL-адрес на classpath: URL?
  3. Можно ли скопировать файлы WSDL в целевой каталог, а затемиспользовать эти файлы для генерации Java-кода для клиента?

1 Ответ

0 голосов
/ 09 апреля 2019

Я отвечаю на этот вопрос, потому что я нашел ответ, и я видел, как многие люди публикуют фрагменты кода, которые показывают ту же проблему, что и я, и на самом деле примеры кода cxf демонстрируют ту же проблему. Также у меня было несколько файлов wsdlf, и как решить это тоже было не ясно.

Элемент, который устраняет эту проблему:

  <wsdlLocation>AddProduct.xml</wsdlLocation>

Проблема, с моей точки зрения, заключается в том, что тег wsdlLocation предлагает путь, но это не запись для пути, вы просто помещаете имя файла wsdl здесь и во время выполнения, пока вы включаете wsdl в Путь к классу файла JAR будет найден.

В итоге раздел в pom для раздела конфигурации файла cxf-codegen-plugin выглядел так:

<configuration>
    <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
    <wsdlOptions>
        <wsdlOption>
            <wsdl>${basedir}/src/main/resources/wsdl/AddProduct.xml</wsdl>
            <extraargs>
                <extraarg>-client</extraarg>
            </extraargs>
            <wsdlLocation>AddProduct.xml</wsdlLocation>
        </wsdlOption>
   </wsdlOptions>
</configuration

Результатом этого является то, что в статическом объявлении вы получите следующее:

URL url = AddProductService.class.getResource("AddProduct.xml");

а не это:

 url = new URL("file:/Users/tonyg/App/MyManager/src/main/resources/wsdl/AddProduct.xml");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...