加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

xfire开发并调用webservice

发布时间:2020-12-16 23:41:19 所属栏目:安全 来源:网络整理
导读:Web Services使我们能够在网络上建立分布式系统,应用程序组件可以通过任何平台、任何语言和任何方式访问。无论应用程序如何开发,使用了什么语言,以及运行在什么操作系统平台上,只要它作为Web Service,并且为协同解决问题而设计,那么你的应用程序,以任

Web Services使我们能够在网络上建立分布式系统,应用程序组件可以通过任何平台、任何语言和任何方式访问。无论应用程序如何开发,使用了什么语言,以及运行在什么操作系统平台上,只要它作为Web Service,并且为协同解决问题而设计,那么你的应用程序,以任何语言开发或在任何平台上,都可以利用它的服务。简而言之,就是说,你可以跨平台,你可以实用别人的数据,你可以调用现成的方法,你可以得到更多的便捷,在现实的开发中

?

使用webservice之前,我们且不管你是否使用了现有的框架,或者你使用的是哪个框架,我们最好先了解它的规则和构成,比如,你想写个网页,那你得先晓得<html><title><head><body>它们是要有结束的,这是基本的前提。而使用webservice的前提则没那么多,第一,你该晓得,它是以xml形式作为默认的传递格式;第二,和http协议类似,它默认是以soap(Simple Object Access Protocol)协议,封装和交换信息的;第三,WSDL(Web Services Deion Language,Web Services描述语言),它是对webservice的一种详细描述,里面包含协议啊,服务地址啊,方法列表啊,参数啊等等之类的。它返回的xml是给我们处理的,而这个wsdl则是交给机器,交给客户端程序处理的。

ok,说完上面的,大体有个印象和看法了,我们开始webservice的最佳体验。这里,我首先用xfire框架来实现在javaweb项目中的webservice的开发和调用[非javaweb的项目步骤较容易,这里就不讲了],这个xfire也是我第一次接触webservice时所使用的开源框架,所以我打算好好写写[谁让我这么念旧呢(⊙o⊙)…]。axis,axis2,cxf之类的框架至于我打算后面再看能不能写写.....

第一步,新建一个接口,IBankingService.java,这个接口即是你将模拟对外发布的接口,代码如下:

?

Java代码?
  1. package?com.mybank.xfire.example;?????
  2. ????
  3. public?interface?IBankingService?{???????
  4. ????
  5. ?????public?String?transferFunds(?????
  6. ?????????String?fromAccount,?String?toAccount,?double?amount,?String?currency);?????
  7. ?????????????
  8. }???
?

第二步,实现这个接口,并实现里面的方法,方便后面看效果,代码如下:

