热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Maven根据WSDL生成生成Java代码

转载:https:blog.csdn.netpzasdqarticledetails52601473为便于自己学习,整理修改pom.xml1<p

转载: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.0modelVersion>
 4   <groupId>org.ygy.cxfgroupId>
 5   <artifactId>cxf-dateartifactId>
 6   <packaging>warpackaging>
 7   <version>0.0.1-SNAPSHOTversion>
 8   <name>cxf-date Maven Webappname>
 9   <url>http://maven.apache.orgurl>
10   
11   
12     <properties>
13         <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
14         <cxf.version>2.7.5cxf.version>
15         <spring.version>3.1.1.RELEASEspring.version>
16     properties>
17 
18     <dependencies>
19         <dependency>
20             <groupId>junitgroupId>
21             <artifactId>junitartifactId>
22             <version>4.10version>
23             <scope>testscope>
24         dependency>
25 
26         
27         <dependency>
28             <groupId>org.apache.cxfgroupId>
29             <artifactId>cxf-rt-frontend-jaxwsartifactId>
30             <version>${cxf.version}version>
31         dependency>
32 
33         <dependency>
34             <groupId>org.apache.cxfgroupId>
35             <artifactId>cxf-rt-transports-httpartifactId>
36             <version>${cxf.version}version>
37         dependency>
38 
39         <dependency>
40             <groupId>org.apache.cxfgroupId>
41             <artifactId>cxf-rt-transports-http-jettyartifactId>
42             <version>${cxf.version}version>
43         dependency>
44 
45         <dependency>
46             <groupId>org.springframeworkgroupId>
47             <artifactId>spring-contextartifactId>
48             <version>${spring.version}version>
49         dependency>
50 
51         <dependency>
52             <groupId>org.springframeworkgroupId>
53             <artifactId>spring-webartifactId>
54             <version>${spring.version}version>
55         dependency>
56 
57         <dependency>
58             <groupId>org.eclipse.jettygroupId>
59             <artifactId>jetty-webappartifactId>
60             <version>8.1.11.v20130520version>
61         dependency>
62 
63     dependencies>
64 
65     <build>
66         <finalName>cxf-datefinalName>
67         
68         <plugins>
69             <plugin>
70                 <groupId>org.apache.cxfgroupId>
71                 <artifactId>cxf-codegen-pluginartifactId>
72                 <version>${cxf.version}version>
73                 <executions>
74                     <execution>
75                         <id>generate-sourcesid>
76                         <phase>generate-sourcesphase>
77                         <configuration>
78                             <sourceRoot>src/main/resources/cxfsourceRoot>
79                             <wsdlOptions>
80                                 <wsdlOption>
81                                     <wsdl>http://localhost:8080/cxf-date/services/BookService?wsdlwsdl>
82                                     <frontEnd>jaxws21frontEnd>
83                                     <faultSerialVersionUID>1faultSerialVersionUID>
84                                 wsdlOption>
85                             wsdlOptions>
86                         configuration>
87                         <goals>
88                             <goal>wsdl2javagoal>
89                         goals>
90                     execution>
91                 executions>
92             plugin>
93         plugins>
94     build>
95 project>
View Code

用cxf的wsdl2java工具生成客户端代码,但是发现生成的所有自定义的dto类的成员变量,都被映射成JAXBElement的类型了,用起来很麻烦。

解决办法:

法一:后来经过试验,发现将wsdl里的nillable修改为false后,再产生的java代码就是简单的POJO了。(此方法生成成功的需要的代码,但不确定是否有弊端)

百科一下---------nillable:

一个指示符,指示是否可以将显式的零值分配给该元素。此项应用于元素内容并且不是该元素的属性。默认值为 false。

如果 nillable 为 true,将使该元素的实例可以将 nil 属性设置为 true。nil 属性被定义为实例的 XML 架构命名空间的一部分。

例如,下段定义了单个元素,同时将 nillable 设置为 true。

法二:换一种调用方法(嫌麻烦,未尝试):

User user = new User();    
ObjectFactory objFac=new ObjectFactory();    
JAXBElement<String> name = objFac.createUserUsername("smallnest");    
user.setUsername(name); 

方法三:修改pom文件,添加-b参数,并添加自定义binding文件(因为不熟悉,没有测试生成成功)

<extraargs>
    <extraarg>-autoNameResolutionextraarg>
    <extraarg>-bextraarg>
    <extraarg>my_binding.xmlextraarg>  
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>

 

 

 


推荐阅读
author-avatar
mobiledu2502896593
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有