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

原生的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  这个包

没使用过,后续更新

转载于:https://my.oschina.net/epoch/blog/1798452

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值