首先,我使用java创建了简单的Web服务,然后为该Web服务生成了wsdl并使用SoapUI进行了测试,因此它工作正常。在那之后我现在要从先前生成的wsdl文件生成java类。
这是我的pom.xml文件配置。
<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">
<parent>
<artifactId>webService</artifactId>
<groupId>WebService</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>contractFirst</artifactId>
<packaging>jar</packaging>
<name>contractFirst</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<cxf.version>2.2.3</cxf.version>
</properties>
<build>
<!-- Generate Java classes from WSDL during build -->
<plugins>
<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>
<sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/OrderProcess.wsdl</wsdl>
<extraargs>
<extraarg>-server</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Add generated sources - avoids having to copy generated sources to build location -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${basedir}/target/generated/src/main/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<!-- Build the JAR with dependencies -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
当我尝试生成它时,我收到这样的错误。
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile (default-compile) on project contractFirst: Compilation failure: Compilation failure:
[ERROR] /home/contractFirst/target/generated/src/main/java/demo/order/OrderProcessService.java:[24,1] error: annotations are not supported in -source 1.3
[ERROR]
[ERROR] (use -source 5 or higher to enable annotations)
[ERROR] /home/contractFirst/target/generated/src/main/java/demo/order/OrderProcessService.java:[73,61] error: variable-arity methods are not supported in -source 1.3
[ERROR]
[ERROR] (use -source 5 or higher to enable variable-arity methods)
[ERROR] /home/contractFirst/target/generated/src/main/java/demo/order/ProcessOrderResponse.java:[29,1] error: annotations are not supported in -source 1.3
[ERROR]
[ERROR] (use -source 5 or higher to enable annotations)
[ERROR] /home/contractFirst/target/generated/src/main/java/demo/order/ObjectFactory.java:[24,1] error: annotations are not supported in -source 1.3
[ERROR]
[ERROR] (use -source 5 or higher to enable annotations)
[ERROR] /home/contractFirst/target/generated/src/main/java/demo/order/ObjectFactory.java:[66,22] error: generics are not supported in -source 1.3
[ERROR]
[ERROR] (use -source 5 or higher to enable generics)
[ERROR] /home/contractFirst/target/generated/src/main/java/demo/order/Order.java:[31,1] error: annotations are not supported in -source 1.3
[ERROR]
[ERROR] (use -source 5 or higher to enable annotations)
[ERROR] /home/contractFirst/target/generated/src/main/java/demo/order/ProcessOrder.java:[28,1] error: annotations are not supported in -source 1.3
[ERROR]
所以我没有说明这是什么 - 来源5 是什么?
更新:根据@ Simze的回答,上面的错误消失了。现在我正在纠错这个错误。
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project contractFirst: Compilation failure
[ERROR] /home/contractFirst/target/generated/src/main/java/demo/order/OrderProcess_OrderProcessPort_Server.java:[17,34] cannot find symbol
[ERROR] symbol: class OrderProcessImpl
[ERROR] location: class demo.order.OrderProcess_OrderProcessPort_Server
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project contractFirst: Compilation failure
/home/contractFirst/target/generated/src/main/java/demo/order/OrderProcess_OrderProcessPort_Server.java:[17,34] cannot find symbol
symbol: class OrderProcessImpl
location: class demo.order.OrderProcess_OrderProcessPort_Server
wsdl文件
答案 0 :(得分:2)
终于找到了解决方案。 当我们为给定的wsdl文件生成java代码时,我们需要在 cxf-codegen-plugin
的配置部分指定要生成的内容。...
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/OrderProcess.wsdl</wsdl>
<extraargs>
<extrrg>-impl</extrrg>
<extrrg>-server</extrrg>
</extraargs>
</wsdlOption>
</wsdlOptions>
.....
此处 -impl 表示这将生成服务实现类, -server 用于生成可用于公开服务的服务器组件。
答案 1 :(得分:0)
你得到的错误,因为你试图在Java 1.3下运行maven,它不支持注释。请在<build>
元素下添加以下标记,以解决您的问题。
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
答案 2 :(得分:0)
您需要使用Java 1.5或更高版本。这就是编译器错误告诉你的时候 - 源于5的东西,因为从Java 1.5开始向Java添加了注释支持。