java接口调用——webservice就是一个RPC而已

java接口调用——webservice就是一个RPC而已

很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法。就是本地方法调用的升级版而已,我明天会上一篇如何通过实现rpc,以及服务的注册和动态上下线。这里先上一篇RPC的实现者一,便于后面理解源码执行过程,框架就是在原理的基础上提供更加便捷的使用而已,协议就是基于TCP或UDP之上,服务者和调用者之间约定消息按照什么样的格式发送以及解析罢了。协议没什么高深莫测的。

原文和作者一起讨论:

下面是我多年前学习时,做的笔记,今天整理一下,分享出来,为我源码剖析RPC做准备。

,顾名思义就是基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求,从而实现远程调用。我们可以调用互联网上查询天气信息Web服务,然后将它嵌入到我们的程序(C/S或B/S程序)当中来,用户可以在我们的网点看到天气信息,他会认为我们为他提供了很多的信息服务,但其实我们只是简单调用了一下服务器上的一段代码来调用别人写好的。可以将你的服务(一段代码)发布到互联网上让别人去调用,也可以调用别人机器上发布的,就像使用自己的代码一样.

是两个软件系统之间的远程调用,这里的调用是跨语言的调用。两个不同的应用程序之间通过xml进行数据交互的。这样任何一种语言都可以解析xml文件中的数据。数据进行交互遵循的协议是http协议。http协议,以及我们用jdbc访问数据库其实底层都是依赖连接。比我我们经常在别的网站登录第三方账号也可以登录,其实也是用的,别的网站拿到账号到第三方提供的账号服务去验证。

在JDK1.6以后JAX-WS规范定义了如何发布一个服务。

JAX-WS是指Java Api for XML – .

用Jdk1.6.以后的版本发布一个服务.

与Web服务相关的类,都位于javax.jws.*包中。

主要类有:

@ - 它是一个注解,将 Java 类标记为实现 Web ,或者将 Java 接口标记为定义 Web 接口。

– 此类为端点服务类,它的方法用于将一个已经添加了@注解对象绑定到一个地址的端口上,接收两个参数,一个是本地的服务地址,二是提供服务的类。

如何发布一个web服务:

1、在类上添加@注解。

2、通过(端点服务) .( , ) 发布一个。

发布完成服务以后,将会启动一个独立的线程运行,这个启动的线程其实就是一个,它会接收来至其他端的连接。

其他注意事项:

1java webservice调用,给类添加上@注解后,类中所有的非静态方法都将会对外公布。不支持静态方法,final方法。

2,如果希望某个方法(非,非final)不对外公开,可以在方法上添加@(=true),阻止对外公开。

3,如果一个类上,被添加了@注解,则必须此类至少有一个可以公开的方法,否则将会启动失败。

@WebService
public class HelloService {
    public String sayHello( String intsmaze){
        System.out.println("sayHello()...");
        return  "hello " + intsmaze;
    }
    public String sayHello2(String intsmaze){
        return "hello " + intsmaze;
    }
    public static void main(String[] args) {
        Endpoint.publish("http://127.0.0.1:6789/hello ", new HelloService());
     //这个地方其实就是进行了封装,里面根据指定参数启动了一个servicesocket,并且生成了一个WSDL文档。
System.out.println(
"Server ready..."); } }

服务发布成功了,如何调用呢?请看说明书-WSDL:

任何一个服务在地址栏输入服务地址加?wsdl 如::6789/hello ?wsdl

目前不是访问,只是获取一个用于描述的说明文件,即:wsdl文件.wsdl-   ,是以XML文件形式来描述的”说明书”,有了说明书,我们才可以知道如何使用或是调用这个服务。

.exe是jdk自带的,可以根据wsdl文档生成客户端调用代码。

当然,无论服务器端的是用什么语言写的,都将在客户端生成Java代码.服务器端用什么写的并不重要.

注意生成的这些代码服务端并没有,不是从服务端下载的。

.exe位于bin目录下.

常用参数为:

-d  – 将生成.class文件。默认参数。

-s – 将生成.java文件。

-p -将生成的类,放于指定的包下:-p com..demo

() – :port/?wsdl,必须的参数。

示例:

C:/> –s .

注意:-s不能分开,-s后面有个小点,用于指定源代码生成的目录。点即当前目录。(注意.前后有空格)

如果使用了-s参数则会在目录下生成两份代码,一份为.class代码。一份为.java代码。

.class代码java webservice调用,可以经过打包以后使用。java代码可以直接Copy到我们的项目中运行。

然后只需要根据wsdl文件提供的信息调用生成类提供的方法。建议从下往上看。

