基于weblogic8.x 的webservices开发
webservices的开源组件很多,这里我们选用的是MyEclipse集成的一个组件xfire,利用这个组件的最大好处就是配置简单,而且功能也十分的强大。 ? 在很多行业软件开发中用到的都是1.4的JDK,所以要求组件一定要支持。下面我就使用xfire+weblogic 8.x 开发做一个使用介绍。 ? XFire是codeHaus组织提供的一个开源框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,这种处理方式不仅充分发挥了POJO的作用,简化了Java应用转化为Web服务的步骤和过程,也直接降低了SOA的实现难度,用过xfire的朋友一定会这样的感触,对于xfire的基本配置及调用方式已经很多的相关文章,这里主要对xfire的权限管理的实现做一下详细的讲解。 ? 下面是我的包结构 ? ? ? ? 首先,我们就开始讲解怎样实现一个webservice;再讲解,怎样用xfire进行用户的权限验证和获取客户端IP进行验证;最后讲解怎么把webservices整合到我们的项目中去。 ? ? 第一步:实现一个简单的webservices 在MyEclipse里怎么建立一个xfire webservices工程,这个在我的资源里有对应的视频,如果看下面的内容看不太懂的话建议先下载视频看看。 ? 服务器端代码:
? 利用工具生成客户端的时候,会生成泛型来获取参数,但在JDK1.4下并不支持泛型,于是可以采用aegis绑定方法配置 方法是在接口类同目录下建一个文件名为 接口类名+.aegis.xml的文件,如下 IHelloWordwebservices.aegis.xml文件如下:
其中,method代表需要配置的方法名,由于XFire可以支持基本类型,针对集合类型时,需要配置,返回类型或参数类型为基本类型时不需要特殊配置。 ? ? web.xml ?
? services.xml
? 到此服务器端就写完了。 ? 部署到weblogic上,注意现在服务器配置才刚刚开始,如果不配置的话在tomcat上可以正常运行的的,但在weblogic上就会报错。 ? 第一个可能的错误DTD解析错误 weblogic8.1的版本,只支持jdk1.4和servlet2.3的规范,在web.xml的配置文件中需要将Myeclipse工具默认生成的
改为:
再启动就不会包DTD解析错误了 ? ? 第二个错误,将下载的xfire jar包导入lib,启动weblogic可能会报QName异常,结果到官方网站又去下了个QName.jar包,解压后把qname.class文件覆盖到weblogic路径 d:/bea/weblogic81/server/lib中有个weblogic.jar包,解压后可以看到javax.xml.namespace文件夹下也有个QName.class,我把这两个class反编译后看到原来weblogic.jar中的这个类的放在QName.jar包中都有,所以把QName.jar包中的QName.class覆盖过去,QName Exception排除 ? 第三:在Xfire1.2.6类中有依赖到spring包中的类,所以xfire还需要spring-1.2. 6和xben-spring-2.8的jar包,不然会报springframework的异常错误,因为services.xml文件中节点的读取需要依赖spring。(这个在建立工程的时候选择xfire 1.2Core 和心包时里面已经包含了spring的两个包,所以这个问题一般不会遇到,遇到的话就看看xfire 1.2Core 里有没包含,没有的话再加进去就ok了) ? 最后注意用JDK1.4编译运行哦。 ? 到此服务器全部搞定,在ie输入http://127.0.0.1:7001/webservices/services/Interface?wsdl就可以访问了哦,显示xml结构页面说明接口访问成功。 ? ? 客户端的开发
? 现在开始客户端的开发,客户端可以利用xfire wsdl 的url来生成,但生成的默认文件使用的是泛型,我们的JDK1.4是不支持的,所以最好还是手动的编写客户端吧,代码如下:
? 客户端编写完成,注意把客户端jar包导入到lib,所有jar包在我的资源了下载 ? ? ? XFire 通过 继承AbstractHandler 实现安全验证WebSerice是一种开放的web服务,任何人都可以访问,但我们有时候需要考虑只有付费用户才能使用WS,所以,我们就需要对WS加入安全验证机制,当然,可以利用防火墙的IP过滤,web应用的配置从最外层去隔离非法用户,但在内层,我们也可以使用SOAP Header的方式,由客户端发送验证数据,服务端验通过后基WS访问权限。(拦截器)
? ? ?首先,编写服务端验证类继承AuthenticationHandler ? ? 接着,在客户端编写类ClientAuthenticationHandler继承AbstractHandler ? ? ? 然后,在调用WebService的客户端中加入如下代码 ? client.addOutHandler(new ClientAuthenticationHandler("abcd","1234"));? ? 加入权限后代码如下: ? import java.net.URL; import org.apache.crimson.tree.XmlDocument; import org.w3c.dom.*; public class WebServices { client.addOutHandler(new ClientAuthenticationHandler("abcd","1234"));? ? ? ? ? ? ? ? ? ? 同时修改services.xml,绑定Handler ? <?xml version="1.0" encoding="UTF-8"?> ?<inHandlers>?? ? 权限控制开发完毕,使用abcd@1234,可以正常访问WS,如果用错误帐号,则会报异常 ? 使用abcd@1234,如果用错误帐号,则会报异常 ? ? xfire与web项目整合
xfire集成到项目中,有几个注意点: ????????????? 第一、在web.xml添加xfire servlet; ????????????? 第二、将META-INF/xfire/services.xml中要对外发布的web service类配置好; ????????????? 第三、把META-INF目录移到src下; ????????????? 第四、发布到应用服务器上;
? 所需jar包下载连接: ????????????? 第五、将web工程原有的META-INF文件夹删除,保留web-inf/classes里的META-INF,整合完成。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |