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


    转载: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>
    View Code

    用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>
  • 相关阅读:
    电路的耦合方式
    PCBA与PCB的区别
    vue记住密码功能
    数组变异
    element时间选择器插件转化为YYYY-MM-DD的形式
    box-shadow
    从后台传select的值
    jQuery事件(持续更新中)
    JavaScript对象(持续更新中)
    15分XX秒后订单自动关闭(倒计时)
  • 原文地址:https://www.cnblogs.com/congcongdi/p/8711230.html
Copyright © 2020-2023  润新知