.exe是jdk自带的,可以根据wsdl文档生成客户端调用java代码,当然如果是用其他语言的类似工具,解析wsdl后将会生成对应语言的代码,这里只是用java为例子,注意这些代码不是通过服务端下载的,而是通过解析wsdl生成对应java文件(就是一个本地IO)。

.exe位于bin目录下.

常用参数为:
-d<目录>  - 将生成.class文件。默认参数。
-s<目录> - 将生成.java文件。
-p<生成的新包名> -将生成的类,放于指定的包下:-p com.intsmaze.demo
(wsdlurl) - http://server:port/service?wsdl,必须的参数。

示例:C:/> –s .

注意:-s不能分开,-s后面有个小点,用于指定源代码生成的目录。点即当前目录。(注意.前后有空格)

如果使用了-s参数则会在目录下生成两份代码,一份为.class代码。一份为.java代码。.class代码,可以经过打包以后使用。java代码可以直接Copy到我们的项目中运行。

生成代码

然后只需要根据wsdl文件提供的信息调用生成类提供的方法。建议从下往上看。

wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:tns="http://jdkservice.intsmaze.com/" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:ns1="http://schemas.xmlsoap.org/soap/http" 
name="HelloServiceService" 
targetNamespace="http://jdkservice.intsmaze.com/">这是服务端的包结构,一般来说通过注解修改最多,不要暴露出去!
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://jdkservice.intsmaze.com/" 
elementFormDefault
="unqualified" targetNamespace="http://jdkservice.intsmaze.com/" version="1.0"> <xs:element name="sayHello" type="tns:sayHello"/> <xs:element name="sayHelloResponse" type="tns:sayHelloResponse"/> <xs:complexType name="sayHello"> <xs:sequence> <xs:element minOccurs="0" name="arg0" type="xs:string"/> <xs:element name="arg1" type="xs:int"/> </xs:sequence> </xs:complexType> <xs:complexType name="sayHelloResponse">6,子元素说明了它的类型,已经是参数还是返回值 <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types> <wsdl:message name="sayHelloResponse">5,通过element可以知道参数类型 <wsdl:part element="tns:sayHelloResponse" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="sayHello"> <wsdl:part element="tns:sayHello" name="parameters"></wsdl:part> </wsdl:message> <wsdl:portType name="HelloService">3,找到标签它的子元素就是提供的方法 <wsdl:operation name="sayHello">方法名 <wsdl:input message="tns:sayHello" name="sayHello"></wsdl:input>
4,输入参数,通过message的属性可以知道参数类型,但是如果生成本地代码,通过调用函数就可以知道参数类型了。 <wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse">输出参数 </wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="HelloServiceServiceSoapBinding" type="tns:HelloService">2,根据type的属性找到对应的标签 <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="sayHello"> <soap:operation soapAction="" style="document"/> <wsdl:input name="sayHello"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="sayHelloResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="HelloServiceService">服务的名称,创建具体服务对象。 <wsdl:port binding="tns:HelloServiceServiceSoapBinding" 1,根据这个名称找到对应的标签 name="HelloServicePort">服务对象调用getHelloServicePort()获取端口返回服务接口。 <soap:address location="http://127.0.0.1:7777/hello"/> </wsdl:port> </wsdl:service> </wsdl:definitions>

package com.intsmaze.jdkservice;
/**
 * 通过wsimport生成客户端代码调用webservice服务
 */
public class App {
    public static void main(String[] args) {
        /**
         * wsdl:
         */
        HelloServiceService hss = new HelloServiceService();
        /**
         * wsdl:
         */
        HelloService soap = hss.getHelloServicePort();
        String str = soap.sayHello("intsmaze");//这里我们看视乎在调用我们本地的方法,其实内部把发送数据组装为soap协议,
然后把
数据发送到了服务端,服务端的线程接收到请求处理返回了数据。
System.out.println(str); } }

我们使用过获取的HTTP的调用过程,并获得了HTTP的请求头及其他请求的详细信息。既然也是通过HTTP进行通信的,能不使用来获取它的请求过程呢?我们的代码不仅仅是向服务器发送的HTTP协议java接口调用——webservice就是一个RPC而已,更具体的说应该叫SOAP协议,它是进行通信的基础。为了获取SOAP数据发送和接收的格式。我们有必要使用一个工具来深入的了解.

我们使用TCP/IP 来监控拦截请求和响应具体数据的完整过程。

以下发出HTTP请求

响应的信息,同发送信息一样java webservice调用java接口调用——webservice就是一个RPC而已,先必须是HTTP协议,然后再遵循SOAP协议。

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » java接口调用——webservice就是一个RPC而已

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们