您的位置:首页 > 编程语言 > Java开发

CXF学习之旅(三) - 使用Maven根据WSDL生成生成Java代码

2016-09-20 22:42 696 查看
转:

http://blog.csdn.net/yuguiyang1990/article/details/9800851

好久没有看CXF了,最近又一次用到,在这里根据日常使用,接着整理。

好吧,先复习一下,怎样使用Maven创建一个CXF的项目。

1.根据之前的博客,新建一个Web项目

2.修改pom.xml

[html]
view plain
copy
print?

<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/maven-v4_0_0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>org.ygy.cxf</groupId>  
  <artifactId>cxf-date</artifactId>  
  <packaging>war</packaging>  
  <version>0.0.1-SNAPSHOT</version>  
  <name>cxf-date Maven Webapp</name>  
  <url>http://maven.apache.org</url>  
    
  <!-- 属性配置 -->  
    <properties>  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
        <cxf.version>2.7.5</cxf.version>  
        <spring.version>3.1.1.RELEASE</spring.version>  
    </properties>  
  
    <dependencies>  
        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>4.10</version>  
            <scope>test</scope>  
        </dependency>  
  
          
        <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-transports-http-jetty</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-context</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-web</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
  
        <dependency>  
            <groupId>org.eclipse.jetty</groupId>  
            <artifactId>jetty-webapp</artifactId>  
            <version>8.1.11.v20130520</version>  
        </dependency>  
  
    </dependencies>  
  
    <build>  
        <finalName>cxf-date</finalName>  
    </build>  
</project>  



<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>org.ygy.cxf</groupId>
<artifactId>cxf-date</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>cxf-date Maven Webapp</name>
<url>http://maven.apache.org</url>

<!-- 属性配置 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<cxf.version>2.7.5</cxf.version>
<spring.version>3.1.1.RELEASE</spring.version>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>

<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-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>8.1.11.v20130520</version>
</dependency>

</dependencies>

<build>
<finalName>cxf-date</finalName>
</build>
</project>

 

3.修改web.xml

[html]
view plain
copy
print?

<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
           
    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>classpath:applicationContext.xml</param-value>  
    </context-param>  
  
   <listener>  
      <listener-class>  
         org.springframework.web.context.ContextLoaderListener  
      </listener-class>  
   </listener>  
     
     
   <servlet>    
        <servlet-name>CXFServlet</servlet-name>    
            <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>    
        <load-on-startup>1</load-on-startup>    
    </servlet>    
    <servlet-mapping>    
        <servlet-name>CXFServlet</servlet-name>    
        <url-pattern>/services/*</url-pattern>    
    </servlet-mapping>    
     
  
</web-app>  



<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

</web-app>

 

4.写服务接口

[java]
view plain
copy
print?

package org.ygy.cxf.entity;  
  
import java.io.Serializable;  
import java.util.Date;  
  
public class BookEntity implements Serializable {  
    private static final long serialVersionUID = -860948461727285535L;  
  
    private Integer id;  
    private String name;  
    private String author;  
    private Date publicationDate;//出版日期  
  
    public Integer getId() {  
        return id;  
    }  
  
    public void setId(Integer id) {  
        this.id = id;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getAuthor() {  
        return author;  
    }  
  
    public void setAuthor(String author) {  
        this.author = author;  
    }  
  
    public Date getPublicationDate() {  
        return publicationDate;  
    }  
  
    public void setPublicationDate(Date publicationDate) {  
        this.publicationDate = publicationDate;  
    }  
  
}  



package org.ygy.cxf.entity;

import java.io.Serializable;
import java.util.Date;

public class BookEntity implements Serializable {
private static final long serialVersionUID = -860948461727285535L;

private Integer id;
private String name;
private String author;
private Date publicationDate;//出版日期

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAuthor() {
return author;
}

public void setAuthor(String author) {
this.author = author;
}

public Date getPublicationDate() {
return publicationDate;
}

public void setPublicationDate(Date publicationDate) {
this.publicationDate = publicationDate;
}

}


 

[java]
view plain
copy
print?

package org.ygy.cxf.service;  
  
import javax.jws.WebParam;  
import javax.jws.WebService;  
  
import org.ygy.cxf.entity.BookEntity;  
  
@WebService  
public interface IBookService {  
    /** 
     * 添加一本书 
     * @param book 
     */  
    public void add(@WebParam(name="book")BookEntity book);  
      
    /** 
     * 根据ID,查询书籍 
     * @param id 
     * @return 
     */  
    public BookEntity query(@WebParam(name="id")Integer id);  
}  