import?java.text.NumberFormat;?????

  • import?java.text.DecimalFormat;?????
  • ????
  • /**?XFire?WebServices?sample?implementation?.????
  • */????
  • public??BankingService?implements?IBankingService?{?????
  • ?????????
  • ??????
  • ?????public?BankingService(){?????????
  • ?????}?????
  • ?????????
  • ???????
  • ??????????????????
  • ?????????String?statusMessage?=?"";?????
  • ???????????????????????????
  • ?????????//Call?business?objects?and?other?components?to?get?the?job?done.?????
  • ?????????//Then?create?a?status?message?and?return.?????
  • ?????????try?{?????
  • ?????????????NumberFormat?formatter?=?new?DecimalFormat("###,###,###.00");????????????
  • ?????????????statusMessage?=?"COMPLETED:?"?+?currency?+?"?"?+?formatter.format(amount)+??????
  • ?????????????"?was?successfully?transferred?from?A/C#?"?+?fromAccount?+?"?to?A/C#?"?+?toAccount;?????
  • ?????????}?catch?(Exception?e){?????
  • ?????????????statusMessage?=?"BankingService.transferFunds():?EXCEPTION:?"?+?e.toString();?????
  • ?????????}?????
  • ?????????return?statusMessage;?????
  • ?????}?????
  • ?????????
  • }?????
  • 第三步,修改web.xml,加入关于xfire的相关配置,代码如下:

    ?

    Xml代码?
    1. <servlet>???
    2. ?????????servlet-name>XFireServlet</display-name>XFire?Servletservlet->org.codehaus.xfire.transport.http.XfireConfigurableServlet???
    3. ??????????>???
    4. ?????>???
    5. ??
    6. ?????servlet-mappingurl-pattern>/servlet/XFireServlet/*>???
    7. ??????
    8. ?????>/services/*>???

    第四步,在web-inf文件夹新建xfire文件夹,在xfire文件夹下,新建services.xml,这个xml能规范你的接口的详细信息,是否公开,作用域等等,实际开发中,配置可能会相当复杂,具体详解请大家去参考官方文档,这里我们弄简单的,代码如下:

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

  • ???servicename>Bankingnamespace>mybank>com.mybank.xfire.example.IBankingServiceimplementation>com.mybank.xfire.example.BankingService>????
  • beans 第五步,当然就是对外,发布我们这个webservice了,发布后它将成为一个wsdl供外部调用,这里我贴一下lib下所需要的jar文件:

    ? activation-1.0.2.jar?

    ? commons-codec-1.3.jar?

    ? commons-httpclient-3.0.jar?

    ? commons-logging-1.0.4.jar?

    ? jaxen-1.1-beta-8.jar?

    ? jdom-1.0.jar?

    ? log4j-1.2.x.jar?

    ? mail-1.3.3_01.jar?

    ? spring-1.2.x.jar?

    ? stax-api-1.0.jar?

    ? wsdl4j-1.5.2.jar?

    ? wstx-asl-2.9.jar?

    ? xbean-2.1.0.jar?

    ? xbean-spring-2.2.jar?

    ? xfire-all-1.0.jar?

    ? XmlSchema-1.0.jar?

    服务器启动后,我们在地址栏键入,http://localhost:8080/ws_xfire/services/Banking?wsdl,浏览器页面出现一堆xml,且可展开,说明发布成功;假使报错,请根据错误以及以上步骤,检查改正。

    第六步,对外接口发布之后,我们模拟在本地客户端去调用它发布的方法,以此完结这篇文章。我们来实现调用的方法,代码如下:

    ?

    Java代码?
    1. /*?Call?the?Web?service??
    2. ?????*??
    3. ?????*/???
    4. ?????public?String?callWebService(???
    5. ?????????String?fromAccount,?String?currency)???
    6. ?????????throws?MalformedURLException,?Exception?{???
    7. ??????????
    8. ?????????//Create?a?metadata?of?the?service????????
    9. ?????????Service?serviceModel?=?new?ObjectServiceFactory().create(IBankingService.);??????????
    10. ?????????log.debug("callSoapServiceLocal():?got?service?model."?);???
    11. ?????
    12. ?????????//Create?a?proxy?for?the?deployed?service???
    13. ?????????XFire?xfire?=?XFireFactory.newInstance().getXFire();???
    14. ?????????XFireProxyFactory?factory?=?new?XFireProxyFactory(xfire);????????
    15. ??????
    16. ?????????String?serviceUrl?=?"http://localhost:8080/websvc/services/Banking";???
    17. ??????????
    18. ?????????IBankingService?client?=?null;???
    19. ?????????try?{???
    20. ?????????????client?=?(IBankingService)?factory.create(serviceModel,?serviceUrl);???
    21. ?????????}?catch?(MalformedURLException?e)?{???
    22. ?????????????log.error("WsClient.callWebService():?EXCEPTION:?"?+?e.toString());???
    23. ?????????}??????
    24. ?????????????????
    25. ?????????//Invoke?the?service???
    26. ?????????String?serviceResponse?=?"";???
    27. ?????????try?{???
    28. ?????????????serviceResponse?=?client.transferFunds(fromAccount,?toAccount,?amount,?currency);???
    29. ????????}?catch?(Exception?e){???
    30. ?????????????log.error("WsClient.callWebService():?EXCEPTION:?"?+?e.toString());???????????????????
    31. ?????????????serviceResponse?=?e.toString();???
    32. ?????????}??????????
    33. ?????????log.debug("WsClient.callWebService():?status="?+?serviceResponse);????????????????
    34. ??
    35. ?????????//Return?the?response???
    36. ?????????return?serviceResponse;???
    37. ?????}???

    当然,这个方法可以放在你的servlet的doGet()/doPost()里面,也能放到你的main()函数里面,反正都是测试看效果的,我这里因为是个web项目,所以我配置了一个servlet,请求如下,http://localhost:8080/ws_xfire/ws。为了尝试不同的输入,你可以试试另外一种,完整的输入方式,http://localhost:8080/ws_xfire/ws??from=11-2345&to=77-9876&amt=250.00&cur=EUR.

    最后我们总结下,它的开发流程:

    基本的Web Services开发步骤清单?

    这个清单总结了将一个Java方法发布为Web Service所必须的步骤:?

    1、 检查Java类的方法和默认构造函数确保为public?

    2、 增加XFire servlet相关条目到web.xml中?

    3、 创建services.xml,把它放到WEB-INF/es/META-INF/xfire目录下?

    4、 增加XFire和第三方包到你的Web应用的WEB-INF/lib文件夹中?

    这就是所有需要的步骤,是的,没那么容易也没那么的难。[接下来,我去想想axis和cxf的,看能不能也写写 = _=]

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    • 推荐文章
        热点阅读