zoukankan      html  css  js  c++  java
  • Javax ws 01

    1 EndPoint发布服务

    package com.gosaint.provider;
    
    import javax.jws.WebService;
    
    /**
     * @Authgor: gosaint
     * @Description:
     * @Date Created in 10:24 2018/1/8
     * @Modified By:
     */
    @WebService
    public interface Calculator {
        
        public int add(int a, int b);
        
        public int multi(int a, int b);
    }

    @WebService注解声明了该接口是一个webService接口。然后我们来写该接口的实现类

    package com.gosaint.provider;
    
    import javax.jws.WebService;
    
    /**
     * @Authgor: gosaint
     * @Description:
     * @Date Created in 10:25 2018/1/8
     * @Modified By:
     */
    @WebService(endpointInterface = "com.gosaint.provider.Calculator")
    public class CalculatorImpl implements Calculator {
        @Override
        public int add(int a, int b) {
            return a+b;
        }
    
        @Override
        public int multi(int a, int b) {
            return a*b;
        }
        public int minus(int a, int b) {
            return a - b;
        }
    }

    在该类中,实现了接口Calculator.覆盖其中的方法,并且我们自定义mins()方法,@WebService(endpointInterface="com.gosaint.Calculator")该主注解的作用也是声明该类是一个WebService接口。而且该服务的接口是Calcluator接口。后面的是该接口的全限定名称。

    此时我们就可以发布服务了。

    package com.gosaint.provider;
    
    import javax.xml.ws.Endpoint;
    
    /**
     * @Authgor: gosaint
     * @Description:
     * @Date Created in 10:27 2018/1/8
     * @Modified By:
     */
    // 服务发布
    public class Server {
        public static void main(String[] args) {
            Endpoint.publish("http://localhost:8088/calculator", new CalculatorImpl());
        }
    }

    publish()方法中的第一个参数就是发布服务的地址,后面一个参数就是服务的实现类。当服务发布成功后就可以去浏览器中进行访问:http://localhost:8088/calculator?wsdl

    当出现下面所示的类似的内容时则证明服务发布成功了。

    2 客户端的调用

    package com.gosaint.provider;
    
    import javax.xml.namespace.QName;
    import javax.xml.ws.Service;
    import java.net.URL;
    
    
    /**
     * @Authgor: gosaint
     * @Description:
     * @Date Created in 10:31 2018/1/8
     * @Modified By:
     */
    public class Client {
        public static void main(String[] args) throws Exception{
            // nameSpace这里需要包名倒写
            QName qName=new QName("http://provider.gosaint.com/",
                    "CalculatorImplService");
            URL url = new URL("http://localhost:8088/calculator?wsdl");
            Service service=Service.create(url,qName);
            Calculator port = service.getPort(Calculator.class);
            System.out.println(port.add(3,9));
        }
    }

    在这里客户端就可以直接对该接口实现调用了。QName对象中,要注意两个参数的名称。第一个参数应该是http://接口的包名倒写。第二个参数是服务的名称。这个可以在发布服务时生成的xml文件中获取。

    之后是创建服务,获取接口,调用方法。

    <service name="CalculatorImplService">
        <port name="CalculatorImplPort" binding="tns:CalculatorImplPortBinding">
            <soap:address location="http://localhost:8088/calculator"/>
        </port>
    </service>

    测试结果:12

    3 客户端代码的生成(利用Java自身的wsdl工具)

    只需要打开CMD输入如下的命令就能生成对应的文件,我在这里直接生成在桌面上,具体生成在指定的文件下或者包下的参数大家可以去自行百度。

    wsimport -keep http://localhost:8088/calculator?wsdl

    此时就可以直接调用这里面的一些类或者方法了。

    当上帝未揭开人类的未来图景之前,人类最伟大的智慧存在于两个词中,“等待”和“希望”
  • 相关阅读:
    考研最路径dijkstra和floyd
    考研最小生成树
    考研之图的遍历
    kmp--考研写法
    求1-n之内的素数
    一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,
    有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
    一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数
    猴子吃桃问题。
    求一个3×3矩阵对角线元素之和。
  • 原文地址:https://www.cnblogs.com/gosaint/p/8242110.html
Copyright © 2011-2022 走看看