package org.ygy.cxf.service;

import javax.jws.WebParam;
import javax.jws.WebService;

import org.ygy.cxf.entity.BookEntity;

@WebService
public interface IBookService {
/**
* 添加一本书
* @param book
*/
public void add(@WebParam(name="book")BookEntity book);

/**
* 根据ID,查询书籍
* @param id
* @return
*/
public BookEntity query(@WebParam(name="id")Integer id);
}


 

[java]
view plain
copy
print?

package org.ygy.cxf.service.impl;  
  
import java.util.Date;  
  
import javax.jws.WebService;  
  
import org.ygy.cxf.entity.BookEntity;  
import org.ygy.cxf.service.IBookService;  
import org.ygy.cxf.util.DateUtil;  
  
@WebService(endpointInterface="org.ygy.cxf.service.IBookService")  
public class BookService implements IBookService {  
  
    @Override  
    public void add(BookEntity book) {  
        System.out.println("id->" + book.getId());  
        System.out.println("name->" + book.getName());  
        System.out.println("author->" + book.getAuthor());  
        System.out.println("publicationDate->" + DateUtil.toStr(book.getPublicationDate()));  
    }  
  
    @Override  
    public BookEntity query(Integer id) {  
        BookEntity book = new BookEntity();  
        book.setId(1001);  
        book.setName("OnePiece");  
        book.setAuthor("YGY");  
        book.setPublicationDate(new Date());  
          
        return book;  
    }  
  
}  



package org.ygy.cxf.service.impl;

import java.util.Date;

import javax.jws.WebService;

import org.ygy.cxf.entity.BookEntity;
import org.ygy.cxf.service.IBookService;
import org.ygy.cxf.util.DateUtil;

@WebService(endpointInterface="org.ygy.cxf.service.IBookService")
public class BookService implements IBookService {

@Override
public void add(BookEntity book) {
System.out.println("id->" + book.getId());
System.out.println("name->" + book.getName());
System.out.println("author->" + book.getAuthor());
System.out.println("publicationDate->" + DateUtil.toStr(book.getPublicationDate()));
}

@Override
public BookEntity query(Integer id) {
BookEntity book = new BookEntity();
book.setId(1001);
book.setName("OnePiece");
book.setAuthor("YGY");
book.setPublicationDate(new Date());

return book;
}

}


 

[java]
view plain
copy
print?

package org.ygy.cxf.util;  
  
import java.text.SimpleDateFormat;  
import java.util.Date;  
  
public class DateUtil {  
    private static SimpleDateFormat sdf = null;  
      
    private DateUtil() {  
          
    }  
      
    /** 
     * 将日期转换成字符串 
     * @param date 日期 
     * @return 
     */  
    public static String toStr(Date date) {  
        sdf = new SimpleDateFormat(Configs.COMMON);  
          
        return sdf.format(date);  
    }  
}  



package org.ygy.cxf.util;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {
private static SimpleDateFormat sdf = null;

private DateUtil() {

}

/**
* 将日期转换成字符串
* @param date 日期
* @return
*/
public static String toStr(Date date) {
sdf = new SimpleDateFormat(Configs.COMMON);

return sdf.format(date);
}
}


 

[java]
view plain
copy
print?

package org.ygy.cxf.util;  
  
