`
shixy
  • 浏览: 141077 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【转】Apache CXF入门范例以及对传递List<Map>类型的疑惑

    博客分类:
  • java
阅读更多

转自:http://icecrystal.iteye.com/blog/532743

 

在选择WebService框架的过程中,偶最终选择了Apache CXF,純粹伿諟銦爲听说它与Spring的无缝整合

想当初用Axis的时候,因为没有太好的办法让Spring能够集成Axis,只好平白无故地多出一个WebService代理类,让偶的感觉很是不爽

 

偶要在此记载一下CXF的一些入门知识

首珗,倌網哋址諟http://cxf.apache.org/,里面可以找到User's Guide和download地址,偶的版本是目前最新的

apache-cxf-2.2.5

 

先来做一个最简单的入门级别例子吧,也就是经典的HelloWord

Server端代码

   WebService接口HelloService.java

Java代码 复制代码 收藏代码
  1. package cfx.server;   
  2.   
  3. import javax.jws.WebMethod;   
  4. import javax.jws.WebParam;   
  5. import javax.jws.WebService;   
  6.   
  7. @WebService  
  8. public interface HelloService {   
  9.     @WebMethod  
  10.     String sayHi(@WebParam String name);   
  11. }  
package cfx.server;

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

@WebService
public interface HelloService {
	@WebMethod
	String sayHi(@WebParam String name);
}

 实现类HelloServiceImpl.java

Java代码 复制代码 收藏代码
  1. public class HelloServiceImpl implements HelloService {   
  2.     public String sayHi(String name) {   
  3.         System.out.println("HelloServiceImpl.sayHi called");   
  4.         return "Hello"+name;   
  5. }  
public class HelloServiceImpl implements HelloService {
	public String sayHi(String name) {
		System.out.println("HelloServiceImpl.sayHi called");
		return "Hello"+name;
}

  WebService配置文件:cxf-servlet.xml(可放置于WEB-INF目录下)

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.       xmlns:jaxws="http://cxf.apache.org/jaxws"  
  5.       xmlns:soap="http://cxf.apache.org/bindings/soap"  
  6.       xsi:schemaLocation="   
  7. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd   
  8. http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd   
  9. http://cxf.apache.org/jaxws   
  10. http://cxf.apache.org/schemas/jaxws.xsd">  
  11.   <jaxws:server id="jaxwsService" serviceClass="cfx.server.HelloService" address="/hello">  
  12.     <jaxws:serviceBean>  
  13.         <bean class="cfx.server.HelloServiceImpl" />  
  14.     </jaxws:serviceBean>  
  15.   </jaxws:server>  
  16. </beans>  
<?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"
      xmlns:soap="http://cxf.apache.org/bindings/soap"
      xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
  <jaxws:server id="jaxwsService" serviceClass="cfx.server.HelloService" address="/hello">
  	<jaxws:serviceBean>
  		<bean class="cfx.server.HelloServiceImpl" />
  	</jaxws:serviceBean>
  </jaxws:server>
</beans>

 web.xml代码,用于添加CXFServlet这个处理webservice请求的控制器类

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
  4.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  5.      
  6.   <servlet>  
  7.     <description>Apache CXF Endpoint</description>  
  8.     <display-name>cxf</display-name>  
  9.     <servlet-name>cxf</servlet-name>  
  10.     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
  11.     <load-on-startup>1</load-on-startup>  
  12.   </servlet>  
  13.   <servlet-mapping>  
  14.     <servlet-name>cxf</servlet-name>  
  15.     <url-pattern>/services/*</url-pattern>  
  16.   </servlet-mapping>  
  17.   <session-config>  
  18.     <session-timeout>60</session-timeout>  
  19.   </session-config>  
  20. </web-app>  
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  
  <servlet>
    <description>Apache CXF Endpoint</description>
    <display-name>cxf</display-name>
    <servlet-name>cxf</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>cxf</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>60</session-timeout>
  </session-config>
</web-app>

Client端测试代码

Java代码 复制代码 收藏代码
  1. public class CXF {   
  2.     public static void main(String[] args) {   
  3.         JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();   
  4.         factory.getInInterceptors().add(new LoggingInInterceptor());   
  5.         factory.getOutInterceptors().add(new LoggingOutInterceptor());   
  6.         factory.setServiceClass(HelloService.class);   
  7.         factory.setAddress("http://localhost:8080/cxf/services/hello");   
  8.         HelloService client = (HelloService) factory.create();   
  9.         String reply = client.sayHi("特蕾莎");   
  10.         System.out.println("Server said: " + reply);   
  11. }  
public class CXF {
	public static void main(String[] args) {
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.getInInterceptors().add(new LoggingInInterceptor());
		factory.getOutInterceptors().add(new LoggingOutInterceptor());
		factory.setServiceClass(HelloService.class);
		factory.setAddress("http://localhost:8080/cxf/services/hello");
		HelloService client = (HelloService) factory.create();
		String reply = client.sayHi("特蕾莎");
		System.out.println("Server said: " + reply);
}

*****************************************************************************

 怎么样,是不是很简单啊!现在再来一个和Spring整合的例子

注意,Server端和Client端都要通过Spring-bean的方式整合

Server端现在有四个文件,假设是

HelloService.java

HelloServiceImpl.java

HelloDao.java

HelloDaoImpl.java

在HelloServiceImpl中存在一个HelloDao的属性,代码省略如下

Java代码 复制代码 收藏代码
  1. public class HelloServiceImpl implements HelloService {   
  2.     private HelloDao dao;   
  3.     public String sayHi(String name) {   
  4.         System.out.println("HelloServiceImpl.sayHi called");   
  5.         return dao.getString(name);   
  6.     }   
  7. }  
public class HelloServiceImpl implements HelloService {
	private HelloDao dao;
	public String sayHi(String name) {
		System.out.println("HelloServiceImpl.sayHi called");
		return dao.getString(name);
	}
}

 HelloDaoImpl用于处理持久化,代码省略咯

需要修改的是配置文件,此时可以这样改

首先在web.xml里加入Spring监听器

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
  4.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  5.   <listener>  
  6.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  7.   </listener>  
  8.   <context-param>  
  9.     <param-name>contextConfigLocation</param-name>  
  10.     <param-value>classpath:applicationContext*.xml</param-value>  
  11.   </context-param>  
  12.   <servlet>  
  13.     <description>Apache CXF Endpoint</description>  
  14.     <display-name>cxf</display-name>  
  15.     <servlet-name>cxf</servlet-name>  
  16.     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
  17.     <load-on-startup>1</load-on-startup>  
  18.   </servlet>  
  19.   <servlet-mapping>  
  20.     <servlet-name>cxf</servlet-name>  
  21.     <url-pattern>/services/*</url-pattern>  
  22.   </servlet-mapping>  
  23.   <session-config>  
  24.     <session-timeout>60</session-timeout>  
  25.   </session-config>  
  26. </web-app>  
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext*.xml</param-value>
  </context-param>
  <servlet>
    <description>Apache CXF Endpoint</description>
    <display-name>cxf</display-name>
    <servlet-name>cxf</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>cxf</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>60</session-timeout>
  </session-config>
</web-app>

 橪銗WEB-INF/cxf-servlet這個忟件可以省略咯

把一个标准的spring-bean文件放在src下(即classes目录下),要让人一看就知道spring大哥进来咯

applicationContext.xml

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.   xmlns:jaxws="http://cxf.apache.org/jaxws"  
  4.   xsi:schemaLocation="   
  5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd   
  6. http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">  
  7.   
  8.   <import resource="classpath:META-INF/cxf/cxf.xml" />  
  9.   <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />  
  10.   <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  
  11.   <bean id="helloDao" class="cfx.server.HelloDaoImpl" />  
  12.   <jaxws:server id="jaxwsService" serviceClass="cfx.server.HelloService" address="/hello">  
  13.     <jaxws:serviceBean>  
  14.       <bean id="helloService" class="cfx.server.HelloServiceImpl">  
  15.         <property name="dao" ref="helloDao" />  
  16.       </bean>  
  17.     </jaxws:serviceBean>  
  18.   </jaxws:server>  
  19. </beans>  
<?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">

  <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="helloDao" class="cfx.server.HelloDaoImpl" />
  <jaxws:server id="jaxwsService" serviceClass="cfx.server.HelloService" address="/hello">
    <jaxws:serviceBean>
      <bean id="helloService" class="cfx.server.HelloServiceImpl">
        <property name="dao" ref="helloDao" />
      </bean>
    </jaxws:serviceBean>
  </jaxws:server>
</beans>

 

這樣啟動服務器的时候,spring就自动进行bean的注入以及WebService服务的发布了

接下来是客户端代码

銦爲諟普通Java,所以就简单配一下愙戸端的spring文件了

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.   xmlns:jaxws="http://cxf.apache.org/jaxws"  
  5.   xsi:schemaLocation="   
  6. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd   
  7. http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">  
  8.   
  9.   <bean id="HelloService" class="cfx.server.HelloService" factory-bean="clientFactory" factory-method="create" />  
  10.   <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">  
  11.     <property name="serviceClass" value="cfx.server.HelloService" />  
  12.     <property name="address" value="http://localhost:8080/cxf/services/hello" />  
  13.   </bean>  
  14.   
  15. </beans>  
<?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/schema/jaxws.xsd">

  <bean id="HelloService" class="cfx.server.HelloService" factory-bean="clientFactory" factory-method="create" />
  <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
    <property name="serviceClass" value="cfx.server.HelloService" />
    <property name="address" value="http://localhost:8080/cxf/services/hello" />
  </bean>

</beans>

 CXFClientTest.java

Java代码 复制代码 收藏代码
  1. public static void main(String[] args) {   
  2.     ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "cfx/client/client-beans.xml" });   
  3.     HelloService client = (HelloService) context.getBean("HelloService");   
  4.     testString(client);   
  5. }   
  6. static void testString(HelloService client) {   
  7.     String reply = client.sayHi("特蕾莎");   
  8.     System.out.println("Server said: " + reply);   
  9. }  
public static void main(String[] args) {
	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "cfx/client/client-beans.xml" });
	HelloService client = (HelloService) context.getBean("HelloService");
	testString(client);
}
static void testString(HelloService client) {
	String reply = client.sayHi("特蕾莎");
	System.out.println("Server said: " + reply);
}

 *************************************************************************

 

然后是复杂数据类型的问题,经过测试,发觉基本数据类型和List都是没有问题的,我的测试方法包括

Java代码 复制代码 收藏代码
  1. @WebMethod  
  2. String sayHi(@WebParam String name);   
  3.   
  4. @WebMethod  
  5. List<Integer> getList(@WebParam List<String> strs);   
  6.        
  7. @WebMethod  
  8. List<User> getJavaBean();  
@WebMethod
String sayHi(@WebParam String name);

@WebMethod
List<Integer> getList(@WebParam List<String> strs);
	
@WebMethod
List<User> getJavaBean();

 

但是传递Map时,就出现问题了,所以参照了user's guide,得到如下解决办法

测试某个方法的参数和返回值都是Map类型

Java代码 复制代码 收藏代码
  1. @WebMethod  
  2. @XmlJavaTypeAdapter(MapAdapter.class)   
  3. Map<String, String> getMap(@WebParam @XmlJavaTypeAdapter(MapAdapter.class) Map<String, String> map);  
@WebMethod
@XmlJavaTypeAdapter(MapAdapter.class)
Map<String, String> getMap(@WebParam @XmlJavaTypeAdapter(MapAdapter.class) Map<String, String> map);

 

 

MapAdapter是我自己写的用於數據類型轉換的适配器类,代码如下

Java代码 复制代码 收藏代码
  1. public class MapAdapter extends XmlAdapter<MapConvertor, Map<String, Object>> {   
  2.   
  3.     @Override  
  4.     public MapConvertor marshal(Map<String, Object> map) throws Exception {   
  5.         MapConvertor convertor = new MapConvertor();   
  6.         for(Map.Entry<String, Object> entry:map.entrySet()){   
  7.             MapConvertor.MapEntry e = new MapConvertor.MapEntry(entry);   
  8.             convertor.addEntry(e);   
  9.         }   
  10.         return convertor;   
  11.     }   
  12.   
  13.     @Override  
  14.     public Map<String, Object> unmarshal(MapConvertor map) throws Exception {   
  15.         Map<String, Object> result = new HashMap<String,Object>();   
  16.         for(MapConvertor.MapEntry e :map.getEntries()){   
  17.             result.put(e.getKey(), e.getValue());   
  18.         }   
  19.         return result;   
  20.     }   
  21.   
  22. }  
public class MapAdapter extends XmlAdapter<MapConvertor, Map<String, Object>> {

	@Override
	public MapConvertor marshal(Map<String, Object> map) throws Exception {
		MapConvertor convertor = new MapConvertor();
		for(Map.Entry<String, Object> entry:map.entrySet()){
			MapConvertor.MapEntry e = new MapConvertor.MapEntry(entry);
			convertor.addEntry(e);
		}
		return convertor;
	}

	@Override
	public Map<String, Object> unmarshal(MapConvertor map) throws Exception {
		Map<String, Object> result = new HashMap<String,Object>();
		for(MapConvertor.MapEntry e :map.getEntries()){
			result.put(e.getKey(), e.getValue());
		}
		return result;
	}

}

 MapConvertor.java Map格式转换类

Java代码 复制代码 收藏代码
  1. @XmlType(name = "MapConvertor")   
  2. @XmlAccessorType(XmlAccessType.FIELD)   
  3. public class MapConvertor {   
  4.        
  5.     private List<MapEntry> entries = new ArrayList<MapEntry>();   
  6.        
  7.     public void addEntry(MapEntry entry){   
  8.         entries.add(entry);   
  9.     }   
  10.        
  11.     public static class MapEntry{   
  12.         public MapEntry() {   
  13.             super();   
  14.         }   
  15.         public MapEntry(Map.Entry<String,Object> entry) {   
  16.             super();   
  17.             this.key = entry.getKey();   
  18.             this.value = entry.getValue();   
  19.         }   
  20.         public MapEntry(String key,Object value) {   
  21.             super();   
  22.             this.key = key;   
  23.             this.value = value;   
  24.         }   
  25.         private String key;   
  26.         private Object value;   
  27.         public String getKey() {   
  28.             return key;    </
    分享到:
    评论
    2 楼 woyuanliulian 2012-04-17  
    list<Map>  到底应该怎么传才能成功?
    1 楼 pangchaofu 2011-09-02  
    不错,学习了。

相关推荐

    spring,cxf,restful发布webservice传递List,Map,List&lt;Map&gt;

    spring,cxf,restful发布webservice传递复杂对象,例如List,Map,List&lt;Map&gt;

    springboot+cxf实现webservice示例

    &lt;groupId&gt;org.apache.cxf&lt;/groupId&gt; &lt;artifactId&gt;cxf-spring-boot-starter-jaxws&lt;/artifactId&gt; &lt;version&gt;3.1.7&lt;/version&gt; &lt;/dependency&gt; &lt;!-- CXF webservice --&gt; &lt;dependency&gt; &lt;groupId&gt;org.spring...

    wsdl2java源码-springboot-apachecxf-client:本项目演示了如何在Springboot中实现apachecxf

    &lt;groupId&gt;org.apache.cxf&lt;/groupId&gt; &lt;artifactId&gt;cxf-codegen-plugin&lt;/artifactId&gt; &lt;version&gt;3.2.0&lt;/version&gt; &lt;executions&gt; &lt;execution&gt; &lt;id&gt;generate-sources&lt;/id&gt; &lt;phase&gt;g

    Apache CXF

    Apache CXF Apache CXF Apache CXF Apache CXF Apache CXF Apache CXF Apache CXF Apache CXF Apache CXF

    基于Apache CXF构建SOA应用

    Apache CXF 框架是一个比较有前途的开源 Web Services 框架,也是构建 SOA 架构应用的利器。本书采用案例源码和解说形式全面介绍 Apache CXF 框架的功能。 本书共 15 章,大致分为三个部分。第一部分介绍关于 SOA 和...

    基于Apache CXF构建SOA应用 随书源代码

    2013版的 &lt;基于Apache CXF构建SOA应用&gt; 源码 Apache CXF是一个开放源码的Web服务框架,提供了一个易于使用,用于开发Web Services标准为基础的编程模型。本书主要介绍Apache CXF在构建SOA架构各个方面的应用说明和...

    apache cxf 用户手册

    apache cxf 2.1.3 的用户手册

    Developing Web Services with Apache CXF and Axis2(3rd Edition).zip

    CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First...

    Apache CXF Web service 资料

    详细的从入门到精通, 手把手的教你做WEB SERVICE 该资源借花献佛,是一个高手写的,我在这里借花献佛,推广推广,让大家多一个学习的机会,吃水不忘挖井人,轻大家也谢谢写该文档的高手

    apache-cxf-3.5.0.zip

    Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。

    CXF WebService整合Spring示例工程代码demo

    &lt;servlet-class&gt;org.apache.cxf.transport.servlet.CXFServlet&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;CXFService&lt;/servlet-name&gt; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; &lt;/servlet-...

    apache-cxf-3.0.4

    CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First...

    apache-cxf-3.1.8.zip

    apache cxf 3.1.8 java web service 开源框架

    Apache CXF Web Service Development

    Apache CXF Web Service Development

    WebService with Apache CXF

    Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且...

    apache-cxf 2.2.8版本下载

    apache-cxf 2.2.8 支持webservice 反正生成服务端代码,附带一个文本文件。希望有需要的小伙伴可以下载来看。

    apache cxf 一个helloworld的例子

    apache cxf 一个helloworld的例子

    两本关于apache cxf的书籍,英文

    Apache CXF Web Service Development Developing+Web+Services+with+Apache+CXF+and+Axis2+(3rd+Edition)

    Apache Cxf 安全认证

    Apache Cxf 安全认证,includes some source code to test

Global site tag (gtag.js) - Google Analytics