java jax-ws webservice编程,入门教程,包含服务端与客户端,编码

java jax-ws webservice

就是服务端程序提供接口,客户端,通过服务端提供的jar包(或者打包的类文件),通过jax-ws直接调用服务端暴露的接口来进行操作.

服务端

共三个文件

java jax-ws webservice编程,入门教程,包含服务端与客户端,编码_第1张图片

接口

package com.jaxwsdemo.serveice;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style = Style.RPC)
public interface ICalculator {
    @WebMethod
    float add(@WebParam float a, @WebParam float b);
    @WebMethod
      float minus(@WebParam float a, @WebParam float b);
    @WebMethod
      float multiply(@WebParam float a, @WebParam float b);
    @WebMethod
    float divide(@WebParam float a, @WebParam float b);
}

实现类

package com.jaxwsdemo.serveice.impl;
import com.jaxwsdemo.serveice.ICalculator;
import javax.jws.WebService;

@WebService(endpointInterface = "com.jaxwsdemo.serveice.ICalculator")
public class ICalculatorimpl implements ICalculator {
    @Override
    public float add(float a, float b) {
        System.out.println("a+b="+(a+b));
        return a + b;
    }

    @Override
    public float minus(float a, float b) {
        System.out.println("a-b="+(a-b));
        return a - b;
    }

    @Override
    public float multiply(float a, float b) {
        return a * b;
    }

    @Override
    public float divide(float a, float b) {
        return a / b;
    }
}

发布main类

package com.jaxwsdemo.main;

import com.jaxwsdemo.serveice.impl.ICalculatorimpl;

import javax.xml.ws.Endpoint;

public class mainTest {
    public static void main(String[] args) {
        System.out.println("发布开始:发布地址:http://localhost:9998/hw");
        String address="http://localhost:9998/hw";
        Endpoint.publish(address, new ICalculatorimpl());
        System.out.println("发布完成");
    }
}

运行后会显示发布的地址

java jax-ws webservice编程,入门教程,包含服务端与客户端,编码_第2张图片

此时我们通过访问:http://localhost:9998/hw?wsdl

得到wsdl

This XML file does not appear to have any style information associated with it. The document tree is shown below.
















































此时我们服务端就算是完事了,服务端主要是提供加减乘除接口, 通过Endpoint.publish(address, new ICalculatorimpl());发布别的服务就可以调用了.

在编写服务端之前我们先导出服务端类,共于客户端使用

这里我们使用使用jdk提供的wsimport命令导出

命令:wsimport -s e:/wyc/work http://localhost:9998/hw?wsdl

java jax-ws webservice编程,入门教程,包含服务端与客户端,编码_第3张图片

可以看到导出到了指定位置

java jax-ws webservice编程,入门教程,包含服务端与客户端,编码_第4张图片

小技巧:如果服务端在对方,如何生成服务端的jar包?

通过cmd命令: wsimport -keep http://localhost:9998/hw?wsdl 

可直接生成

java jax-ws webservice编程,入门教程,包含服务端与客户端,编码_第5张图片

生成路径就是cmd打开的位置!

java jax-ws webservice编程,入门教程,包含服务端与客户端,编码_第6张图片

我们放到将导出的包放到客户端

客户端编写

完整目录

java jax-ws webservice编程,入门教程,包含服务端与客户端,编码_第7张图片

导出的实现类和接口,与在客户端写的接口结构完全不一样,一定要通过命令导出!!

导出后的接口结构:


package jaxwsdemo.serveice.impl;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.Action;


/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.2.9-b130926.1035
 * Generated source version: 2.2
 *
 */
@WebService(name = "ICalculator", targetNamespace = "http://serveice.jaxwsdemo.com/")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface ICalculator {


    /**
     *
     * @param arg1
     * @param arg0
     * @return
     *     returns float
     */
    @WebMethod
    @WebResult(partName = "return")
    @Action(input = "http://serveice.jaxwsdemo.com/ICalculator/addRequest", output = "http://serveice.jaxwsdemo.com/ICalculator/addResponse")
    public float add(
        @WebParam(name = "arg0", partName = "arg0")
        float arg0,
        @WebParam(name = "arg1", partName = "arg1")
        float arg1);

    /**
     *
     * @param arg1
     * @param arg0
     * @return
     *     returns float
     */
    @WebMethod
    @WebResult(partName = "return")
    @Action(input = "http://serveice.jaxwsdemo.com/ICalculator/divideRequest", output = "http://serveice.jaxwsdemo.com/ICalculator/divideResponse")
    public float divide(
        @WebParam(name = "arg0", partName = "arg0")
        float arg0,
        @WebParam(name = "arg1", partName = "arg1")
        float arg1);

    /**
     *
     * @param arg1
     * @param arg0
     * @return
     *     returns float
     */
    @WebMethod
    @WebResult(partName = "return")
    @Action(input = "http://serveice.jaxwsdemo.com/ICalculator/multiplyRequest", output = "http://serveice.jaxwsdemo.com/ICalculator/multiplyResponse")
    public float multiply(
        @WebParam(name = "arg0", partName = "arg0")
        float arg0,
        @WebParam(name = "arg1", partName = "arg1")
        float arg1);

    /**
     *
     * @param arg1
     * @param arg0
     * @return
     *     returns float
     */
    @WebMethod
    @WebResult(partName = "return")
    @Action(input = "http://serveice.jaxwsdemo.com/ICalculator/minusRequest", output = "http://serveice.jaxwsdemo.com/ICalculator/minusResponse")
    public float minus(
        @WebParam(name = "arg0", partName = "arg0")
        float arg0,
        @WebParam(name = "arg1", partName = "arg1")
        float arg1);

}

