webservice+cxf+spring

今天主要讲3个方面的内容:

      目录:

             1:通过spring_cxf创建webservice。

              2:通过CXF的wsdl2java创建java类。

              3:客户端调用。

1:创建webservice

     首先创建个maven-archetype-webapp项目,不会创建参考我博客spring_ssh.

     其次在web.xml中添加spring容器监听配置和cxf配置。代码如下

     

<?xml version="1.0" encoding="UTF-8"?>  
  
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
    id="WebApp_ID" version="2.5">  
    <display-name>webservice</display-name>  
	<!-- springmvc 上下文监听器 ContextLoaderListener -->
	<listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/*.xml</param-value>
	</context-param>
	<!-- springmvc 上下文监听器  ContextLoaderListener-->
    <servlet>  
        <servlet-name>CXFService</servlet-name>  
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
    </servlet>  
  
    <servlet-mapping>  
        <servlet-name>CXFService</servlet-name>  
        <url-pattern>/ws/*</url-pattern>  
    </servlet-mapping>  
</web-app>

 然后是配置spring.xml,spring中主要配置jaxws:endpoint,代码如下:

<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">
	 <bean id="bookServiceImpl" class="com.xiaoji.webservice.service.impl.BookServiceImpl"></bean>  	
		
    <jaxws:endpoint id="bookService" implementor="#bookServiceImpl" address="/bookService">
        <jaxws:properties>
            <entry key="schema-validation-enabled" value="true"/>
        </jaxws:properties>
        <jaxws:dataBinding>
            <bean class="org.apache.cxf.xmlbeans.XmlBeansDataBinding"/>
        </jaxws:dataBinding>
    </jaxws:endpoint>
</beans>

 

 

注解:jaxws:endpoint属性介绍,implementor是webservice接口实现类,address是wsdl访问路径地址还有一个是本地生成wsdl文件:wsdlLocation="wsdl/hello_world.wsdl"。

最后是添加webservice类和接口:

BookService.java

 

package com.xiaoji.webservice.service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService
public interface BookService {

	//http://127.0.0.1:8080/webservice/ws/bookService?wsdl
	
	@WebMethod(operationName = "helloWebService")  
	@WebResult(name = "result")  
	public String helloWebService(@WebParam(name = "ws") String ws);
}

 BookServiceImpl.java

 

 

package com.xiaoji.webservice.service.impl;

import javax.jws.WebService;

import com.xiaoji.webservice.service.BookService;

@WebService(endpointInterface = "com.xiaoji.webservice.service.BookService")  
public class BookServiceImpl implements BookService {

	public String helloWebService(String ws) {
		// TODO Auto-generated method stub
		return "hello webservice ,this is my first webservice. this is " + ws;
	}

}

 最后当然不能缺少pom.xml源码哦:

 

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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.xiaoji.ssh</groupId>
  <artifactId>webservice</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>webservice Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
   <properties>
  	<spring.version>3.2.8.RELEASE</spring.version>	
  	<jdk.version>1.6</jdk.version>
  </properties>
  <dependencies>
         <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-databinding-xmlbeans</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.0.0</version>
        </dependency>
        <!-- Jetty is needed if you're using the CXFServlet -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.0.0</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>
  </dependencies>
 
  <build>
    	<plugins>
	  	<plugin>
	        <groupId>org.apache.maven.plugins</groupId>
	        <artifactId>maven-compiler-plugin</artifactId>
	        <version>3.1</version>
	        <configuration>
	          <source>${jdk.version}</source>
	          <target>${jdk.version}</target>
	        </configuration>
	      </plugin>
  	</plugins>
    <finalName>webservice</finalName>
  </build>
</project>

 大功告成,运行jetty,访问地址:http://172.16.141.55:8080/webservice/ws/bookService?wsdl,改成自己机子IP,OK.webservice-cxf-service就创建完成了

 

2:webservice的服务器端创建了,如何建立测试端呢,我查阅了很多资料,翻看了cxf源码,发现cxf里面有一个wsdl2java.bat,这是个好工具啊,可以根据wsdl链接地址生成客户端访问程序。当然最后也会把cxf-3.0.zip包共享出来。这节主要讲wsdl工具的使用:

(1):解压apache-cxf-3.0.0.zip,配置环境变量,CXF_HOME=cxf的解压路径,path添加%CXF_HOME%\bin,新建CLASS_PATH=.;%CXF_HOME%\lib,有CLASS_PATH的朋友直接添加%CXF_HOME%\lib,最后运行cmd,wsdl2java -v,显示出版本信息,配置成功,如下。

C:\Users\Administrator>wsdl2java -v

wsdl2java - Apache CXF 3.0.0

 (2):运行wsdl2java -p com.xiaoji.webservice.service -d E:\Lynch\De

velop\workspace\eclipse4.3.0\webservicecxf\src\main\java -client http://172.16.1

41.55:8080/webservice/ws/bookService?wsdl,这里朋友们对wsdl2java 后面的参数肯定会有疑问

                wsdl -p 打包 -d 生成JAVA文件存放路径 -client 是wsdl访问路径

这里要注意一点打包,是头文件里面ns1后面跟的链接反向就OK如: xmlns:ns1="http://service.webservice.xiaoji.com/;还有一点是java文件存放路径是我新建的一个maven-simple-project下的src/main/java下的路径,一切都准备就绪,在eclipse刷新客户端项目,会出现如下目录文件:


webservice+cxf+spring
 新建一个WebserviceCxfClient复制BookService_BookServiceImplPort_Client类中的代码运行,也可以直接运行
BookService_BookServiceImplPort_Client,输出结果,淡然我个人觉的这个客户端类写的太复杂了,因为他用到main输入参数我简化了哈,代码如下:

 

package com.xiaoji.webservice.cxf.client;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;

import com.xiaoji.webservice.service.BookService;
import com.xiaoji.webservice.service.BookServiceImplService;

public class WebserviceCxfClient {
	private static final QName SERVICE_NAME = new QName("http://impl.service.webservice.xiaoji.com/", "BookServiceImplService");
	public static void main(String[] args) throws MalformedURLException {
		URL wsdlURL = new URL("http://172.16.141.55:8080/webservice/ws/bookService?wsdl");
        
        BookServiceImplService ss = new BookServiceImplService(wsdlURL, SERVICE_NAME);
        BookService bs = ss.getBookServiceImplPort();  
        
        {
        System.out.println("Invoking helloWebService...");
        String ws = "小吉";
        String result = bs.helloWebService(ws);
        System.out.println("helloWebService.result=" + result);
        }

        System.exit(0);
	}

}

客户端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">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.xiaoji.webservice.cxf.client</groupId>
  <artifactId>webservicecxf</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>webservice-cxf-client</name>
  
  <dependencies>
	<dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-databinding-xmlbeans</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.0.0</version>
        </dependency>
  </dependencies>
</project>

  

 

这样才符合自己的风格呵呵,下面我就上传源代码,为什么要先上传cxf呢,因为xfire好久没更新了,官网也很乱不好找资料。呵呵。

客户端也可以和spring通用哈,我这里只给出spring.xml的配置大家自己下来练习哈,

spring-client.xml:

 

<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">
    <jaxws:client xmlns:s="http://apache.org/hello_world_soap_http" id="client" serviceClass="org.apache.hello_world_soap_http.Greeter" serviceName="s:SOAPService" endpointName="s:SoapPort" wsdlLocation="wsdl/hello_world.wsdl" address="http://localhost:9000/SoapContext/SoapPort">
        <jaxws:properties>
            <entry key="schema-validation-enabled" value="true"/>
        </jaxws:properties>
        <jaxws:dataBinding>
            <bean class="org.apache.cxf.xmlbeans.XmlBeansDataBinding"/>
        </jaxws:dataBinding>
    </jaxws:client>
</beans>

 大家可以自己尝试哈,这里就不详细说了,感觉也没太大的难度了。

 

上传附件失败,只有给大家云盘地址了,如果该文章对你有帮助的话,回复鼓励下作者以后才有动力写相同类似文章。客户端和服务器源码已经上传,apache-cxf-3.0.0.zip云盘下载地址为:http://pan.baidu.com/s/1eQoZFsI,官网下载地址:

http://www.apache.org/dyn/closer.cgi?path=/cxf/3.0.0/apache-cxf-3.0.0.zip

 

你可能感兴趣的:(spring,webservice,CXF,wsdl2java)