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,整合完成。
分享到:
相关推荐
【使用Myeclipse 8.5开发基于JAX-WS的Web-service实例】 在Web服务开发领域,JAX-WS(Java API for XML Web Services)是一种标准的、面向Java平台的Web服务编程模型,用于创建和消费Web服务。Myeclipse 8.5是一款...
本文将详细讨论如何在MyEclipse 5.0集成开发环境中配置基于WebLogic 9.2的J2EE开发环境。 首先,选择WebLogic 9.2的原因主要有两点: 1. **兼容性问题**:WebLogic 8支持的是J2EE 1.3,即Servlet 2.3规范。当在...
1. **冲突原因**:WebLogic 9.x 自带了内置的JAX-RS(Java API for RESTful Web Services)实现,而XFire 1.2.6 是一个早期的REST和SOAP服务框架,两者可能存在API或类库冲突。 2. **解决步骤**: - **隔离类加载...
- **版本特定的 WebLogic Web 服务信息**:提供了关于不同版本之间差异的信息,特别是 8.1 版本与 9.x 版本之间的区别。 - **WebLogic Web 服务功能概述**:总结了 WebLogic 提供的主要 Web 服务特性。 #### 二、...
3. **webservices.pdf** - Web服务:这部分内容讲解了WebLogic Server对WS-I(Web Services Interoperability)标准的支持,如何创建、发布和调用Web服务,以及WS-Security等安全性相关的议题。 4. **controls.pdf*...
在MyEclipse中配置...通过以上步骤,你已经在MyEclipse中成功配置了WebLogic服务器,现在可以方便地进行开发、测试和调试基于WebLogic的应用程序了。记得定期更新WebLogic和MyEclipse以获取最新的安全补丁和功能。
- 新建工程时,可以选择服务器,通过右键点击工程并选择`properties`,然后在`server`部分选择`WebLogic Platform Server 8.x`来指定WebLogic Server。 3. **构建EJB Module** - 创建EJB Module,可以通过`New`,...
- **开发环境**:PHP可以在多种操作系统和Web服务器上运行,包括Windows、Unix/Linux和Mac OS X。支持Apache、Nginx、IIS等Web服务器。 - **技术优势**:PHP语法简洁,易于学习。它具有良好的数据库交互能力,尤其是...
11.2.8. 更新数据库 11.2.9. 获取自动生成的主键 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 11.3.4. SingleConnectionDataSource类 11.3.5...
11.2.8. 更新数据库 11.2.9. 获取自动生成的主键 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 11.3.4. SingleConnectionDataSource类 11.3.5...
提到的Oracle Web服务发展规划,涉及到了不同版本的WebLogic Server(WLS),比如WLS 10.x,WLS 9.x,以及FMW 11g R1和OAS 10.1.3.x,体现了Oracle在Web服务技术演进中的持续投入和发展策略。 Oracle Web服务产品...
在搭建Web开发环境时,尤其是对于初学者而言,选择合适的工具和平台至关重要。"Setup WAMP and PHP Designer 8 for web development"这个话题主要涵盖了如何在Windows操作系统下配置一个用于PHP开发的本地环境,即...
当我们谈论"j2EE实现安全的AXIS Web服务"时,这意味着我们要在Java 2 Platform, Enterprise Edition (j2EE)环境中构建安全的、基于AXIS的Web服务。在这个主题下,我们将探讨以下几个关键知识点: 1. **j2EE平台**:...
14.2.4 使用Web Services Explorer访问Web Service 250 14.2.5 使用Java客户端访问Web Service 251 14.3 向现有Web项目加入Web Service功能 252 14.4 创建直接调用Internet中的Web Service的客户端 252 14.4.1 创建...
**WebService CXF 学习——入门篇** **一、WebService CXF 由来与目标** ...无论是基于SOAP还是RESTful风格,CXF都能提供相应的支持,同时具备良好的可扩展性和易用性,是Java开发人员在构建分布式系统时的重要选择。
- **WSDL(Web Services Description Language)**:定义Web服务接口的XML格式。 - **UDDI(Universal Description, Discovery, and Integration)**:Web服务目录,查找和发布Web服务。 8. **容器管理和部署** ...
11. **JAX-RS(Java API for RESTful Web Services)**:JAX-RS是Java中创建RESTful Web服务的标准,使得开发人员可以轻松地创建基于HTTP的、无状态的服务。 学习J2EE基础知识需要理解这些核心组件的原理和用法,并...
- SOAP(Simple Object Access Protocol)是基于XML的Web服务协议,理解WSDL(Web Services Description Language)和UDDI(Universal Description, Discovery, and Integration)。 - RESTful风格的API设计原则,...