
今年我采访了阿里,腾讯和美团之后web调用客户端程序,我发现了一个重要发现....... >>
webservice: 主要实现跨平台的web数据通信
功能: 假设有两个业务系统,一个是用C ++编写的,另一个是用Java编写的. 如果要实现两个不同业务系统之间的数据通信,则必须执行跨平台处理. 最好的连接平台. 但是,要在不同业务系统之间进行通信,必须制定出双方都认可的规则: 通信协议,Web服务正式基于简单对象服务协议,以实现不同业务系统之间的跨平台通信.
跨平台通信技术: Web服务,RMI等
网络服务服务框架: CXF / AXIS
肥皂请求标头: 简单对象访问协议: 简单对象访问协议
SOAP消息只是具有以下元素的常规XML文档:
信封(必需): 将XML文档标识为SOAP消息. 标头(可选): 包含标头信息: 通常指定消息的某些特征信息: 例如,指定自定义标签以过滤某些参数. 正文(必填): 包含所有呼叫和响应信息故障(可选): 提供有关在处理此消息时发生的错误的信息
xml名称空间指定标签元素名称空间以避免冲突,并且只能放置在指定名称空间的根元素上. 通常,名称空间的名称被指定为URI,但是为了防止命名冲突,root标记中包含的元素必须在soap的开头加上前缀,如果soap服务器接收到SOAP消息而Envelope的名称空间不是,信息将被自动丢弃

提供了一种非常灵活的组通信机制,无需事先同意就可以以分散但标准的方式扩展消息. 可以在SOAP中. 标头添加了用于实现此扩展的条目,例如身份验证,交易管理和付款. : Header元素是SOAP封装元素的第一个直接子元素. Header元素的所有直接子代都称为条目,条目的编码规则如下:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:sayHello xmln1:ns2="http://inter.ws.zhiwei.com/">
<arg0>china</arg0>
</ns1:sayHello>
</soap:Body>
</soap:Envelope>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:sayHelloResponse xmlns:ns1="http://inter.ws.zhiwei.com/">
<return>Hello china</return>
</ns1:sayHelloResponse>
</soap:Body>
</soap:Envelope>
types: 指定WebService使用的所有数据类型. 上面的案例使用了两种数据类型,即int和datetime.
消息: 指示操作中使用的数据类型.
portType: 指出此WebService支持的所有操作,即哪些方法可用于调用
绑定:
soap12: 绑定元素的传输指示传输协议,这里是http协议
操作: 指定要暴露给外界的界面
The

use属性指定输入和输出的编码. 这里没有指定编码.
服务: 指定服务的一些信息,主要是指定服务的访问路径
①: 创建服务接口和服务实现类服务接口
package com.zhiwei.cxf;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface IHelloWorld {
public String sayHello(@WebParam(name = "name") String name);
}
服务实现类:
package com.zhiwei.cxf;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService //标记该类为webservice的服务类
@SOAPBinding(style = Style.RPC)
public class HelloWorld {
//@WebParam:类似@RequestParam:将接口接受的参数暴露
public String sayHello(@WebParam(name = "name") String name) {
return name + " say: Hello World ";
}
}
②: 发布Web服务服务
package com.zhiwei.service;
import javax.xml.ws.Endpoint;
import com.zhiwei.cxf.*;
public class ServerDeploy {
public static void deployService() {
System.out.println("Server start .....");
HelloWorld service = new HelloWorld();
String address = "http://localhost:9000/helloWorld";
//绑定webservice的地址和服务接口,并发布服务
Endpoint.publish(address, service);
}
public static void main(String[] args) throws InterruptedException {
deployService();
System.out.println("server ready .....");
Thread.sleep(1000 * 600);
System.out.println("server exit .....");
System.exit(0);
}
}
测试: 打开浏览器: 9000 / helloWorld? wsdl您可以查看Web服务的wsdl内容,其中详细说明了Web服务服务接口的用法.


使用JAX-WS实现对Web服务的访问JDK的“ wsimport -keep wsdl URL”自动生成CXF框架的wsdl2java工具自动生成
/**
JaxWsProxyFactoryBean:Factory for creating JAX-WS proxies
JAX-WS:Java API for XML Web Services
功能:JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services ,在JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP,在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-WS的运行时实现会将这些API的调用转换成为对应的SOAP消息。
*/
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
/**
* SEI:Service Endpoint Interface,服务端接口
*/
factory.setServiceClass(IHelloWorld.class); // 指定服务端提供服务的接口
factory.setAddress("http://localhost:9000/helloWorld"); // 指定服务地址
// 指定内部故障
factory.getInFaultInterceptors().add(new LoggingInInterceptor());
// 指定外部故障
factory.getOutFaultInterceptors().add(new LoggingOutInterceptor());
// 创建JAX-WS服务的代理类,代理类可以直接调用webservice中的方法
IHelloWorld service = (IHelloWorld) factory.create();
// 调用服务接口方法
System.out.println("[result]--->" + service.sayHello("Python"));
客户结果:

结果表明客户端成功调用了远程Web服务服务.

wsimport: 自动生成的层次结构:

wsimport自动生成代码测试:
HelloWorldService helloWorldService = new HelloWorldService();
HelloWorld helloWorld = helloWorldService.getHelloWorldPort();
System.out.println(helloWorld.sayHello("Java"));
结果: 测试成功

命令: wsdl2java -d d: / temp -client: 9000 / helloWorld? wsdl
生成代码结构层次结构:

测试代码:
HelloWSImpService helloWSImpService=new HelloWSImpService();
HelloWS helloWS=helloWSImpService.getHelloWSImpPort();
String result=helloWS.sayHello("--->China!");
System.out.println(result);
结果: 测试成功
你好--->中国!!
695856371
|喜欢此站点的朋友可以将其添加为书签,或加入我们一起交流技术!
欢迎访问梁仲霖的个人博客网站. 该个人博客网站提供了最新的网站管理员新闻和各种Internet信息. 还提供个人博客模板web调用客户端程序,最新和最完整的Java教程,Java面试问题. 在这里,我将竭尽所能,使这个个人博客网站成为最佳网站!谢谢大家,希望大家一起进步!
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shouji/article-154624-1.html
好多水军啊