多系统(异构系统)进行交互时,一种良好的方式便是调用Web Service,本示例基于Apache组织的CXF,为了方便起见特将服务端和客户端写在同一个工程下,实际项目中是不可能的,但是客户端却依赖于服务端的Web Service接口,那么可以通过导出jar的方式。
环境:
MyEclipse10
JDK6
Tomcat7
CXF2.5
Spring3
示例项目结构图:
如上图所示,全部依赖的第三方库都在lib中,下面贴出全部代码。
IHelloService.java
HelloServiceImpl.java
HelloServiceClient.java
applicationContext-server.xml
applicationContext-client.xml
web.xml
所有项目都已配置完成,可以发布到Tomcat了,在浏览器中输入: http://localhost:8080/CXFDemo/ws,返回如图:
从上图中可以看到我们对外发布的WebService接口,点击蓝色超链接,返回如图:
到此,证明我们的Web Service已经发布成功,可以进行调用测试了。运行HelloServiceClient,返回如图:
全文完!
环境:
MyEclipse10
JDK6
Tomcat7
CXF2.5
Spring3
示例项目结构图:
如上图所示,全部依赖的第三方库都在lib中,下面贴出全部代码。
IHelloService.java
package bing.server;
import javax.jws.WebService;
/**
* <p>
* WebService接口
* </p>
*
* @author IceWee
* @date 2012-7-6
* @version 1.0
*/
@WebService
public interface IHelloService {
public String sayHello(String username);
}
import javax.jws.WebService;
/**
* <p>
* WebService接口
* </p>
*
* @author IceWee
* @date 2012-7-6
* @version 1.0
*/
@WebService
public interface IHelloService {
public String sayHello(String username);
}
HelloServiceImpl.java
package bing.server;
import javax.jws.WebService;
/**
* <p>
* WebService实现类
* </p>
*
* @author IceWee
* @date 2012-7-6
* @version 1.0
*/
@WebService(endpointInterface = "bing.server.IHelloService", serviceName = "HelloService")
public class HelloServiceImpl implements IHelloService {
@Override
public String sayHello(String username) {
return "hello, " + username;
}
}
import javax.jws.WebService;
/**
* <p>
* WebService实现类
* </p>
*
* @author IceWee
* @date 2012-7-6
* @version 1.0
*/
@WebService(endpointInterface = "bing.server.IHelloService", serviceName = "HelloService")
public class HelloServiceImpl implements IHelloService {
@Override
public String sayHello(String username) {
return "hello, " + username;
}
}
HelloServiceClient.java
package bing.client;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import bing.server.IHelloService;
/**
* <p>
* WebService调用方-客户端
* </p>
*
* @author IceWee
* @date 2012-7-6
* @version 1.0
*/
public class HelloServiceClient {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-client.xml");
IHelloService helloService = (IHelloService) context.getBean("client");
String response = helloService.sayHello("Peter");
System.out.println(response);
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import bing.server.IHelloService;
/**
* <p>
* WebService调用方-客户端
* </p>
*
* @author IceWee
* @date 2012-7-6
* @version 1.0
*/
public class HelloServiceClient {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-client.xml");
IHelloService helloService = (IHelloService) context.getBean("client");
String response = helloService.sayHello("Peter");
System.out.println(response);
}
}
applicationContext-server.xml
<?
xml version="1.0" encoding="UTF-8"
?>
< 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" >
<!--
***注意***
手动添加的内容:
xmlns:jaxws="http://cxf.apache.org/jaxws"
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-extension-soap.xml" />
< import resource ="classpath:META-INF/cxf/cxf-servlet.xml" />
< jaxws:endpoint id ="helloService" implementor ="bing.server.HelloServiceImpl" address ="/helloService" />
</ 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" >
<!--
***注意***
手动添加的内容:
xmlns:jaxws="http://cxf.apache.org/jaxws"
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-extension-soap.xml" />
< import resource ="classpath:META-INF/cxf/cxf-servlet.xml" />
< jaxws:endpoint id ="helloService" implementor ="bing.server.HelloServiceImpl" address ="/helloService" />
</ beans >
applicationContext-client.xml
<?
xml version="1.0" encoding="UTF-8"
?>
< 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" >
<!--
***注意***
手动添加的内容:
xmlns:jaxws="http://cxf.apache.org/jaxws"
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-extension-soap.xml" />
< import resource ="classpath:META-INF/cxf/cxf-servlet.xml" />
< bean id ="client" class ="bing.server.IHelloService" factory-bean ="clientFactory" factory-method ="create" />
< bean id ="clientFactory" class ="org.apache.cxf.jaxws.JaxWsProxyFactoryBean" >
< property name ="serviceClass" value ="bing.server.IHelloService" />
< property name ="address" value ="http://localhost:8080/CXFDemo/ws/helloService" />
</ bean >
</ 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" >
<!--
***注意***
手动添加的内容:
xmlns:jaxws="http://cxf.apache.org/jaxws"
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-extension-soap.xml" />
< import resource ="classpath:META-INF/cxf/cxf-servlet.xml" />
< bean id ="client" class ="bing.server.IHelloService" factory-bean ="clientFactory" factory-method ="create" />
< bean id ="clientFactory" class ="org.apache.cxf.jaxws.JaxWsProxyFactoryBean" >
< property name ="serviceClass" value ="bing.server.IHelloService" />
< property name ="address" value ="http://localhost:8080/CXFDemo/ws/helloService" />
</ bean >
</ beans >
web.xml
<?
xml version="1.0" encoding="UTF-8"
?>
< web-app version ="3.0"
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_3_0.xsd" >
< display-name >CXFDemo </ display-name >
< context-param >
< param-name >contextConfigLocation </ param-name >
< param-value >classpath:applicationContext-server.xml </ param-value >
</ context-param >
< listener >
< listener-class >org.springframework.web.context.ContextLoaderListener </ listener-class >
</ listener >
< servlet >
< servlet-name >CXFServlet </ servlet-name >
< display-name >CXFServlet </ display-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 >/ws/* </ url-pattern >
</ servlet-mapping >
< welcome-file-list >
< welcome-file >index.jsp </ welcome-file >
</ welcome-file-list >
</ web-app >
< web-app version ="3.0"
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_3_0.xsd" >
< display-name >CXFDemo </ display-name >
< context-param >
< param-name >contextConfigLocation </ param-name >
< param-value >classpath:applicationContext-server.xml </ param-value >
</ context-param >
< listener >
< listener-class >org.springframework.web.context.ContextLoaderListener </ listener-class >
</ listener >
< servlet >
< servlet-name >CXFServlet </ servlet-name >
< display-name >CXFServlet </ display-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 >/ws/* </ url-pattern >
</ servlet-mapping >
< welcome-file-list >
< welcome-file >index.jsp </ welcome-file >
</ welcome-file-list >
</ web-app >
所有项目都已配置完成,可以发布到Tomcat了,在浏览器中输入: http://localhost:8080/CXFDemo/ws,返回如图:
从上图中可以看到我们对外发布的WebService接口,点击蓝色超链接,返回如图:
到此,证明我们的Web Service已经发布成功,可以进行调用测试了。运行HelloServiceClient,返回如图:
全文完!