2015-11-13 5 views
6

Я использую Apache CXF 2.x, Eclipse, Luna 64-разрядный, Maven 3.xАвтоматической WSDL Java Заглушки в Eclipse, Workspace с использованием Apache CXF и CXF Maven Plugin

У меня есть приложение, производитель одного веб-служба, имеет WSDL, и я хочу, чтобы Stub в приложении динамически генерировались из WSDL.

Я установил Maven Lifecycle Dependency и установил оба разъема M2E WTP. В проекте Eclipse -> Свойства -> Maven -> Отображение жизненного цикла, я вижу cxf-codegen-plugin: wsdl2java, и он показывает, что он правильно привязан к фазе жизненного цикла генерирующих источников.

lifecycle looks fine

При запуске mvn install вручную, то окурки генерируются автоматически и все работает отлично.

Но если я очищаю проект maven и загружаю его в затмение, eclipse автоматически не генерирует заглушки. Я вижу, что Java пропускает ошибки класса в рабочей области Eclipse, показывая, что ген не происходит.

Какой шаг мне не хватает?

Это POM, который я использую.

<?xml version="1.0" encoding="UTF-8"?> 
<project 
     xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.test</groupId> 
    <artifactId>testWeb</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>testWeb</name> 

    <properties> 
     <cxf.version>2.1.3</cxf.version> 
     <maven.compiler.source>1.6</maven.compiler.source> 
     <maven.compiler.target>1.6</maven.compiler.target> 
     <spring.version>3.2.2.RELEASE</spring.version> 
    </properties> 

    <repositories> 
     <repository> 
      <id>snapshots</id> 
      <name>ILP Snapshot Repository</name> 
      <url>http://dhud001.test.com:8675/maven_snapshot/</url> 
      <releases> 
       <enabled>false</enabled> 
      </releases> 
      <snapshots> 
       <enabled>true</enabled> 
       <updatePolicy>always</updatePolicy> 
      </snapshots> 
     </repository>  
     <repository> 
      <id>eclipse</id> 
      <name>Eclipse</name> 
      <url>https://repo.eclipse.org/content/repositories/releases/</url> 
      <releases> 
       <enabled>true</enabled> 
       <updatePolicy>daily</updatePolicy> 
      </releases> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </repository> 
    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>central</id> 
      <name>Maven Plugin Repository</name> 
      <url>http://repo1.maven.org/maven2</url> 
      <layout>default</layout> 
      <snapshots> 
       <enabled>false</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf</artifactId> 
      <version>${cxf.version}</version> 
     </dependency>   
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>build-helper-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>add-source</goal> 
         </goals> 
         <configuration> 
          <sources> 
           <source>src/gen/java</source> 
          </sources> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.cxf</groupId> 
       <artifactId>cxf-codegen-plugin</artifactId> 
       <version>${cxf.version}</version> 
       <executions> 
        <execution> 
         <id>generate-sources</id> 
         <phase>generate-sources</phase> 
         <configuration> 
          <useCompileClasspath>true</useCompileClasspath> <!-- if you don't use this, the soapui test bundle will cause classloading issues with this plugin. --> 
          <sourceRoot>${project.basedir}/src/gen/java</sourceRoot> 
          <wsdlOptions> 
           <wsdlOption> 
            <wsdl>${project.basedir}/src/main/webapp/wsdl/TestService.wsdl</wsdl> 
            <wsdlLocation>classpath:wsdl/TestService.wsdl</wsdlLocation> 
            <extraargs> 
             <extraarg>-verbose</extraarg> 
             <extraarg>-all</extraarg> 
                       </extraargs> 
           </wsdlOption> 
          </wsdlOptions>        
         </configuration> 
         <goals> 
          <goal>wsdl2java</goal> 
         </goals> 
        </execution> 
       </executions>    
      </plugin> 
     </plugins> 
    </build> 
</project> 

Я был в состоянии установить разъем Maven сборки помощника, а также попытался установить https://code.google.com/a/eclipselabs.org/p/m2e-cxf-codegen-connector/, а также. Но источники по-прежнему не генерируются.

Пример затмение проект, который может воспроизвести проблему здесь: https://www.dropbox.com/s/vlo0ghbmkplu7au/service.zip?dl=0

+0

Вы уже спрашивали список рассылки cxf-users? –

+0

Я займусь тем, что сложно подписать и прочее. –

+0

Возможно, имеется некоторый недокументированный флаг, например '-Dm2e.cxf.actually.work.this.time = true' или что-то в этом роде. –

ответ

2

Чтобы получить «Обновление проектов Maven», чтобы вызвать заглушки cxf для восстановления из Eclipse, вам необходимо открыть папку target и удалить target/*. Затем нажмите alt + f5 + enter, и ваши заглушки будут обновляться.

По какой-то причине вручную очистка содержимого целевой папки запускает cff-сборку maven для генерации заглушек. Изменение WSDL/удаление содержимого ваших сгенерированных источников src folder do не справка.

2

Я не уверен, что вы ожидали, в каких обстоятельствах, но, как представляется, проблема с отображением жизненного цикла для CxF m2e плагина, в что чистый механизм не очищает целевые папки, соответствующие этому плагину.

Итак, просто удалите целевую папку вручную (или, по крайней мере, удалите подпапку «cxf-codegen-plugin-markers»), а затем запустите сборку. Это должно привести к созданию Java-файлов при необходимости.

Вы также можете выполнять цели maven с помощью пунктов меню «Выполнить» или «Отладка». Maven удаляет всю целевую папку на чистом. Таким образом, запуск чистой и установки из контекстного меню (или из конфигурации запуска maven) также будет делать то, что вам нужно.

Обратите внимание, что командная строка maven не понравилась ваша зависимость «cxf», и она, по-видимому, не нужна. Мне пришлось удалить его, чтобы заставить его работать.

Последнее, что плагин cxf также не обновляет проект после сборки eclipse, что необходимо для просмотра того, что генерируется в сборке. Таким образом, после сборки требуется быстрый F5 для проекта eclipse.

+0

Привет, Тони. Спасибо, что нашли время ответить. Я уже могу запустить mvn clean/install из Eclipse, и он создает заглушки. Это никогда не было проблемой. Проблема в том, что когда я вношу изменения в WSDL, я ожидал, что Eclipse автоматически обнаружит это изменение, сгенерирует заглушки в папке src/gen/java, и вы увидите изменения в вашей рабочей области. Этого не происходит. Мне нужно вручную запускать mvn install каждый раз, чтобы получить обновления для заглушек. Очень раздражает и требует много времени, потому что мы меняем наш WSDL a * lot *. –

+0

ОК, Николас. Я получил другое сообщение из вашего основного вопроса. Похоже, что соединитель cxf m2e не имеет правильного отображения жизненного цикла. Вы можете быть в состоянии исправить то, что в вашем ПОМ, заменив нуль выполнить элемент секции lifecycleMappingMetadata (что только в проекте образца, а не ПОМ данные в вопросе) с: ' \t верно ' В принципе, это должно запускать цель для инкрементных сборок. –

+0

наградил вас 100+ щедростью за вашу помощь. еще раз спасибо. см. ответ, который я в конце концов нашел в полной аварии ниже. что я понял это –