基于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可以支持基本类型,针对集合类型时,需要配置,返回类型或参数类型为基本类型时不需要特殊配置。
<return-type/>为配置返回类型,componentType属性代表返回的集合中所包含的类,此类可以是自定义的对象,也可以是基本类型,例如java.lang.String
index="0"代表方法的参数的序号,0即第一个参数。 当参数为基本类型时可以不用配置
componentType代表集合参数内包含的类型,也可以为自定义对象

 

 

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 java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.crimson.tree.XmlDocument;
import org.codehaus.xfire.client.Client;

import org.w3c.dom.*;

public class WebServices {
 public static void main(String[] args) throws Exception {
  
  
  /**
   * 调用接口创建Client
   */
  Client client = new Client(
    new URL(
      "http://127.0.0.1:7001/jdqb/services/JdqbInterface?wsdl"));
 

client.addOutHandler(new ClientAuthenticationHandler("abcd","1234")); 

 
  /**
   * 调用接口方法(getList就是我们接口中定义的)
   */
  Object[] results = client.invoke("getList",
    new String[] { "0020100400000009" });
  /**
   * 得到了返回的数据文件,数据被封装在了一个XmlDocument里
   * ,获得XmlDocument后可以对XmlDocument进行解析得到目标文件,
   * 具体的解析XmlDocument的方法很多就不啰嗦了
   */
  XmlDocument doc = (XmlDocument) results[0];

 

 


 

 

 

 

 

 

同时修改services.xml,绑定Handler


 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
 <xfire>
    <inHandlers>
      <handler handlerClass="services.jdqb.Test">
      </handler>
    </inHandlers>
  </xfire>
 <service>
  <name>HelloWordwebservices</name>
  <serviceClass>helloword.IHelloWordwebservices</serviceClass>
  <implementationClass>
   helloword.HelloWordwebservicesImpl
  </implementationClass>

 <inHandlers>  
          <handler  handlerClass ="services.AuthenticationHandler" ></handler>  
         </inHandlers>
  <style>wrapped</style>
  <use>literal</use>
  <scope>application</scope>
 </service></beans>

 

权限控制开发完毕,使用abcd@1234,可以正常访问WS,如果用错误帐号,则会报异常


 

使用abcd@1234,可以正常访问WS,如果用错误帐号,则会报异常

 

 

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,整合完成。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值