Jax-ws开发实例

初次接触Jax-ws(Java API xml web Service)感觉挺简单的,在这里写下我的所学的:

大概的顺序是:首先定义接口 ,然后写接口的实现类,最后编写客户端。步骤是挺简单的,来看看代码吧!

定义接口:

@WebService  //用来标识这是一个对外服务的接口
public interface CalculatorService {

    @WebResult(name = "addResult")  //用来设置wsdl文件中的返回的结果的名称   @webparam用来设置参数的名称
    public int add(@WebParam int a, int b);
    
    @WebResult(name = "subtractResult")
    public int subtract(@WebParam int a, @WebParam int b);
}

编写实现类:

@WebService(endpointInterface="com.web.service.CalculatorService")  //接入点接口
public class CalculatorServiceImpl implements CalculatorService {

    public int add(int a, int b) {
        System.out.println(a + " + " + b + " = " + (a + b));
        return a + b;
    }

    public int subtract(int a, int b) {
        System.out.println(a + "-" + b + "=" + (a - b));
        return a - b;
    }

}

编写发布webservice类:

public class TestWebService {

    public static void main(String[] args) {
        //发布的地址指明我们提供的服务的地址
        String address = "http://localhost:8888/ns";
        //提供服务的地址和要发布的实现类
        Endpoint.publish(address, new CalculatorServiceImpl());
    }
}

写好之后我们运行一下:然后打开浏览器输入我们该才提供服务的地址:http://localhost:8888/ns?wsdl可以看到一个schma文件就正确了。

最后编写我们的访问的客户端:

public class TestClient {

    public static void main(String[] args) {
        try {
            //服务的具体地址
            URL url = new URL("http://localhost:8888/ns?wsdl");
            //wsdl的命名空间的  提供服务的实现类
            QName qname = new QName("http://service.web.com/", "CalculatorServiceImplService");
            Service service = Service.create(url, qname);
            //获取接口的实现类的实例
            CalculatorService cs = service.getPort(CalculatorService.class);
            System.out.println(cs.add(2, 3));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上面的客户端要放在同一个项目中,但是在实际的开发当中我们是不可能,下面来看看在真正的客户端应该怎样调用:

首先我们新建一个项目:

然后我们使用jdk自带的wsimport命令来依据wsdl文件生成类:

打开命令行输入:wsimport -d d:webservice/01 -keep -p test -verbose http://localhost:8888/ns?wsdl

-d:表示我们要生成的类的路径

-keep:表示生成。java原文件,若不添加则只生成class文件

-p:表示要生成的到的包的名称,可选

-verbose:表示显示生成的详细信息

生成完成后我们到目录找到我们生成的类文件:

上面是我没有输入  -p 命令时生成的,在生成是会将wsdl的命名空间反转作为包名,将我们的类文件复制到我们新建的项目中:

然后我们可以看到我们通过命令已经生成了很多的类文件这样我们就可以像调用本地文件一样调用webservice服务了:

编写Test测试类:

public class TestWebService {

    public static void main(String[] args) {
        //该类为自动生成的类 服务类:
        CalculatorServiceImplService csis = new CalculatorServiceImplService();
        CalculatorService cs = csis.getCalculatorServiceImplPort();
        System.out.println(cs.add(2, 3));
    }
}

测试运行通过,证明我们的程序正常。

原文地址:https://www.cnblogs.com/tangkai/p/3482951.html