public class Configs {  
    public static final String COMMON = "yyyy-MM-dd HH:mm:ss";  
}  



package org.ygy.cxf.util;

public class Configs {
public static final String COMMON = "yyyy-MM-dd HH:mm:ss";
}


 

5.新建Spring配置文件

[html]
view plain
copy
print?

<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:jaxws="http://cxf.apache.org/jaxws"  
    xsi:schemaLocation="   http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd   http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">  
  
    <import resource="classpath:META-INF/cxf/cxf.xml" />  
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  
  
    <jaxws:endpoint  
        id="bookService"  
        implementor="org.ygy.cxf.service.impl.BookService"  
        address="/BookService"  
    ></jaxws:endpoint>  
        
</beans>  



<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

<jaxws:endpoint
id="bookService"
implementor="org.ygy.cxf.service.impl.BookService"
address="/BookService"
></jaxws:endpoint>

</beans>


 

6.好了,贴了这么多代码,发布项目测试一下先





7.到这里,都算是复习了,在以前,如果想要根据WSDL生成客户端代码的话,可能要使用命令行wsdl2java命令,还挺长的,

现在,使用了Maven,就简单多了。

修改pom.xml

[html]
view plain
copy
print?

<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/maven-v4_0_0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>org.ygy.cxf</groupId>  
  <artifactId>cxf-date</artifactId>  
  <packaging>war</packaging>  
  <version>0.0.1-SNAPSHOT</version>  
  <name>cxf-date Maven Webapp</name>  
  <url>http://maven.apache.org</url>  
    
  <!-- 属性配置 -->  
    <properties>  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
        <cxf.version>2.7.5</cxf.version>  
        <spring.version>3.1.1.RELEASE</spring.version>  
    </properties>  
  
    <dependencies>  
        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>4.10</version>  
            <scope>test</scope>  
        </dependency>  
  
          
        <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-transports-http-jetty</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-context</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-web</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
  
        <dependency>  
            <groupId>org.eclipse.jetty</groupId>  
            <artifactId>jetty-webapp</artifactId>  
            <version>8.1.11.v20130520</version>  
        </dependency>  
  
    </dependencies>  
  
    <build>  
        <finalName>cxf-date</finalName>  
          
        <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>src/main/resources/cxf</sourceRoot>  
                            <wsdlOptions>  
                                <wsdlOption>  
                                    <wsdl>http://localhost:8080/cxf-date/services/BookService?wsdl</wsdl>  
                                    <frontEnd>jaxws21</frontEnd>  
                                    <faultSerialVersionUID>1</faultSerialVersionUID>  
                                </wsdlOption>  
                            </wsdlOptions>  
                        </configuration>  
                        <goals>  
                            <goal>wsdl2java</goal>  
                        </goals>  
                    </execution>  
                </executions>  
            </plugin>  
        </plugins>  
    </build>  
</project>  



<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>org.ygy.cxf</groupId>
<artifactId>cxf-date</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>cxf-date Maven Webapp</name>
<url>http://maven.apache.org</url>

<!-- 属性配置 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<cxf.version>2.7.5</cxf.version>
<spring.version>3.1.1.RELEASE</spring.version>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>

<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-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>8.1.11.v20130520</version>
</dependency>

</dependencies>

<build>
<finalName>cxf-date</finalName>

<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>src/main/resources/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>http://localhost:8080/cxf-date/services/BookService?wsdl</wsdl>
<frontEnd>jaxws21</frontEnd>
<faultSerialVersionUID>1</faultSerialVersionUID>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>


这里,添加了一个插件,通过它,可以根据配置的WSDL地址,将代码生成到指定的文件夹

sourceRoot:就是生成文件存放的位置

wsdl:就是WSDL地址

然后,在pom.xml上右键单击,选择run as 下的mvn generate-sources





然后,刷新一下项目,就会看到生成的代码:



好了,先写到这,主要介绍一下使用Maven根据WSDL自动生成Java代码。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: