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

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

 

posted @ 2018-01-08 12:37  大佛拈花-GoSaint  阅读(658)  评论(0编辑  收藏  举报