CXF webservice

来源:互联网 发布:广发白发大数据001731 编辑:程序博客网 时间:2024/06/11 22:03
说实话,一切知识只要你细心,都能在官网找到,但有些朋友浪费很长时间,就是搞不懂。戒骄戒躁,静下心来。
最近有个同事,凡事都和犟嘴,我躲都躲不了,言必称百度,网易,facebook,google,多小的问题都能上升到哥德巴赫猜想的理论高度,而实际上工作效率极其低下。
我这里想说的是, 少些理论多些实际,你看的见的理论都是从你看不见的地方总结出来的。一步一个脚印吧。

cxf简单不能在简单的webservice发布,难点只有一个,那就是与jdk6冲突问题。网上许多解决方案,但是忽略了一个,jar包版本问题。

${JAVA_HOME}\jdk6\jre\lib\endorsed
在次检查CXF中的jar包,是否是2.2.1.1以上版本,若不然还是报错。删除其他的jax-api 开头的jar必须删除要不还是冲突。

2:服务端代码

package com.cxf.service.server;


import java.util.List;

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


/**
  * This class was generated by Apache CXF 2.3.3
  * 2012- 05- 18T15:26:41.003+08:00
  * Generated source version: 2.3.3
  *
  */
 
@WebService ( name = "orderService" )
public interface OrderService {

     String sayHi( @WebParam(name= "text")String text);
    String sayHiToUser(User user);
    String[] SayHiToUserList(List<User> userList);
}



实现类:

package com.cxf.service.server;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.jws.WebService;

@WebService (endpointInterface = "com.cxf.service.server.OrderService" , serviceName = "orderService" )
public class OrderProcessImpl implements OrderService {

     Map<Integer, User> users = new LinkedHashMap<Integer, User>();

      public String sayHi(String text) {
           return "Hello " + text;
     }

      public String sayHiToUser(User user) {
           users.put( users.size() + 1, user);
           return "Hello " + user.getName();
     }

      public String[] SayHiToUserList(List<User> userList) {
          String[] result = new String[userList.size()];
           int i = 0;
           for (User u : userList) {
              result[i] = "Hello " + u.getName();
              i++;
          }
           return result;
     }
}
2:web.xml
<? xml version ="1.0" encoding= "UTF-8" ?>
<! DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd" >
< web-app>
      <context-param >
           <param-name >contextConfigLocation </ param-name>
           <param-value >WEB-INF/beans.xml </ param-value>
      </context-param >


      <listener >
           <listener-class >
               org.springframework.web.context.ContextLoaderListener
           </ listener-class>
      </listener >
      <servlet >
           <servlet-name >CXFServlet </ servlet-name>
           <display-name >CXF Servlet </ display-name>
           <servlet-class >
              org.apache.cxf.transport.servlet.CXFServlet
           </ servlet-class>
           <init-param >
               <param-name >config-location </ param-name>
                <param-value >/WEB-INF/beans.xml </ param-value>
           </ init-param>
           <load-on-startup >1 </ load-on-startup>
      </servlet >

      <servlet-mapping >
           <servlet-name >CXFServlet </ servlet-name>
           <url-pattern >/services/* </ url-pattern>
      </servlet-mapping >

</ web-app>
源码就不上传了,太简单了。
3:客户端代码,为了避免兼容性,也是本人太懒我采用的是自动代码生成。请看ant文件内容:

<?xml version="1.0"?>
<project name= "cxf wsdl2java" basedir= "." default= "cxfWSDLToJava">   
   <property name="cxf.home" location = "${basedir}/WebRoot/WEB-INF/"/>


   <path id="cxf.classpath" >
      <fileset dir="${cxf.home}/lib" >
         <include name= "**/*.jar"/>
      </fileset>
   </path>     
   <target name="cxfWSDLToJava" >
      <java classname= "org.apache.cxf.tools.wsdlto.WSDLToJava" fork= "true">
         <arg value= "-client"/>
         <arg value= "-d"/>
         <arg value= "client"/>
         <arg value= "http://localhost:8080/webserviceCXF/services/OrderService?wsdl" />
         <classpath>
            <path refid= "cxf.classpath"/>
         </classpath>
      </java>
   </target>
</project>

原创粉丝点击