导出后的实现类结构:


package jaxwsdemo.serveice.impl;

import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.WebServiceFeature;


/**
 * This class was generated by the JAX-WS RI.
 * JAX-WS RI 2.2.9-b130926.1035
 * Generated source version: 2.2
 *
 */
@WebServiceClient(name = "ICalculatorimplService", targetNamespace = "http://impl.serveice.jaxwsdemo.com/", wsdlLocation = "http://localhost:9998/hw?wsdl")
public class ICalculatorimplService
    extends Service
{

    private final static URL ICALCULATORIMPLSERVICE_WSDL_LOCATION;
    private final static WebServiceException ICALCULATORIMPLSERVICE_EXCEPTION;
    private final static QName ICALCULATORIMPLSERVICE_QNAME = new QName("http://impl.serveice.jaxwsdemo.com/", "ICalculatorimplService");

    static {
        URL url = null;
        WebServiceException e = null;
        try {
            url = new URL("http://localhost:9998/hw?wsdl");
        } catch (MalformedURLException ex) {
            e = new WebServiceException(ex);
        }
        ICALCULATORIMPLSERVICE_WSDL_LOCATION = url;
        ICALCULATORIMPLSERVICE_EXCEPTION = e;
    }

    public ICalculatorimplService() {
        super(__getWsdlLocation(), ICALCULATORIMPLSERVICE_QNAME);
    }

    public ICalculatorimplService(WebServiceFeature... features) {
        super(__getWsdlLocation(), ICALCULATORIMPLSERVICE_QNAME, features);
    }

    public ICalculatorimplService(URL wsdlLocation) {
        super(wsdlLocation, ICALCULATORIMPLSERVICE_QNAME);
    }

    public ICalculatorimplService(URL wsdlLocation, WebServiceFeature... features) {
        super(wsdlLocation, ICALCULATORIMPLSERVICE_QNAME, features);
    }

    public ICalculatorimplService(URL wsdlLocation, QName serviceName) {
        super(wsdlLocation, serviceName);
    }

    public ICalculatorimplService(URL wsdlLocation, QName serviceName, WebServiceFeature... features) {
        super(wsdlLocation, serviceName, features);
    }

    /**
     *
     * @return
     *     returns ICalculator
     */
    @WebEndpoint(name = "ICalculatorimplPort")
    public ICalculator getICalculatorimplPort() {
        return super.getPort(new QName("http://impl.serveice.jaxwsdemo.com/", "ICalculatorimplPort"), ICalculator.class);
    }

    /**
     *
     * @param features
     *     A list of {@link WebServiceFeature} to configure on the proxy.  Supported features not in the features parameter will have their default values.
     * @return
     *     returns ICalculator
     */
    @WebEndpoint(name = "ICalculatorimplPort")
    public ICalculator getICalculatorimplPort(WebServiceFeature... features) {
        return super.getPort(new QName("http://impl.serveice.jaxwsdemo.com/", "ICalculatorimplPort"), ICalculator.class, features);
    }

    private static URL __getWsdlLocation() {
        if (ICALCULATORIMPLSERVICE_EXCEPTION!= null) {
            throw ICALCULATORIMPLSERVICE_EXCEPTION;
        }
        return ICALCULATORIMPLSERVICE_WSDL_LOCATION;
    }

}

注意一定要在客户端加入服务端提供的jar包(此处jar包指的是serveice包)

import jaxwsdemo.serveice.impl.ICalculator;
import java.net.URL;
import java.net.MalformedURLException;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class CelintMain {
    public static void main(String[] args) throws MalformedURLException {
        URL url=new URL("http://localhost:9998/hw?wsdl");
        QName qname = new QName("http://impl.serveice.jaxwsdemo.com/", "ICalculatorimplService");
        Service service = Service.create(url, qname);
        ICalculator cal = service.getPort(new QName("http://impl.serveice.jaxwsdemo.com/", "ICalculatorimplPort"),ICalculator.class);
       //cal.add((float)1, (float)2);
        float rusult =  cal.minus(2, 1);
        System.out.println(rusult);
    }
}

运行截图

java jax-ws webservice编程,入门教程,包含服务端与客户端,编码_第8张图片

服务端也会有相应的输出因为我们计算时打印了计算过程

服务端此时运行窗口截图

java jax-ws webservice编程,入门教程,包含服务端与客户端,编码_第9张图片

具体注解可自行百度,此文章已粘贴所有项目代码,粘贴即用!

你可能感兴趣的:(java,开发语言)