转载:https://blog.csdn.net/pzasdq/article/details/52601473
为便于自己学习,整理
修改pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>org.ygy.cxf</groupId> 5 <artifactId>cxf-date</artifactId> 6 <packaging>war</packaging> 7 <version>0.0.1-SNAPSHOT</version> 8 <name>cxf-date Maven Webapp</name> 9 <url>http://maven.apache.org</url> 10 11 <!-- 属性配置 --> 12 <properties> 13 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 14 <cxf.version>2.7.5</cxf.version> 15 <spring.version>3.1.1.RELEASE</spring.version> 16 </properties> 17 18 <dependencies> 19 <dependency> 20 <groupId>junit</groupId> 21 <artifactId>junit</artifactId> 22 <version>4.10</version> 23 <scope>test</scope> 24 </dependency> 25 26 27 <dependency> 28 <groupId>org.apache.cxf</groupId> 29 <artifactId>cxf-rt-frontend-jaxws</artifactId> 30 <version>${cxf.version}</version> 31 </dependency> 32 33 <dependency> 34 <groupId>org.apache.cxf</groupId> 35 <artifactId>cxf-rt-transports-http</artifactId> 36 <version>${cxf.version}</version> 37 </dependency> 38 39 <dependency> 40 <groupId>org.apache.cxf</groupId> 41 <artifactId>cxf-rt-transports-http-jetty</artifactId> 42 <version>${cxf.version}</version> 43 </dependency> 44 45 <dependency> 46 <groupId>org.springframework</groupId> 47 <artifactId>spring-context</artifactId> 48 <version>${spring.version}</version> 49 </dependency> 50 51 <dependency> 52 <groupId>org.springframework</groupId> 53 <artifactId>spring-web</artifactId> 54 <version>${spring.version}</version> 55 </dependency> 56 57 <dependency> 58 <groupId>org.eclipse.jetty</groupId> 59 <artifactId>jetty-webapp</artifactId> 60 <version>8.1.11.v20130520</version> 61 </dependency> 62 63 </dependencies> 64 65 <build> 66 <finalName>cxf-date</finalName> 67 68 <plugins> 69 <plugin> 70 <groupId>org.apache.cxf</groupId> 71 <artifactId>cxf-codegen-plugin</artifactId> 72 <version>${cxf.version}</version> 73 <executions> 74 <execution> 75 <id>generate-sources</id> 76 <phase>generate-sources</phase> 77 <configuration> 78 <sourceRoot>src/main/resources/cxf</sourceRoot> 79 <wsdlOptions> 80 <wsdlOption> 81 <wsdl>http://localhost:8080/cxf-date/services/BookService?wsdl</wsdl> 82 <frontEnd>jaxws21</frontEnd> 83 <faultSerialVersionUID>1</faultSerialVersionUID> 84 </wsdlOption> 85 </wsdlOptions> 86 </configuration> 87 <goals> 88 <goal>wsdl2java</goal> 89 </goals> 90 </execution> 91 </executions> 92 </plugin> 93 </plugins> 94 </build> 95 </project>
用cxf的wsdl2java工具生成客户端代码,但是发现生成的所有自定义的dto类的成员变量,都被映射成JAXBElement<T>的类型了,用起来很麻烦。
解决办法:
法一:后来经过试验,发现将wsdl里的nillable修改为false后,再产生的java代码就是简单的POJO了。(此方法生成成功的需要的代码,但不确定是否有弊端)
百科一下---------nillable:
一个指示符,指示是否可以将显式的零值分配给该元素。此项应用于元素内容并且不是该元素的属性。默认值为 false。
如果 nillable 为 true,将使该元素的实例可以将 nil 属性设置为 true。nil 属性被定义为实例的 XML 架构命名空间的一部分。
例如,下段定义了单个元素,同时将 nillable 设置为 true。
<xs:element name="myDate" type="xs:date" nillable="true"/>
法二:换一种调用方法(嫌麻烦,未尝试):
User user = new User(); ObjectFactory objFac=new ObjectFactory(); JAXBElement<String> name = objFac.createUserUsername("smallnest"); user.setUsername(name);方法三:修改pom文件,添加-b参数,并添加自定义binding文件(因为不熟悉,没有测试生成成功)
<extraargs> <extraarg>-autoNameResolution</extraarg> <extraarg>-b</extraarg> <extraarg>my_binding.xml</extraarg> </extraargs>my_binding.xml如下:
<jaxb:bindings version="2.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"> <jaxb:bindings> <jaxb:globalBindings generateElementProperty="false" /> </jaxb:bindings> </jaxb:bindings>