记录apache-cxf-3.0.4编写web服务的过程
2015-03-31 00:15
323 查看
本篇也算现学现卖,但是网上很多文章都所述不详,所以有了本篇
1、下载并解压apache-cxf-3.0.4.zip;
2、建立动态web项目CXFWebService,引入jar包如下:(除了log4j和commons-logging,其它都在解压后的apache-cxf-3.0.4\lib目录中可以找到)
这里走了不少弯路,网上各种低版本的文章和奇怪的配置,最终在apache-cxf-3.0.4\lib目录下找到了WHICH_JARS(官方正解)
引用要点:
3、新建包、类、配置文件如下结构
web.xml
applicationContext-server.xml
这个地方的要点就是cxf3以后似乎cxf-extension-soap.xml这个配置就没有包含在jar包里了,所以也没必要配置。
log4j.properties
User.java
IUserService.java
UserServiceImpl.java
至此服务端基本编写完毕,可以在tomcat中运行,
url中输入http://localhost:8080/CXFWebService/Users?wsdl可以看到下图即可证明服务端正常。
客户端
SpringUsersWsClient.java
基于soap的服务基本就是这样,比起原生的jax-ws如何呢?貌似原生的更简单一些= =|||
后续会介绍restfull服务的例子。
1、下载并解压apache-cxf-3.0.4.zip;
2、建立动态web项目CXFWebService,引入jar包如下:(除了log4j和commons-logging,其它都在解压后的apache-cxf-3.0.4\lib目录中可以找到)
commons-logging-1.1.3.jar cxf-core-3.0.4.jar log4j-1.2.13.jar neethi-3.0.3.jar spring-aop-3.2.6.RELEASE.jar spring-beans-3.2.6.RELEASE.jar spring-context-3.2.6.RELEASE.jar spring-core-3.2.6.RELEASE.jar spring-expression-3.2.6.RELEASE.jar spring-web-3.2.6.RELEASE.jar wsdl4j-1.6.3.jar xmlschema-core-2.2.1.jar aopalliance-1.0.jar asm-3.3.1.jar cxf-rt-bindings-soap-3.0.4.jar cxf-rt-bindings-xml-3.0.4.jar cxf-rt-databinding-jaxb-3.0.4.jar cxf-rt-frontend-jaxws-3.0.4.jar cxf-rt-frontend-simple-3.0.4.jar cxf-rt-transports-http-3.0.4.jar cxf-rt-ws-addr-3.0.4.jar cxf-rt-ws-policy-3.0.4.jar cxf-rt-wsdl-3.0.4.jar geronimo-jaxws_2.2_spec-1.2.jar jaxb-api-2.2.11.jar jaxb-core-2.2.11.jar jaxb-impl-2.2.11.jar jcl-over-slf4j-1.7.9.jar slf4j-api-1.7.9.jar slf4j-jdk14-1.7.9.jar stax2-api-3.1.4.jar woodstox-core-asl-4.4.1.jar
这里走了不少弯路,网上各种低版本的文章和奇怪的配置,最终在apache-cxf-3.0.4\lib目录下找到了WHICH_JARS(官方正解)
引用要点:
The following jars are required for all CXF usage: - cxf-core.jar - geronimo-javamail.jar (Or the Sun equivalent) [6] (MAY be able to remove javamail if you don't use any MIME/MTOM/SAAJ type things) - jaxb-api.jar [6] - jaxb-core.jar [6] - jaxb-impl.jar (this is a [6] for normal runtime, but is required for tooling and the dynamic clients) - xmlschema-core.jar - woodstox-core-asl.jar - stax2-api.jar - slf4j-*.jar - jcl-over-slf4j.jar
For JAX-WS support: - neethi.jar - wsdl4j.jar - geronimo-jaxws_2.2_spec-1.0.jar (Or the Sun equivalent) [6] - saaj-api.jar [6] - saaj-impl.jar [6] - asm.jar (semi-optional, helps with performance of wrapper types and is required when adding JAXB annotations onto the SEI methods and parameters.) - cxf-rt-ws-addr.jar - cxf-rt-ws-policy.jar - cxf-rt-frontend-simple.jar - cxf-rt-frontend-jaxws.jar - cxf-rt-bindings-xml.jar - cxf-rt-bindings-soap.jar - cxf-rt-databinding-jaxb.jar - cxf-rt-wsdl.jar - cxf-rt-transports-http.jar (or other transport jar) For XML Configuration support: - aopalliance.jar - spring-beans.jar - spring-context.jar - spring-core.jar For hosting web services within WARs while using Spring-based CXFServlet: - spring-web.jar
3、新建包、类、配置文件如下结构
web.xml
<?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" version="2.5"> <!-- 加载Spring容器配置 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 设置Spring容器加载配置文件路径 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext-server.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <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>/*</url-pattern> </servlet-mapping> </web-app>
applicationContext-server.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.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-extension-soap.xml" /> --> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <bean id="inMessageInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"/> <bean id="outLoggingInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor" /> <bean id="userServiceBean" class="com.java.service.impl.UserServiceImpl" /> <jaxws:server id="userService" serviceClass="com.java.service.IUserService" address="/Users"> <jaxws:serviceBean> <ref bean="userServiceBean" /> </jaxws:serviceBean> <jaxws:inInterceptors> <ref bean="inMessageInterceptor" /> </jaxws:inInterceptors> <jaxws:outInterceptors> <ref bean="outLoggingInterceptor" /> </jaxws:outInterceptors> </jaxws:server> </beans>
这个地方的要点就是cxf3以后似乎cxf-extension-soap.xml这个配置就没有包含在jar包里了,所以也没必要配置。
log4j.properties
### set log levels ### log4j.rootLogger = debug,D ### \u8F93\u51FA\u5230\u63A7\u5236\u53F0 ### log4j.appender.D = org.apache.log4j.ConsoleAppender log4j.appender.D.Target = System.out log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %d{ABSOLUTE} %5p %c:%L - %m%n
User.java
package com.java.entity; public class User { private long id; private String name; private String address; private String email; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
IUserService.java
package com.java.service; import javax.jws.WebParam; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; import com.java.entity.User; /** * <b>function:</b>定制客户端请求WebService所需要的接口 */ @WebService @SOAPBinding(style = Style.RPC) public interface IUserService { public User getUserByName(@WebParam(name = "name") String name); public void setUser(User user); }
UserServiceImpl.java
package com.java.service.impl; import java.util.Date; import javax.jws.WebParam; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; import com.java.entity.User; import com.java.service.IUserService; /** * <b>function:</b> WebService传递复杂对象,如JavaBean、Array、List、Map等 */ @WebService @SOAPBinding(style = Style.RPC) public class UserServiceImpl implements IUserService { public User getUserByName(@WebParam(name = "name") String name) { User user = new User(); user.setId(new Date().getTime()); user.setName(name); user.setAddress("china"); user.setEmail(name + "@test.com"); return user; } public void setUser(User user) { System.out.println("############Server setUser###########"); System.out.println("setUser:" + user); } }
至此服务端基本编写完毕,可以在tomcat中运行,
url中输入http://localhost:8080/CXFWebService/Users?wsdl可以看到下图即可证明服务端正常。
客户端
SpringUsersWsClient.java
package com.java.client; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import com.java.entity.User; import com.java.service.IUserService; public class SpringUsersWsClient { public static void main(String[] args) { // 调用WebService JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(IUserService.class); factory.setAddress("http://localhost:8080/CXFWebService/Users"); IUserService service = (IUserService) factory.create(); System.out.println("#############Client getUserByName##############"); User user = service.getUserByName("hoojo"); System.out.println(user.getName()); user.setAddress("China-Guangzhou"); service.setUser(user); } }
基于soap的服务基本就是这样,比起原生的jax-ws如何呢?貌似原生的更简单一些= =|||
后续会介绍restfull服务的例子。
相关文章推荐
- 记录apache-cxf-3.0.4编写web服务的过程(2)——集合
- Apache+php服务的源码安装和配置过程记录
- CentOS 5.2,Linux 2.6+ 内核 ,Apache+MySQL+PHP 安装及基本配置过程记录 && 将apache安装为系统服务
- apache-cxf-3.0.4和spring实现rest服务
- 搭建web服务器之Apache服务器简单搭建过程记录
- 记录Apache服务启动失败的解决过程
- AJAX及使用E4X编写Web服务脚本
- Apache、Tomcat、mysql与Java Web开发环境学习记录(20070410)
- 使用Apache Axis部署 Web服务时的常见问题及其解决方法(转)
- CentOS4.2安装apache2.2,mysql5,php5过程记录
- 使用Apache Axis部署 Web服务时的常见问题及其解决方法(IBM 官方文档)
- 为 SOAP/HTTP Web 服务编写可靠的客户机
- 步进电机程序编写过程的记录!
- 不使用Web服务器编写SOAP服务程序相关联接
- windows下配置php5+apache2.2+mysql5过程记录
- 使用Apache Axis部署 Web服务时的常见问题及其解决方法
- 自己动手编写Web服务工具[解析]
- Windows2000下的tomcat+apache的web服务整合
- 然后编写Windows客户端和Web客户端消费该服务
- 一次web项目从Weblogic服务到oracle AS10gR2的迁移过程