应用XFire开发WebService实例 xfire+myeclipse+weblogic 8

本文详细介绍如何使用XFire框架搭建Web服务及客户端,涵盖XFire特性、Weblogic配置、客户端调用等核心步骤。

1. XFire介绍

XFireAxis是新一代的java web服务框架。XFire提供了非常方便的API,使用这些API可以开发面向服务(SOA)的程序。他比axis性能要高,支持各种标准,性能优良,基于低内存的STAX模型,也是其于流的XML

支持多个重要的Web Service标准,包括SOAPWSDLWS-I Basic ProfileWSAddressingWS-Security

高性能的SOAP

可选的绑定(binding)方式,如POJOXMLBeansJAXB1.1JAXB2.0CastorJiBX

支持JSR181 API

多种传输方式,如HTTPJMSXMPPInJVM

灵活的接口

支持多个容器,如SpringPico

关于XFire就知道这么多,关于它的更祥细的资料或更深层次东西,就不去研究了,当然关于webservice的基本的知识还要学习的。作为技术人员不能光知其然,不知其所以然。(行了,又废话了)

2. 准备

在开始介绍开发实例之前,你首先要准备工具有:eclipseMyeclipseweblogic8,当然你也可以自己下载最新xfirehttp://repository.codehaus.org/org/codehaus/xfire/xfire-distribution/1.2.6/xfire-distribution-1.2.6.zip都准备好了 ,那就正式开工吧!

3. 开发

l  服务端

首先,eclipse新建一个webservice工程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

工程名字就叫JuneServiceweb rootcontent root都为June

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

