zoukankan      html  css  js  c++  java
  • java web service

    1.编写服务代码

    服务代码提供了两个函数,分别为sayHello和sayHelloToPerson,源代码如下:

     1 /*
     2  * File name: HelloService.java
     3  * 
     4  * Version: v1.0
     5  * 
     6  * Created on Aug 2, 2008 9:40:20 AM
     7  * 
     8  * Designed by Stephen
     9  * 
    10  * (c)Copyright 2008
    11  */
    12 package com.sinosoft.webservice;
    13 
    14 /**
    15  * @author Stephen
    16  * 
    17  * Test web service
    18  */
    19 public class HelloService {
    20     /**
    21      * 不带参数的函数
    22      * 
    23      * @return 返回Hello字符串
    24      */
    25     public String sayHello() {
    26         return "Hello";
    27     }
    28 
    29     /**
    30      * 带参数的函数
    31      * 
    32      * @param name
    33      *            名称
    34      * @return 返回加上名称的欢迎词
    35      */
    36     public String sayHelloToPerson(String name) {
    37         if (name == null || name.equals("")) {
    38             name = "nobody";
    39         }
    40         return "Hello " + name;
    41     }
    42 }

    2.发布webservice

    要将上边写的HelloService类发布为WebService,需要先搭建Web应用。下面是在Tomcat下使用Axis创建WebService服务的例子。

    在Tomcat下创建Web应用:

    注释:免安装版tomcat的启动方式:

    添加一个CATALINA_HOME变量 变量值为 D:Program Filesapache-tomcat-5.5.20

    然后点击 tomcat的bin下的startup.bat 就应该可以启动tomcat了

    1. 在Tomcat的webapps下创建如下文件系统

              ws

                   WEB-INF

                        lib

                        classes

    WEB-INF文件目录结构:

     

    2. 在WEB-INF文件夹下创建web.xml文件,该文件的内容如下:

     <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
     Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
     
     <web-app>
       <display-name>Apache-Axis</display-name>
         
         <listener>
             <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
         </listener>
         
       <servlet>
         <servlet-name>AxisServlet</servlet-name>
         <display-name>Apache-Axis Servlet</display-name>
         <servlet-class>
             org.apache.axis.transport.http.AxisServlet
         </servlet-class>
       </servlet>
     
       <servlet>
         <servlet-name>AdminServlet</servlet-name>
         <display-name>Axis Admin Servlet</display-name>
         <servlet-class>
             org.apache.axis.transport.http.AdminServlet
         </servlet-class>
         <load-on-startup>100</load-on-startup>
       </servlet>
     
       <servlet>
         <servlet-name>SOAPMonitorService</servlet-name>
         <display-name>SOAPMonitorService</display-name>
         <servlet-class>
             org.apache.axis.monitor.SOAPMonitorService
         </servlet-class>
         <init-param>
           <param-name>SOAPMonitorPort</param-name>
           <param-value>5001</param-value>
         </init-param>
         <load-on-startup>100</load-on-startup>
       </servlet>
     
       <servlet-mapping>
         <servlet-name>AxisServlet</servlet-name>
         <url-pattern>/servlet/AxisServlet</url-pattern>
       </servlet-mapping>
     
       <servlet-mapping>
         <servlet-name>AxisServlet</servlet-name>
         <url-pattern>*.jws</url-pattern>
       </servlet-mapping>
     
       <servlet-mapping>
         <servlet-name>AxisServlet</servlet-name>
         <url-pattern>/services/*</url-pattern>
       </servlet-mapping>
     
       <servlet-mapping>
         <servlet-name>SOAPMonitorService</servlet-name>
         <url-pattern>/SOAPMonitor</url-pattern>
       </servlet-mapping>
     
      <!-- uncomment this if you want the admin servlet -->
      <!--
       <servlet-mapping>
         <servlet-name>AdminServlet</servlet-name>
         <url-pattern>/servlet/AdminServlet</url-pattern>
       </servlet-mapping>
      -->
     
         <session-config>
             <!-- Default to 5 minute session timeouts -->
             <session-timeout>5</session-timeout>
         </session-config>
     
         <!-- currently the W3C havent settled on a media type for WSDL;
         http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft
         for now we go with the basic 'it's XML' response -->
       <mime-mapping>
         <extension>wsdl</extension>
          <mime-type>text/xml</mime-type>
       </mime-mapping>
       
     
       <mime-mapping>
         <extension>xsd</extension>
         <mime-type>text/xml</mime-type>
       </mime-mapping>
     
       <welcome-file-list id="WelcomeFileList">
         <welcome-file>index.jsp</welcome-file>
         <welcome-file>index.html</welcome-file>
         <welcome-file>index.jws</welcome-file>
       </welcome-file-list>
     
     </web-app>

    在上面的web.xml中主要是配置了axis的相关配置。

    3 .axis的相关配置

    在上述的web.xml文件中已经对axis进行了配置,但是还需要进行额外的配置。

    复制axis相关的jar文件

     将axis的相关jar文件复制到WEB-INFlib文件夹下。这些文件包括:

     

    复制WebService服务主文件

         将HelloService.java编译后的class文件复制到WEB-INFclasses文件夹下,也就是说在WEB-INFclasses文件夹下的文件夹结构为:comsinosoftwebservice,在webservice文件夹下有一个helloservice.class文件。

    测试发布的Web应用

    启动Tomcat服务,打开IE浏览器 输入 http://localhost:8080/ws/services   如果看到如下界面就说明AXIS部署成功了。

                          

    4.发布WebService服务

        创建deploy.wsdd文件

    <?xml version="1.0" encoding="UTF-8"?>
    <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
        <service name="HelloServices" provider="java:RPC">
            <parameter name="className" value="com.sinosoft.webservice.HelloService"/>
            <parameter name="allowedMethods" value="*"/>
        </service>
    </deployment>

     

    将此文件放置在WEB-INF目录下。

    启动DOS,将目录切换到WEB-INF目录下,输入如下命令:

    java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -l http://localhost:8080/services/AdminService deploy.wsdd

    如下显示,则发布成功

     

      -l后的参数是本地要发布WebService的AdminService对应的访问地址。

         最后deploy.wsdd是对应的配置文件名称。

    测试:输入 http://localhost:8080/ws/services 如果显示如下,则发布成功:

    从上图可以看出,发布成功后,多了一个HelloServices的服务。这样就说明HelloService发布成功了。

    5.用Java调用WebService实例

    下面为用java编写的调用webservice的例子

    需要引用的包为:

    package com.test;
    
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.rmi.RemoteException;
    
    import javax.xml.namespace.QName;
    import javax.xml.rpc.ServiceException;
    
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    public class Test {
        private static final String HELLO_SERVICE_ENDPOINT = "http://localhost:8080/ws/services/HelloServices?wsdl";
        private static final Log log = LogFactory.getLog(Test.class);
         public static void main(String[] args) {
             Test tester = new Test();
                // tester.callSayHello();
             tester.callSayHelloToPerson();
            }
        public void callSayHello() throws ServiceException, MalformedURLException{
            Service service = new Service();
             Call call = (Call) service.createCall();
             call.setTargetEndpointAddress(new java.net.URL(HELLO_SERVICE_ENDPOINT));
             call.setOperationName(new QName("http://webservice.sinosoft.com/",
                     "sayHello"));
             call.setReturnType(org.apache.axis.Constants.XSD_STRING);
             try {
                String ret = (String) call.invoke(new Object[] {});
                System.out.println("The return value is:" + ret);
                return;
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        public void callSayHelloToPerson(){
             try {
                    Service service = new Service();
                    Call call = (Call) service.createCall();
                    call.setTargetEndpointAddress(new java.net.URL(HELLO_SERVICE_ENDPOINT));
                    call.setOperationName(new QName("http://webservice.sinosoft.com/",
                            "sayHelloToPerson"));
                    call.addParameter("name", org.apache.axis.Constants.XSD_STRING,
                            javax.xml.rpc.ParameterMode.IN);
                    call.setReturnType(org.apache.axis.Constants.XSD_STRING);
                    try {
                        String ret = (String) call.invoke(new Object[] { "Stephen" });
                        System.out.println("The return value is:" + ret);
                        return;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (ServiceException e) {
                    e.printStackTrace();
                }
                log.error("call sayHello service error!");
            }
    }
  • 相关阅读:
    java编程思想 第三章
    linux安装beego框架环境
    Windows安装beego框架环境
    js 版本号比较实现
    vue element el-table 数据渲染报错 Invalid prop: type check failed for prop "data". Expected Array, got Object
    error c:/wamp64 or php in path
    第三章 函数
    第二章 有意义的命名
    curl实现多路并发请求(请求数量大时再次分割实现循环处理)
    js中常用方法集合
  • 原文地址:https://www.cnblogs.com/yixianyixian/p/3599454.html
Copyright © 2011-2022 走看看