首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

应用CXF开发WebService的笔记_服务器端的

2012-10-06 
使用CXF开发WebService的笔记_服务器端的使用CXF开发WebService的笔记_服务器端的要实现的功能很简单,服务

使用CXF开发WebService的笔记_服务器端的

使用CXF开发WebService的笔记_服务器端的

要实现的功能很简单,服务器端提供一个根据登陆名查询用户密码的服务,输入参数为一个String类型的,返回值也是String类型,确实很简单,简单得不能再简单了。

这里就不解释CXF是什么含义、为什么要用CXF的这些学院派的问题,不知道答案的自己去baidu和google去查找。

?

2、实现步骤:

我们从一个空的web工程开始说起,一步一步演示如何操作和验证。

?

2.0 准备文件:

下载CXF的发布文件,下载地址是http://cxf.apache.org/download.html,我下载是的最新版本是2.2.7,解压缩之后直接进去apache-cxf-2.2.7/lib,把该目录下的jar文件单独保存起来,将来要导入到web工程中。一共有66个文件26MB多呢。

?

2.1 新建web工程 webproject,导入cxf的jar文件,然后修改web.xml的文件:

<context-param>

?????? <param-name>contextConfigLocation</param-name>

?????? <param-value>classpath*:application*.xml</param-value>

??? </context-param>?

??? <listener>

?????? <listener-class>

?????????? org.springframework.web.context.ContextLoaderListener

?????? </listener-class>

??? </listener>

??? <!—前面两个就不用多说了,下面还是我们要关注的CXF配置-->

??? <servlet>

?????? <servlet-name>CXFServlet</servlet-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>/services/*</url-pattern>

??? </servlet-mapping>

这只是序幕,下面进入服务的书写步骤了。

?

2.2 书写服务器端的服务和配置CXF

服务接口文件的代码如下:

package com.demo.service.userinfo;

?

import javax.jws.WebService;

?

@WebService? //使用jws的标注WebService

//如果不加这个标注,就不能被发布成web服务了,明白不?

public interface IUserService {

???

??? ????? public String getPassword(String loginName);

???

}

????

?????? 服务实现类文件的代码如下

package com.demo.service.userinfo.impl;

?

import javax.jws.WebService;

?

import com.demo.service.userinfo.IUserService;

?

@WebService //使用jws的标注WebService

//如果不加这个标注,就不能被发布成web服务了,明白不?

public class UserServiceImpl implements IUserService {

?

?? @Override

?? public String getPassword(String loginName) {

????? System.out.println("Server's getPassord() is called:"+loginName);

????? return loginName+"'s password=123456";

??????? //这是demo程序,所以随便写,正式开发还是把调试信息去掉吧

?? }

?

}

?

CXF的配置:在src配置一个文件applicationContext_cxf.xml,其内容如下:

<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-2.0.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">

?

??? <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" />

??? <!—这三行的配置不用去检查对应的路径下是否有对应的文件,因为cxf会自动生成的-->

?

<bean id="userService" class="com.demo.service.userinfo.impl.UserServiceImpl"/>

<!—userInfoService就不用解释了,这是典型的Spring配置,开发时建议采用Spring2.5的标注 -->

?

??? <jaxws:endpoint id="userWebService"

//这个要配置好,因为客户端要用到它呢,注意我用web来标识它

implementor="#userService" ?//这个是引用上面的userService

address="/callUserService">

//这个是调用web服务的地址,知道我为什么用call了吧,为了易于理解,right?

??? </jaxws:endpoint>

</beans>

上面的注释在我写程序时不会加这么多,第一个没有时间加,第二个也是多余的,所以建议ctrl+c和ctrl+v的某某同学注意一些啦,不要说我的程序有问题。

?

那现在有个问题:配置了这么多,怎么没有看到wsdl文件呢?没有wsdl文件,怎么知道做得对不对啊?根据上面的配置,访问wsdl的URL是多少啊?猜猜看?

??? http://127.0.0.1:8089/webproject/services/callUserService?wsdl

能想得出来访问wsdl的URL的值吗?(IP地址和端口号需要自己根据实际来改) 如果不能,你要好好反思一下啦。好,我们看看我们userService的wsdl的内容。参见附件的图片。

?

?

服务端的步骤做完了吗?你觉得差不多了吧?不对,还差最后一步,就是把客户端所需要的代码导成jar文件,返回发给客户端进行调试。那我们就完成这最后一步吧。

用鼠标同时选中com.demo.service.userinfo和com.demo.service.userinfo,然后:鼠标右键 —》 Export…. —》Java? —> Jar file —》选中保存路径和文件名,我这里存为“ws.userinfo.jar” 。

热点排行