zoukankan      html  css  js  c++  java
  • 【WebService】——入门实例


    服务端


    服务:

    1、add(int a,int b)

    2、minus(int a,int b)


    具体如下:

    <pre name="code" class="java">@WebService
    public interface IMyService {
    	//两数相加
    	public int add(int a, int b);
    	//两数相减
    	public int minus(int a, int b);
    }

    
    实现类
    

    (注意:引用正确的包)

    @WebService(endpointInterface="com.zttc.service.IMyService")
    public class MyServiceImpl implements IMyService {
    
    	@Override
    	public int add(int a, int b) {
    		System.out.println(a+"+"+b+"="+(a+b));
    		return a+b;
    	}
    
    	@Override
    	public int minus(int a, int b) {
    		System.out.println(a+"-"+b+"="+(a-b));
    		return a-b;
    	}
    	
    }


    发布服务:

    注意:要确保端口号未被占用,发布地址不能重复使用。

    //发布地址
    		String address="http://localhost:5555/service";
    		//发布
    		Endpoint.publish(address, new MyServiceImpl());
    		
    		System.out.println("Service Success!!!");



    查看服务:

    在浏览器地址栏输入 http://localhost:5555/service?wsdl(自定义的发布地址+"?wsdl"),查看服务。

    之后我们需要用到其中的targetNamespace 和name

    <definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.zttc.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://service.zttc.com/" name="MyServiceImplService">
    <types>
    <xsd:schema>
    <xsd:import namespace="http://service.zttc.com/" schemaLocation="http://localhost:5555/service?xsd=1"/>
    </xsd:schema>
    </types>
    <message name="add">
    <part name="parameters" element="tns:add"/>
    </message>
    <message name="addResponse">
    <part name="parameters" element="tns:addResponse"/>
    </message>
    <message name="minus">
    <part name="parameters" element="tns:minus"/>
    </message>
    <message name="minusResponse">
    <part name="parameters" element="tns:minusResponse"/>
    </message>
    <portType name="IMyService">
    <operation name="add">
    <input wsam:Action="http://service.zttc.com/IMyService/addRequest" message="tns:add"/>
    <output wsam:Action="http://service.zttc.com/IMyService/addResponse" message="tns:addResponse"/>
    </operation>
    <operation name="minus">
    <input wsam:Action="http://service.zttc.com/IMyService/minusRequest" message="tns:minus"/>
    <output wsam:Action="http://service.zttc.com/IMyService/minusResponse" message="tns:minusResponse"/>
    </operation>
    </portType>
    <binding name="MyServiceImplPortBinding" type="tns:IMyService">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="add">
    <soap:operation soapAction=""/>
    <input>
    <soap:body use="literal"/>
    </input>
    <output>
    <soap:body use="literal"/>
    </output>
    </operation>
    <operation name="minus">
    <soap:operation soapAction=""/>
    <input>
    <soap:body use="literal"/>
    </input>
    <output>
    <soap:body use="literal"/>
    </output>
    </operation>
    </binding>
    <service name="MyServiceImplService">
    <port name="MyServiceImplPort" binding="tns:MyServiceImplPortBinding">
    <soap:address location="http://localhost:5555/service"/>
    </port>
    </service>
    </definitions>


    客户端

    调用服务:


    1)伪客户端调用

       这种调用方式中,调用和被调用者都在同一个java项目中,并不是真正意义上的调用。先在这里介绍下这种方式,其他的在第二种方法中介绍。

                try {
    			//服务地址
    			URL url=new URL("http://localhost:5555/service?wsdl");
    			//使用targetNamespace和name
    			QName sname=new QName("http://service.zttc.com/","MyServiceImplService");//命名空间,提供的名称
    			Service service=Service.create(url,sname);
    			//实现接口
    			IMyService ms=service.getPort(IMyService.class);
    			System.out.println("1+2="+ms.add(1,2));
    		} catch (MalformedURLException e) {
    		
    			e.printStackTrace();
    		}




    2)远程调用——使用wsimport生成服务端


    新建一个java project,使用命令wsimport

    语法:wsimport -d  本地存放路径 -keep -verbose wsdl地址



    现在将操作之前发布好的服务



    在本地目录中可以找到生成的文件,有java文件和class文件。


    将wsimport生成的文件拷贝到新的project中,新建Test类,进行测试,代码与1)伪客户端调用类似,不再重复。这样,我们就模拟了远程调用模式。


    小结:

             今天主要介绍了WebService的入门demo,下篇介绍wsdl的具体配置。

  • 相关阅读:
    ubuntu 安装redis以及phpredis
    【译】关于Rust模块的清晰解释
    【译】Ringbahn的两个内存Bug
    从背单词到写代码
    【译】Rust中的array、vector和slice
    【译】理解Rust中的闭包
    【译】Rust,无畏并发
    Linux环境下发布.net core
    负载均衡之nginx
    mysql数据库变更监控(canal)
  • 原文地址:https://www.cnblogs.com/saixing/p/6730235.html
Copyright © 2011-2022 走看看