Web服务cxf框架发布2
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本人声明。否则将追究法律责任。 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/article/details/9320053
一、CXF的介绍
Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成。CXF框架是一种基于servlet技术的SOA应用开发框架,要正常运用基于CXF应用框架开发的企业应用,除了CXF应用本身之外,还需要JDK和servlet容器的支持。
二、CXF的准备条件
所需要的jar包:
xmlbeans-2.4.0.jar
wss4j-1.5.9.jar
jetty-server-7.1.6.v20100715.jar
jetty-util-7.1.6.v20100715.jar
geronimo-ws-metadata_2.0_spec-1.1.3.jar
geronimo-activation_1.1_spec-1.1.jar
geronimo-servlet_3.0_spec-1.0.jar
velocity-1.6.4.jar
jaxb-xjc-2.2.1.1.jar
xml-resolver-1.2.jar
wsdl4j-1.6.2.jar
cxf-2.3.0.jar
XmlSchema-1.4.7.jar
jaxb-api-2.2.1.jar
jaxb-impl-2.2.1.1.jar
neethi-2.0.4.jar
geronimo-annotation_1.0_spec-1.1.1.jar
geronimo-stax-api_1.0_spec-1.0.1.jar
下载地址:http://download.csdn.net/detail/ch656409110/5748183 (取自己需要的jar包)
三、创建webservice服务端
1、先将jar包放入lib目录
2、在web.xml中配置CXF框架的核心servlet
1 <!-- CXF --> 2 <servlet> 3 <servlet-name>CXFServlet</servlet-name> 4 <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 5 <load-on-startup>1</load-on-startup> 6 </servlet> 7 <servlet-mapping> 8 <servlet-name>CXFServlet</servlet-name> 9 <url-pattern>/services/*</url-pattern> 10 </servlet-mapping>
3、在applicationContext.xml中导入xml,并且发布webservice服务。
5、保存代码,发布项目,启动tomact。
在地址栏输入:http://localhost:8080/house/services/houseWebService?wsdl 即可看到发布的服务端的明细。
显示如下:
这就表示CXF发布的webservice服务端成功了。
6、通过客户端调用服务端webservice。
axis的客户端访问:
public static void main(String[] args) throws ServiceException, RemoteException, MalformedURLException { String xmlStr = "<?xml version=\"0\" encoding=\"UTF-8\"?>" + " <facelook>" + " <condition>" + " <name>家</name>" + " <description></description>" + " <pageno></pageno>" + " <pagesize></pagesize>" + " </condition>" + " </facelook>"; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress("http://localhost:8080/facelook/services/facelookWebService?wsdl"); QName qName = new QName("http://server.webservice.facelook.com/", "getAlbumList"); call.setOperationName(qName); call.setUseSOAPAction(true); //这下面两行一定要加上,否则接收在服务器端收不到。 call.addParameter("xmlStr", XMLType.XSD_STRING, ParameterMode.IN); call.setReturnType(XMLType.XSD_STRING); String result = (String) call.invoke(new Object[] { xmlStr }); System.out.println(result); //将返回的字符串转换成list集合 //JSONArray array = JSONArray.fromObject(result); //List<Album> list = JSONArray.toList(array,Album.class);
CXF客户端访问:
public static void main(String[] args) throws Exception { //这个是用cxf 客户端访问cxf部署的webservice服务 //千万记住,访问cxf的webservice必须加上namespace ,否则通不过 //现在又另外一个问题,传递过去的参数服务端接收不到 JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); org.apache.cxf.endpoint.Client client = dcf.createClient("http://localhost:8080/facelook/services/facelookWebService?wsdl"); //url为调用webService的wsdl地址 QName name=new QName("http://server.webservice.facelook.com/","getAlbumList"); //namespace是命名空间,methodName是方法名 String xmlStr = "<?xml version=\"0\" encoding=\"UTF-8\"?>" + " <facelook>" + " <condition>" + " <name>家</name>" + " <description></description>" + " <pageno></pageno>" + " <pagesize></pagesize>" + " </condition>" + " </facelook>"; //paramvalue为参数值 Object[] objects=client.invoke(name,xmlStr); //调用web Service//输出调用结果 System.out.println(objects[0].toString()); }
在这里面传递的xml规范由 服务端自己规范好了,然后去解析、获取参数,执行相应的操作,返回想要的结果给调用的客户端。。