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

news/2025/2/21 6:23:22/

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客户端调用

http://www.ppmy.cn/news/546303.html

相关文章

Day8 xlrd和xlwt操作Excel文件

一、xlrd获取文件内容 import xlrd 1.打开Excel文件 wb xlrd.open_workbook(file/data1.xls) 2.获取所有工作表的表名 工作簿.sheet_names() names wb.sheet_names() print(names) 3.获取工作表 1)获取所有的工作表 - 工作簿.sheets() all_sheet wb.sheets() print(all_shee…

WinDLX实验:熟悉WinDLX

基本介绍 DLX是一个流水线处理器实例。 DLX以及一些机器的指令集结构的设计思想十分相似&#xff1a;具有一个简单Load/Store Load/Store指令集&#xff1b;注重指令的流水效率&#xff1b;简化指令的译码&#xff1b;高效支持编译器。 WinDLX 是一个基于Windows 的 DLX 模拟器…

WEB安全基础 - - - XRAY使用

目录 爬虫 被动扫描 生成ca证书 开启监听 浏览器代理设置 将浏览器设置为xray模式 BurpSuite联动XRAY 监听 Burpsuit主动扫描 XRAY脚本编写 爬虫 xray.exe webscan --basic-crawler http://xxx.com/ --html-output xray-xxx.html xray.exe ws --basic http://xxx.com/ -…

XLNet模型

1. 什么是XLNet XLNet 是一个类似 BERT 的模型&#xff0c;而不是完全不同的模型。总之&#xff0c;XLNet是一种通用的自回归预训练方法。它是CMU和Google Brain团队在2019年6月份发布的模型&#xff0c;最终&#xff0c;XLNet 在 20 个任务上超过了 BERT 的表现&#xff0c;并…

import xlwings时_pickle.UnpicklingError: invalid load key, ‘\x00‘解决方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

xlWarKey v2.0 手记

经过一周多的断断续续的奋战&#xff0c;终于赶在除夕夜把 xlWarKey v2.0 发布了。现在把一些心得体会记一下。 从去年 5 月 21 发布 1.2 版以来&#xff0c;到现在已经半年多了&#xff0c;由于上学期忙于找工作等一堆乱七八糟的事&#xff0c;一直没去更新它。但期间得到的反…

Linux用户信息关键文件详解

passwd文件说明 /etc/passwd文件记录了Linux所有用户的信息&#xff0c;是系统的关键文件之一。 文件格式内容如上图。 文件中的条目以“:”为分隔符&#xff0c;各个字段记录的信息依次为&#xff1a; 第一个字段&#xff1a;记录用户名 第二个字段&#xff1a;值x表示该用…

视频直播技术随笔

前言 昨天看到几个传统APP的功能菜单中也新增了直播功能&#xff0c;仔细观察现在手机上90%的应用增加了直播功能&#xff0c;感慨流媒体功能已遍布人们生活中的每个角落&#xff0c;所性今天就来仔细聊一聊我所了解的视频直播技术。当然视频直播领域博大精深&#xff0c;我了…