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

Webservice使用

发布时间:2020-12-16 22:13:29 所属栏目:安全 来源:网络整理
导读:Webservice使用介绍: http://blog.csdn.net/kardelpeng/article/details/6321019: Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。 Web Service的关键技术和规则: 1.XML:描述

Webservice使用介绍:


http://blog.csdn.net/kardelpeng/article/details/6321019:




Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。

Web Service的关键技术和规则:

1.XML:描述数据的标准方法.

2.SOAP:表示信息交换的协议(简单对象访问协议).

3.WSDL:Web服务描述语言.

4.UDDI:通用描述、发现与集成,他是一种独立于平台,基于XML语言的用于在互联网上描述商务的协议。

?

一、利用JDK web服务api实现,这里使用基于SOAP message的Web Service:

1.首先创建一个Web Services项目,作为Web services Endpoint.

2.创建一个HelloService.Java类

[c-sharp]? view plain ?copy
  1. package?com.yjpeng.hello;??
  2. ??
  3. import?javax.jws.WebService;??
  4. import?javax.jws.WebMethod;??
  5. import?javax.xml.ws.Endpoint;??
  6. @WebService??
  7. public?class?HelloService?{??
  8. ??????
  9. ????@WebMethod??
  10. ????public?String?sayHello(String?message){??
  11. ????????return?"Hello?,"?+?message;??
  12. ????}??
  13. ??????
  14. static?void?main(String[]?args)?{??
  15. ????????//create?and?publish?an?endPoint??
  16. ????????HelloService?hello?=?new?HelloService();??
  17. ????????Endpoint?endPoint?=?Endpoint.publish("http://localhost:8080/helloService",?hello);??
  18. }??

3.使用apt编译HelloService.java(例如: apt -d bin(bin存放编译后的文件目录) scr/com/yjpeng/hello/HelloService.java)后,会生成jaxws目录。

4.使用java com.yjpeng.hello.HelloService执行HelloService.java文件,在浏览器中输入http://localhost:8080/helloService?wsdl出现如下图

5.使用wsimport命令生成客户端:wsimport -p com.yjpeng.webservice -keep?http://localhost:8080/helloService?wsdl?这时会在当前目录中生成如下文件:

6.编写好客户端文件HelloClient.java

copy

    import?com.yjpeng.webservice.HelloServiceService;??
  1. class?HelloClient?{??
  2. ????void?main(String[]?args)?{??
  3. ????????HelloServiceService?helloServiceService?=?new?HelloServiceService();??
  4. ????????com.yjpeng.webservice.HelloService?helloService?=?helloServiceService.getHelloServicePort();??
  5. ????????System.out.println(helloService.sayHello("你好"));??
  6. ????}??
  7. ??
  8. 运行结果在控制台输出 hello,你好? 证明利用JDK web服务API实现web service成功!

    二、使用xfire框架,我这里使用的是MyEclipse集成的xfire进行测试,利用xfire开发WebService可以有三种方法:

    a.一种是从JavaBean中生成。

    b.一种是从wsdl文件中生成。

    c.一种是自己建立webservice。

    具体实现步骤如下:

    1.用Myeclipse建立webService工程(注意:Web Service&J2EE Details中的Framework选XFire),目录结构如下:

    2.创建IHello.java接口

    copy

      interface?IHello?{??
    1. public?String?sayHello(String?message);??
    2. }??

    3.创建IHelloImpl.java实现IHello.java接口

    copy

      class?IHelloImpl?implements?IHello?{??
    1. public?String?sayHello(String?message)?{??
    2. return?message;??
    3. 4.修改Service.xml文件,加入以下代码

      ?<service>
      ?<!-- 为该Service起一个名字 -->
      ??<name>HelloService</name>
      ??<!-- service的接口类 -->
      ??<serviceClass>
      ??com.yjpeng.hello.IHello
      ??</serviceClass>
      ??<!-- service的接口实现类-->
      ??<implementationClass>
      ??com.yjpeng.hello.IHelloImpl
      ??</implementationClass>
      ??<!-- wsdl的样式-->
      ??<style>wrapped</style>
      ??<use>literal</use>
      ??<scope>application</scope>
      ?</service>

      5.把该Web Service项目部署到tomcat里面启动tomcat在浏览器地址栏输入http://localhost:8080/TestWebServices/services/Hello?wsdl?出现如下图

      6.然后在展开HelloService后面的wsdl可以看到

      7.创建一个客户端HelloClient.java类

      copy

        import?java.net.MalformedURLException;??
      1. import?java.net.URL;??
      2. import?org.codehaus.xfire.XFireFactory;??
      3. import?org.codehaus.xfire.client.Client;??
      4. import?org.codehaus.xfire.client.XFireProxyFactory;??
      5. import?org.codehaus.xfire.service.Service;??
      6. import?org.codehaus.xfire.service.binding.ObjectServiceFactory;??
      7. import?com.yjpeng.hello.IHello;??
      8. class?HelloClient?{??
      9. ????????Service?s?=?new?ObjectServiceFactory().create(IHello.class);??
      10. ????????XFireProxyFactory?xf?=?new?XFireProxyFactory(XFireFactory.newInstance().getXFire());??
      11. ????????String?url="http://192.168.122.128:8080/TestWebServices/services/HelloService";??
      12. ????????IHello?hello;??
      13. try?{??
      14. ????????????hello?=?(IHello)xf.create(s,?url);??
      15. ????????????System.out.println(hello.sayHello("你好"));??
      16. ????????}?catch?(MalformedURLException?e)?{??
      17. ????????????e.printStackTrace();??
      18. ????????}??
      19. ????????????//这个是在java端调用.net写的远程Web?Service?如果调用本机写的只需要把URL中的地址换成本机能访问的地址即可??
      20. ????????????Client?c?=?new?Client(new?URL("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"));??
      21. ????????????Object[]?o?=?c.invoke("qqCheckOnline",?new?String[]{"271751507"});??
      22. out.println(o.length);??
      23. catch?(Exception?e)?{??
      24. 运行HelloClient.java类可以输出 你好??????????? 1.

        三、使用axis1.4开发webservice方法

        首先下载axis1.4包和tomcat服务器,并将解压后的axis1.4包下面的webapps下的axis目录复制到tomcat服务器的webapps文件夹中。axis支持三种Web Service的部署和开发,分别为:

        a.Dynamic Invocation Interface(DII)

        b.Stubs 方式

        c.Dynamic Proxy方式

        1.编写DII(Dynamic Invocation Interface)方式Web Service

        a.编写服务程序HelloClient.java

        copy

          class?HelloClient??
        1. {??
        2. public?String?getName(String?name){??
        3. return?"hello,"?+?name;??
        4. b.将HelloClient.java文件拷贝到axis_home下,重命名为HelloClient.jws.

          c.访问链接http://localhost:8080/axis/HelloClient.jws?wsdl页面显示axis自动生成的wsdl文件

          d.编写访问服务的客户端TestHelloClient.java需要导入相应的axis.jar包,在下载的axis的WEB-INF/lib/目录下。

          copy

            package?com.yjpeng.webservice;??
          1. import?java.net.URL;??
          2. import?javax.xml.namespace.QName;??
          3. import?org.apache.axis.client.Call;??
          4. import?org.apache.axis.client.Service;??
          5. class?TestHelloClient?{??
          6. void?main(String[]?args){??
          7. try{??
          8. ????????????String?endpoint?=?"http://localhost:8080/axis/HelloClient.jws";??
          9. ????????????Service?service?=?new?Service();??
          10. ????????????Call?call?=?(Call)service.createCall();??
          11. ????????????call.setOperationName(new?QName(endpoint,?"getName"));??
          12. ????????????call.setTargetEndpointAddress(new?URL(endpoint));??
          13. ????????????String?result?=?(String)?call.invoke(new?Object[]{"张三"});??
          14. ????????????System.out.println(result);??
          15. ????????}catch?(Exception?e)?{??
          16. ????????????e.printStackTrace();??
          17. ????????}??
          18. 运行TestHelloClient.java在控制台输出hell,张三,测试成功.

            2.编写Dynamci Proxy方式访问服务

            a.编写部署服务端程序,用上边DII方式使用的HelloClient.java

            copy

              b.编写代理接口HelloClientInterface.java需要扩展java.rmi.Remote类

              copy

                package?com.yjpeng.dynamic.proxy;??
              1. import?java.rmi.Remote;??
              2. import?java.rmi.RemoteException;??
              3. interface?HelloClientInterface?extends?Remote?{??
              4. public?String?getName(String?name)?throws?RemoteException;??
              5. c.编写访问服务的客户端TestHelloClient.java

                copy

                  import?javax.xml.namespace.QName;??
                1. import?javax.xml.rpc.Service;??
                2. import?javax.xml.rpc.ServiceFactory;??
                3. class?TestHelloClient?{??
                4. void?main(String[]?args){??
                5. ????????try{??
                6. ????????????String?wsdlUrl?=?"http://localhost:8080/axis/HelloClient.jws?wsdl";??
                7. ????????????String?nameSpaceUrl?=?"http://localhost:8080/axis/HelloClient.jws";??
                8. ????????????String?serviceName?=?"HelloClientService";??
                9. ????????????String?portName?=?"HelloClient";??
                10. ????????????ServiceFactory?serviceFactory?=?ServiceFactory.newInstance();??
                11. ????????????Service?afService?=?serviceFactory.createService(new?URL(wsdlUrl),153); font-weight:bold; background-color:inherit">new?QName(nameSpaceUrl,?serviceName));??
                12. ????????????HelloClientInterface?proxy?=?(HelloClientInterface)afService.getPort( ????????????????????HelloClientInterface.class);??
                13. out.println(proxy.getName("张三"));??
                14. ????????} 四、使用axis2开发webservice

                  研究中....

                  五、在Java Web项目中开放一个webservice接口实例

                  1.引入需要的jar包?

                  ?

                  2.创建一个接口类IAddNumbers.java

                  copy

                    interface?IAddNumbers?{??
                  1. int?addNumbers(int?a,153); font-weight:bold; background-color:inherit">int?b);??
                  2. 3.创建一个AddNumberImpl.java实现IAddnumbers.java接口类

                    copy

                      import?com.sun.xml.ws.transport.http.servlet.WSServlet;??
                    1. @WebService(targetNamespace="http://webservice.yjpeng.com",?serviceName="AddNumberImplService",??
                    2. ????????portName="AddNumberImpl")??
                    3. class?AddNumberImpl?implements?IAddNumbers?{??
                    4. int?b)?{??
                    5. return?a?+?b;??
                    6. 4.在WEN-INF目录下创建一个sun-jaxws.xml文件

                      copy

                        <?xml?version="1.0"?>??
                      1. <endpoints?version="2.0"??
                      2. ??xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">??
                      3. ??<endpoint?name="AddNumberImpl"???
                      4. ?????implementation="com.yjpeng.webservice.AddNumberImpl"??
                      5. ?????url-pattern="/addNumberImpl"/>??
                      6. ?</endpoints>??
                      7. ????????

                      5.在web.xml文件中增加

                      copy

                        <servlet>??
                      1. ????<servlet-name>AddNumberService</servlet-name>??
                      2. ????<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>??
                      3. ????<load-on-startup>1</load-on-startup>??
                      4. </servlet>??
                      5. <servlet-mapping>??
                      6. ????<servlet-name>AddNumberService</servlet-name>??
                      7. ????<url-pattern>/addNumberImpl</url-pattern>??
                      8. </servlet-mapping>??
                      9. <listener>??
                      10. ????<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener- </listener>??

                      6.部署web项目 启动相应部署服务器。访问http://localhost:8080/TestJaxWebService/addNumberImpl?wsdl?这样每次启动web服务器就开放了一个web service的接口。

                      (编辑:李大同)

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

    推荐文章
      热点阅读