一路next后,点击”Finish”,会看到如下结构,有了工具就是好,什么东西都自己生成,那先看看WEB-INF/web.xml都生成了什么吧。。

 

 

 

 

 

 

 

 

 

 

 

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <servlet>

        <servlet-name>XFireServlet</servlet-name>

        <servlet-class>

            org.codehaus.xfire.transport.http.XFireConfigurableServlet

        </servlet-class>

        <load-on-startup>0</load-on-startup>

    </servlet>

    <servlet-mapping>

        <servlet-name>XFireServlet</servlet-name>

        <url-pattern>/services/*</url-pattern>

    </servlet-mapping>

    <welcome-file-list>

        <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

</web-app>

在这个web.xml文件中定义了一个 XfireServlet,它负责提供Web Services,并提供

每个Web ServiceWSDL。如果你发布了一个Web Service,比如叫JuneService,你

就可以通过网址http://<server_url[:port]>/<context>/ services/JuneService来访问这个Web Service,并且通过网址http://<server_url[:port]>/<context>/

services/BookService?WSDL得到这个Web ServiceWSDL信息。

在源文件夹WEB-INF/src下新建一个java packagecom.june,在这个package下新建一个接口JuneService,(往往很多文章在介绍某项技术怎么用时,都会用helloworld这个例子,这个例子确实应用广泛,不过,咱换一种例子,或都另一种方式的HelloWorld)

这个接口定义了只定义了一个addDate方法。这个方法要求传入一个整数的参数,返回类型为一个字符串,用来得到当的时间的加上n天以后的日期,也很简单吧。。

package com.june;

 

public interface JuneService {

    public String addDate(int d);

}

最写一个实现这个接口的类

package com.june;

 

import java.util.Calendar;

 

public class JuneServiceImpl implements JuneService {

 

    public String addDate(int d) {

        Calendar cal = Calendar.getInstance();

        cal.add(Calendar.DATE, d);

        SimpleDateFormat dateFormat = new SimpleDateFormat();

        dateFormat.applyPattern("yyyyMMdd");

        return dateFormat.format(cal.getTime());

}

}

实现的很简单,就是加上天数后,直接tostring反回就可以了。

现在看来很简单吧,webserice的类跟普通的没有什么区别。好,继续吧。在WebServices目录下有一个services.xml文件,他就是用来发布你上面的这两个类做为webservice的,好,我们来配置一下这个文件。

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://xfire.codehaus.org/config/1.0">

    <service>

        <name>HelloService</name>

        <namespace>http://services.june.come/JuneService</namespace>

        <serviceClass>

            com.june.JuneService

        </serviceClass>

        <implementationClass>

            com.june.JuneServiceImpl

        </implementationClass>

    </service>

</beans>

好了,services.xml配置好了,关于services.xml配置结构这里也不说明了,大家可以去查资料,这里能说明问题就行了,那我就开始发布我们的webservice!说明一点,如果使用的不是eclipse工具,你可能要手动装services.xml文件考到WEB-INF/classes/META-INF/xfire下面。但是myeclipe都不用你关心这些事情,它替你搞定。

那就先发布到weblogic上,启动服务。在地址里输入http://localhost:7001/June/services

就可以看到我们的服务了,可是这是在其它web容器,但是在weblogic8上就不行,会出现如下的错误:org.springframework.beans.factory.BeanDefinitionStoreException: Error registering bean with name &apos;xfire.typeMappingRegistry&apos; defined in class path resource [org/codehaus/xfire/spring/xfire.xml]: Class that bean class [org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry] depends on not found; nested exception is java.lang.NoClassDefFoundError: null
   

这个问题是怎么会事,难道是配置错了,可是查来查去没有什么错误呀。那到google上找(真不知道现在程序员如果没有Google会是什么样?),找了好长时间,终于在xfire的官网上找到相关的资料。如下:

XFire requires a newer version of the javax.xml.namespace.QName than is included in weblogic.jar. The QName jar can be found here
   

  
    
  
To override the weblogic.jar with your own QName.jar, your need to do the following:
   

  
    
  
Add the QName JAR file (qname.jar) into the WEB-INF/lib folder in your WAR file 
   
Add a file weblogic.xml into the WEB-INF folder in your WAR file 
   
Below is an example weblogic.xml file:
   

  
    
  

  
    
  

  
    
  
<!DOCTYPE weblogic-web-app PUBLIC
   
  "-//BEA Systems, Inc.//DTD Web Application 8.1//EN"
   
  "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
   

  
    
  
<weblogic-web-app>
   
  <container-descriptor>
   
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
   
  </container-descriptor>
   
</weblogic-web-app>
   

  
    
  

  
    
  
The purpose of the weblogic.xml file is to tell WebLogic that the the WEB-INF/lib folder should take precedence over the global weblogic.jar file. This allows you to override the system classloader with your own application-specific JAR files.
   

  
    
  
The other solution is to put qname.jar at the beginning of WLS classpath in startweblogic batch file.
   

Qname.jar 下载地址:http://docs.codehaus.org/download/attachments/27836/qname.jar?version=1

原来发生错误原因,是因为weblogic.jar包的qname.jar太旧了,确切的说是 qname.class,好那就按照解决方法做,把qname.jar加到工程中,在weblogic server也加上qname.jar,还要在startweblogic.cmdclasspath里加放%WL_HOME%/server/lib/qname.jar,或是直接替换weblogic.jar里的qname.class,这样启动时就会用这个新包了。加入weblogic.xml就是要用户自己的jar先于系统的jar加载。好了,再重启一下服务。

再输入地址http://localhost:7001/June/services,好,终于看我们期盼已久的界面了。这样我们webservice服务就发布成功了。


  
   
  

  
   
   

  
   
   

  
   
   

  
   
   

  
   
   

  
   
   

  
   
   
 
 

  
   
  

  
   
   

  
   
   

  
   
   

  
   
   

  
   
   

  
   
   

  
   
   

  
    
  

 

l  客户端

有了服务端,那我们就应用一下,下面我们来做webservice的客户端。

首先建一个java application工程。就叫JuneClient吧,这个工程很简单,什么也没有,那我先建一下src源目录,并做为建我们的java package com.june,client来做为webservice的客户端。在工程上右键new->others选择webservice client.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

然后,next按照提示来设置。

Wsdl url填写刚发布成功的webservice的地址http://localhost:7001/June/services/JuneService?wsdl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这一步next,我这里的eclipse会报web 服务描述语言有错误,直接finishOK

这样,myeclipse就会自动生成客户端所需要的程序,有了工具确实是很方便,这样确实提高了开发效率,但是也造成了许多程序员没有工具就不会写程序,工具一通搞定,具体里面的关系也不用管,我觉得程序员不光要会用工具,还要知道工具怎么来实现的,为什么要设置这一步,在没有工具情况下,我应该先从那做起,明白原理后,再利于工具,才能对你有所提高。才能提高对整个系统的整体把握。不光要知其然,还要知其所然,这才是搞技术应有的态度。(哎,又废话了)

既然,自动生成了客户端程序,我们就来测试一下我们的webservice

package com.june.client;

 

import com.june.client.JuneServiceClient;

import com.june.client.JuneServicePortType;

public class JuneClientMain {

 

    public static void main(String[] args) {

        JuneServiceClient client = new JuneServiceClient();

        JuneServicePortType juneService = client.getJuneServiceHttpPort();

        // 调用服务

        String result = juneService.addDate(21);

        System.out.println(result);

    }

}
   

以上为通过webservice客户端调用web服务的一个例子,我调用webserviceaddDate()方法,参数传入21,然后运行这个程序。也就是说通过webservice应该返回当前日期加上21天那天的日期是多少,结果是:20080808。正好是北京奥运会的日子,好日子呀,哈哈。。

好了,其实webservice在好多地方都可以布署,也可以在web应用下,也可以桌面应用,C++、C#、VB等等。只要你提供相应的WSDL,告诉调用者相应的接口方法,只需传入相应的参数,就能得到你想要的结果。

 

 

 

关键点:

l  XFiremyeclipse
    
l  Weblogic8配置,qname.jarstartWebLogic.cmd
    
l  Web服务描述语言
    
l  Webservice客户端调用
    
内容概要:本文提出了一种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识和Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。
内容概要:本文围绕基于自适应神经模糊推理系统(ANFIS)智能控制器的可再生能源微电网功率管理系统展开研究,结合Simulink仿真实现,深入探讨了微电网中功率的智能调控与经济机组组合调度问题。通过引入ANFIS控制器,有效应对风能、光伏等可再生能源出力的波动性与不确定性,提升系统运行的稳定性与电能质量。研究内容涵盖微电网多源协调控制策略、功率平衡管理、优化调度模型构建及仿真验证,实现了对分布式电源、储能系统和负荷的协同优化,兼顾经济性与可靠性目标,并通过仿真平台验证了所提方法的有效性与优越性。; 适合人群:具备电力系统、自动化或新能源相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网能量管理、智能控制、能源优化等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高比例可再生能源接入场景下的微电网能量管理系统研发与教学实践;②为实现微电网功率稳定控制与经济高效运行提供先进的智能控制解决方案;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的仿真验证与方案优化。; 阅读建议:建议结合提供的Simulink模型与相关代码进行动手实践,重点关注ANFIS控制器的设计流程、规则库构建与参数调优方法,并通过与传统PID或MPC控制策略的对比实验,深入理解其在动态响应与鲁棒性方面的优势。同时可进一步拓展文中提出的优化调度逻辑,应用于多目标、多约束的复杂实际应用场景中。
内容概要:本文档聚焦于“直流电机双闭环控制Matlab仿真”,系统阐述了基于Matlab/Simulink平台实现直流电机双闭环控制系统(主要包括速度环与电流环)的设计与仿真全过程。通过构建直流电机的数学模型,结合PI控制器进行调控,实现对电机转速和电枢电流的高精度动态控制,验证控制策略的稳定性与响应性能。文档详细介绍了仿真模型的搭建流程、关键参数的整定方法、系统动态波形的分析手段以及仿真结果的有效性验证,体现了经典自动控制理论在实际电机系统中的工程应用,是电机控制与电力电子技术相结合的典型研究案例。; 适合人群:具备自动控制原理、电机与拖动基础、电力电子技术和Matlab/Simulink仿真能力的电气工程、自动化、机电一体化等专业的本科生、研究生及从事电机驱动系统研发的工程技术人员。; 使用场景及目标:①作为高校课程设计或实验教学材料,帮助学生深入理解双闭环调速系统的工作机理与工程实现;②服务于科研项目,为新型电机控制算法(如滑模、模糊PID等)的开发与性能对比提供基础仿真验证平台;③作为工业界产品前期设计的仿真工具,用于评估不同控制策略在动态响应、抗干扰能力和稳态精度方面的可行性。; 阅读建议:建议读者在学习过程中紧密结合自动控制理论知识,亲手在Simulink环境中搭建完整的双闭环仿真模型,通过反复调整PI控制器的比例与积分参数,观察并分析转速、电流的阶跃响应曲线,从而深刻理解反馈控制的本质、系统稳定性条件以及参数整定对动态性能的影响,进而掌握电机控制系统的设计精髓。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值