700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > JAVA webservice之xfire

JAVA webservice之xfire

时间:2022-04-16 01:34:14

相关推荐

JAVA webservice之xfire

JAVA调用webservice,当你刚开始接触的时候你会觉得它是一个恶梦,特别是没有一个统一的标准实现,比起.net的那些几步就可以完成的webservice实现,我们看着JAVA的实现真是伤心啊。但就算是伤心,我们也还是要完成的。JAVA也不乏比较好的实现,如xfire,jersey,CXF。有人会说axis2,那个东西,看着就伤心,它不包括在比较好里面,比较差里面反倒有它的一席之位。怎么差,这里先不说,我们慢慢地来看看这几个框架的实现。

今天我们就先一起来看一下xfire的实现,接下来的几天我们会慢慢一起来学习另外的框架。

1)首先,当然是要下包啦,这个普通人都知道。/Download可以到这里去下,可以下all也可以下distribution。但建议还是下all的,免得一堆奇怪的问题搞得你一点信心都没了。

包弄下来了那么怎么办呢?放进项目里啊。貌似废话,但很多人就是不知道下下来要干什么用。

建一个新项目,比较我的是xfireWebservice,这里当然是建web项目啦。

我这里是把它所有的包都放到这里面了,毕竟我们写例子,就没必要挑三拣四了,随便点吧,如果想看看异常信息的朋友可以不把全部放进去,慢慢地加入,以后遇到错误也好排除,但我们这里就不那么做了,毕竟一般缺少什么类那些的异常没什么难看的,大家可以自己排除。

2)我们首先来了解一下xfire与其他webservice框架的不同,它最大的不同之处在于它需要一个接口,而且如果需要用xfire来调用相应的webservice必须知道接口的定义,感觉这里有点限制了。但除了这点,xfire调用webservice,那是相当的方便,就跟调用本地方法一样。我们直接来看例子:

首先是最重要的接口:

Java代码

publicinterfaceIReaderService{ publicReadergetReader(Stringname,Stringpassword); publicList<Reader>getReaders(); }

public interface IReaderService {

public Reader getReader(String name,String password);

public List<Reader> getReaders();

}

有接口,当然也要有实现类,不然接口就没什么意义了。

Java代码

publicclassReaderServiceimplementsIReaderService{ publicReadergetReader(Stringname,Stringpassword){ returnnewReader(name,password); } publicList<Reader>getReaders(){ List<Reader>readerList=newArrayList<Reader>(); readerList.add(newReader("shun1","123")); readerList.add(newReader("shun2","123")); returnreaderList; } }

也看一下JAVABEAN,Reader类:

Java代码

publicclassReader{ privatestaticfinallongserialVersionUID=1L; privateStringname; privateStringpassword; publicReader(){} publicReader(Stringname,Stringpassword){ this.name=name; this.password=password; } //Get/Set方法省略 publicStringtoString(){ return"Name:"+name+",Password:"+password; } }

注意,我们这里的Reader类实现了Serializable接口,为什么呢?这里,首先我们需要了解webservice的原理,对于JAVA来讲,如果我们需要在互联网上传对象,很多人当然会想到序列化,对了,这里就是序列化,因为我们需要把reader作为参数来传递。这在以前的版本中是需要强制实现,否则会报错,但现在的最新的版本(其实最新的也是07年的,因为xfire已经停止开发,被apache合并为CXF项目,这个我们之后再讲)已经不需要了,至于是用什么方式实现的,我们这里暂时不深究,因为它已经被合并到CXF中,我们如果要深入学习,应该学习CXF较好。

3)当我们完成上面的接口和JAVABEAN的编写后,很多人会问,我看很多webservice都会有WSDL文件,那你这个怎么来的?在讲这个之前,我们来讨论一下什么是WSDL。也许很多公司提供的接口都还是只是一个HTTP地址,返回XML这样的格式,我们的也是。这有一个好处,也有一个坏处。好处是我们开发的难度小了,而坏处是我们需要提供给用户一堆说明文件,每个返回的XML标签是什么意思,这倒也没啥,但就是比较烦而已。而webservice呢,坏处就是我们开发的东西稍微多了点,而好处是我们不用再写那么多说明文件,因为有一个统一的说明,叫WSDL,这个是webservice的说明文档,是统一的,无论什么语言都一样,所以不存在谁看不懂的问题。

而这里,当我们部署完成xfire后,它就可以帮我们生成WSDL文件。

问题是怎么部署,这个其实也简单。我们在src目录下新建一个文件夹META-INF,再建它的一个字文件夹xfire,里面建立文件services.xml。之后的结构如下:

有人会问为什么要建到src目录下,其实不是规定建到这里的,但因为我们需要让开发工具帮我们自己部署这几个文件,所以我们放到这里,eclipse就可以帮我们自己部署到tomcat或者其他的容器中。注意,这个文件所在文件夹层次是固定的,不可以修改。

我们直接看一下servics.xml:

Xml代码

<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/config/1.0"><service><!--webserviceq名称,调用时需要指定这个--><name>readerService</name><!--这个一般是自己公司的网址,意义不大--><namespace>http://test/HelloService</namespace><!--接口类--><serviceClass>com.xfire.servlet.IReaderService</serviceClass><!--实现类--><implementationClass>com.xfire.servlet.ReaderService</implementationClass></service></beans>

看着注释一般都没问题的。

4)很多人以为这样就行了,不,还没行,你指定了这个,那别人怎么访问呢。怎么把相应的请求转发到xfire那里,让它进行处理呢。这里又需要修改web.xml了。

修改后如下:

Xml代码

<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><servlet><servlet-name>XFireServlet</servlet-name><servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class></servlet><servlet-mapping><servlet-name>XFireServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping></web-app>

其实也就是添加了一个servlet和对应的mapping。接下来,我们在浏览器上直接输入:

http://localhost:8080/xfireWebService/services/readerService?wsdl

我们可以看到:

这里显示的就是wsdl,它会显示我们定义的方法,返回的类型,这个文件我们这里就不分析了,http://webservices./group/topic/11467这位朋友在这里写得很清楚,想了解的朋友可以到这里看看。

5)上面四步完成后,我们就完成了webservice的部署了。别人就可以调用相应的webservice来访问我们的方法了。下面我们就用xfire提供的client来访问一下我们刚才发布的webservice:

Java代码

publicclassReaderClient{ publicstaticvoidmain(String[]args){ //这里是创建一个service,需要传入一个接口类,因为我们后面必须调用相应的接口方法 ServicesrcModel=newObjectServiceFactory().create(IReaderService.class); //代理工厂,这里是为了后面创建相应的接口类 XFireProxyFactoryfactory=newXFireProxyFactory(XFireFactory.newInstance().getXFire()); //webservice地址,不需要加wsdl StringreaderServiceUrl="http://localhost:8080/xfireWebService/services/readerService"; try{ //利用工厂返回相应的接口类 IReaderServicereaderService=(IReaderService)factory.create(srcModel,readerServiceUrl); Readerreader=readerService.getReader("shun","123"); System.out.println(reader); }catch(MalformedURLExceptione){ e.printStackTrace(); } } }

这样,我们看到输出结果为:

很简单的调用,当我们取得接口后,一切就跟本地一样了。xfire发布和调用webservice相对其他框架来说是简单很多的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。