Установить уровень соответствия Java в CXF wsdl2java - PullRequest
10 голосов
/ 13 апреля 2011

Я новичок в CXF и пытаюсь создать клиента из WSDL. Я использовал Metro и Axis в прошлом. Я скачал apache-cxf-2.3.3 и использовал wsdl2java для генерации заглушек клиента. Я использую Maven и настраиваю его с помощью этого:

<properties>
    <cxf.version>2.3.3</cxf.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-ws-security</artifactId>
        <version>${cxf.version}</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <inherited>true</inherited>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
                <optimize>true</optimize>
                <debug>true</debug>
            </configuration>
        </plugin>
    </plugins>
</build>

Когда я строю проект, я получаю следующие ошибки:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project client-cxf: Compilation failure: Compilation failure:
[ERROR] \Devel\Projects\Client-CXF\src\main\java\my\webservice\ServiceRuntimeException.java:[38,149] cannot find symbol
[ERROR] symbol  : method required()

и

[ERROR] \Devel\Projects\Client-CXF\src\main\java\my\snmpv2\MyService.java:[76,8] cannot find symbol
[ERROR] symbol  : constructor Service(java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[])
[ERROR] location: class javax.xml.ws.Service

Похоже, что проблемы связаны с тем, что в сгенерированном коде используются функции Java 6 (элемент «require» для XmlElementRef, новые конструкторы для Service), а зависимости CXF Maven - для Java 5.

Есть ли способ указать, что сгенерированный код должен быть совместим с Java 5?

Ответы [ 2 ]

25 голосов
/ 14 апреля 2011

На самом деле, код, который инструмент командной строки CXF wsdl2java совместим с Java 5, скорее всего, не совместим с Java 6. Причина в том, что он генерирует код, совместимый с JAX-WS 2.2 и JAXB 2.2. Однако версии этих API, включенные в Java 6, имеют только 2.1.

Есть несколько вариантов:

1) Проще всего добавить «-fe jaxws21» к команде wsdl2java, чтобы она генерировала код, совместимый с jaxws 2.1, вместо 2.2

2) Добавьте jar-файлы 2.2 api в одобренную директорию вашего JDK

3) Сконфигурируйте плагин компилятора в maven для "одобрения" 2.2 jars

0 голосов
/ 14 апреля 2011

Документация wsdl2java не содержит никаких опций для указания версии Java.

Вы можете попробовать использовать Maven cxf-codegen-plugin для создания клиентских заглушек, которые должны учитывать исходную и целевую версии компилятора Maven.

Если это не сработает, вы можете настроить Maven для использования Java 6, изменив исходную и целевую строки в pom, например:

               <source>1.6</source>
               <target>1.6</target>
...