美文网首页
WebService的实现与调用的几种方案

WebService的实现与调用的几种方案

作者: 义焃 | 来源:发表于2018-11-17 22:13 被阅读0次

    原生的WebService的实现方式

    1、创建一个jar工程

    2、定义一个我们要发布的接口

    package haiyang.yu.webservice;
    
    import javax.jws.WebService;
    
    /**
     * Created on 2018-04-16 8:31
     * <p>Title:  haiyang.yu.webservice</p>
     * <p>Description: </p>
     *
     * @author <a href="mailto:991138518@qq.com">yuhaiyang</a>
     * @version 1.0
     */
    @WebService
    public interface TimeAlarmBell {
        /**
         * 问候当前时间
         * @param name your name
         * @return results
         */
        String giveMeDate(String name);
    }
    
    

    3、实现接口将并实现相应的业务

    package haiyang.yu.webservice;
    
    import javax.jws.WebService;
    import java.util.Date;
    
    /**
     * Created on 2018-04-16 8:33
     * <p>Title:  haiyang.yu.webservice</p>
     * <p>Description: </p>
     *
     * @author <a href="mailto:991138518@qq.com">yuhaiyang</a>
     * @version 1.0
     */
    @WebService(endpointInterface= "haiyang.yu.webservice.TimeAlarmBell",serviceName="showDate")//指定webservice所实现的接口以及服务名称
    public class TimeAlarmBellImpl implements TimeAlarmBell {
        @Override
        public String giveMeDate(String name) {
            return name.concat(",您好!现在是北京时间:").concat(new Date().toString());
        }
    }
    
    

    4、发布webservice

    package haiyang.yu.webservice;
    
    import javax.xml.ws.Endpoint;
    
    /**
     * Created on 2018-04-16 8:36
     * <p>Title:  haiyang.yu.webservice</p>
     * <p>Description: </p>
     *
     * @author <a href="mailto:991138518@qq.com">yuhaiyang</a>
     * @version 1.0
     */
    public class TimeAlarmBellPublish {
    
        public static void main(String[] args) {
            TimeAlarmBell showDate = new TimeAlarmBellImpl();
            //调用Endpoint的publish方法发布Web Service
            Endpoint.publish("http://192.168.10.104:8085/showDate", showDate);
            System.out.println("Web Service发布成功!");
        }
    }
    
    

    5、webservice的调用

    
    package haiyang.yu.webservice;
    
    //import org.apache.commons.lang3.concurrent.BasicThreadFactory;
    
    import javax.xml.namespace.QName;
    import javax.xml.ws.Service;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.concurrent.ScheduledThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    
    /**
     * Created on 2018-04-16 8:48
     * <p>Title:  haiyang.yu.webservice</p>
     * <p>Description: </p>
     *
     * @author <a href="mailto:991138518@qq.com">yuhaiyang</a>
     * @version 1.0
     */
    public class TimeAlarmBellConnection {
        
        public static void main(String[] args) {
            
    //        ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(
    //                1, new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(false).build());
    //        scheduledThreadPoolExecutor.scheduleAtFixedRate(new Runnable() {
    //            @Override
    //            public void run() {
                    //创建WSDL的URL,注意不是服务地址
                    URL url = null;
                    try {
                        url = new URL("http://192.168.10.104:8085/showDate?wsdl");
                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    }
    
                    //创建服务名称
                    //1.namespaceURI - 命名空间地址
                    //2.localPart - 服务视图名
                    QName qname = new QName("http://webservice.yu.haiyang/", "showDate");
    
                    //创建服务视图
                    //参数解释:
                    //1.wsdlDocumentLocation - wsdl地址
                    //2.serviceName - 服务名称
                    Service service = Service.create(url, qname);
                    //获取服务实现类
                    TimeAlarmBell showDate = service.getPort(TimeAlarmBell.class);
                    //调用查询方法
                    String result = showDate.giveMeDate("KevinBruce");
                    System.out.println(result);
    //            }
    //        }, 1, 2, TimeUnit.SECONDS);
            
        }
        
    }
    
    

    注释掉的内容中使用定时任务去循环调用webservice的接口了,如果想要使用这个定时任务,需要引入common-lang3的jar包

    <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.6</version>
    </dependency>

    使用axis1.4的实现方式

    下载地址:http://archive.apache.org/dist/ws/axis/1_4/

    下载axis-bin-1_4.zip 这个包

    使用axis1实现webservice在构建时可能会相对麻烦一些,但是构建成功后,对于一些webservice的方法的实现就简单了很多,可以大大的提高开发效率。

    1、创建一个war工程(这是必须的,axis1使用war来发布接口)

    2、创建包并定义一个接口(正常的接口,不需要注解)

    package haiyang.yu.axis1;
    
    /**
     * Created on 2018-04-16 16:37
     * <p>Title:  haiyang.yu.axis1</p>
     * <p>Description: </p>
     *
     * @author <a href="mailto:991138518@qq.com">yuhaiyang</a>
     * @version 1.0
     */
    public interface Hello {
    
        /**
         * 获取当前时间
         * @param user 获取用户
         * @return Result
         */
        String getLocalDate(String user);
    }
    
    

    3、给这个接口定义一个实现类(该实现类需要有@WebService注解)

    package haiyang.yu.axis1;
    
    import javax.jws.WebService;
    import java.util.Date;
    
    /**
     * Created on 2018-04-16 16:38
     * <p>Title:  haiyang.yu.axis1</p>
     * <p>Description: </p>
     *
     * @author <a href="mailto:991138518@qq.com">yuhaiyang</a>
     * @version 1.0
     */
    @WebService
    public class HelloImpl implements Hello {
    
        @Override
        public String getLocalDate(String user) {
            return user.concat(",您好! 当前时间为:").concat(new Date().toString());
        }
    
    }
    
    

    当你写完实现类的时候,你的webservice的接口就已经实现了。接下来的任务就是配置了。

    4、配置要发布为webservice的方法

    • 修改wabapps/WEB-INF/web.xml文件(添加一个servlet映射)。
    <!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>
      <servlet>
        <servlet-name>AxisServlet</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
      </servlet-mapping>
    </web-app>
    
    • 创建一个server-config.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">  
        <globalConfiguration>  
            <parameter name="sendMultiRefs" value="true" />  
            <parameter name="disablePrettyXML" value="true" />  
            <parameter name="adminPassword" value="admin" />  
            <parameter name="dotNetSoapEncFix" value="true" />  
            <parameter name="enableNamespacePrefixOptimization" value="false" />  
            <parameter name="sendXMLDeclaration" value="true" />  
            <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" />  
            <parameter name="sendXsiTypes" value="true" />  
            <requestFlow>  
                <handler type="java:org.apache.axis.handlers.JWSHandler">  
                    <parameter name="scope" value="session" />  
                </handler>  
                <handler type="java:org.apache.axis.handlers.JWSHandler">  
                    <parameter name="scope" value="request" />  
                    <parameter name="extension" value=".jwr" />  
                </handler>  
            </requestFlow>  
        </globalConfiguration>  
        <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />  
        <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" />  
        <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />  
        <transport name="http">  
            <requestFlow>  
                <handler type="URLMapper" />  
                <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />  
            </requestFlow>  
            <parameter name="qs:list"  
                value="org.apache.axis.transport.http.QSListHandler" />  
            <parameter name="qs:wsdl"  
                value="org.apache.axis.transport.http.QSWSDLHandler" />  
            <parameter name="qs.list"  
                value="org.apache.axis.transport.http.QSListHandler" />  
            <parameter name="qs.method"  
                value="org.apache.axis.transport.http.QSMethodHandler" />  
            <parameter name="qs:method"  
                value="org.apache.axis.transport.http.QSMethodHandler" />  
            <parameter name="qs.wsdl"  
                value="org.apache.axis.transport.http.QSWSDLHandler" />  
        </transport>  
        <transport name="local">  
            <responseFlow>  
                <handler type="LocalResponder" />  
            </responseFlow>  
        </transport>  
      
        <!-- 想要添加或者取消修改一下内容即可,AdminService与Version注销不提供服务。 -->  
      
        <service name="SayHello" provider="java:RPC">  
            <parameter name="allowedMethods" value="*" />  
            <parameter name="className" value="haiyang.yu.axis1.HelloImpl" />  
            <namespace>http://www.yuhaiyang.com/ocean-axis/sayHello</namespace>  
        </service>  
    </deployment>  
    

    5、将工程打成war 包放到jetty或者是Tomcat的webapps下,同时将axis-bin-1_4.zip包中解压出来的文件中的webapps目录下的内容复制到jetty或者是Tomcat的webapps下。

    6、启动容器我们定义的url即可。

    使用axis2-1.7.7的实现方式

    下载地址:http://axis.apache.org/axis2/java/core/download.html

    下载 axis2-1.7.7-war.zip 这个包

    没使用过,后续更新

    相关文章

      网友评论

          本文标题:WebService的实现与调用的几种方案

          本文链接:https://www.haomeiwen.com/subject/ujzifqtx.html