赞
踩
参考:https://blog.csdn.net/hgx_suiyuesusu/article/details/88918192
用。
Web service建好以后,你或者其他人就会去调用它。简单对象访问协议(SOAP)提供了标准的RPC方法来调用Web
service。实际上,SOAP在这里有点用词不当:它意味着下面的Web
service是以对象的方式表示的,但事实并不一定如此:你完全可以把你的Web
service写成一系列的C函数,并仍然使用SOAP进行调用。SOAP规范定义了SOAP消息的格式,以及怎样通过HTTP协议来使用SOAP。SOAP也是基于XML(标准通用标记语言下的一个子集)和XSD的,XML是SOAP的数据编码方式。
你会怎样向别人介绍你的Web
service有什么功能,以及每个函数调用时的参数呢?你可能会自己写一套文档,你甚至可能会口头上告诉需要使用你的Web
service的人。这些非正式的方法至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的Web
service的时候,他们的工具(如Visual Studio)无法给他们提供任何帮助,因为这些工具根本就不了解你的Web service。
解决方法是:用机器能阅读的方式提供一个正式的描述文档。Web service描述语言(WSDL)就是这样一个基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web service及其函数、参数和返回值。WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应Web service的代码。
Universal Description, Discovery and Integration
为加速Web Service的推广、加强Web
Service的互操作能力而推出的一个计划,基于标准的服务描述和发现的规范(specification)。
以资源共享的方式由多个运作者一起以Web Service的形式运作UDDI商业注册中心。
UDDI计划的核心组件是UDDI商业注册,它使用XML文档来描述企业及其提供的Web Service。
UDDI商业注册提供三种信息:
White Page包含地址、联系方法、已知的企业标识。
Yellow Page包含基于标准分类法的行业类别。
Green Page包含关于该企业所提供的Web
Service的技术信息,其形式可能是指向文件或URL的指针,而这些文件或URL是为服务发现机制服务的。
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws-->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.2.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http-jetty-->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.2.7</version>
</dependency>
</dependencies>
import javax.jws.WebService;
@WebService
public interface Demo {
String sayHello(String name, int age);
}
public class DemoService implements Demo {
@Override
public String sayHello(String name, int age) {
return "Hello!!!" + name + "(" + age + " years old)";
}
}
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class MainService {
public static void main(String[] args) {
JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
jaxWsServerFactoryBean.setAddress("http://localhost:8080/demo");
jaxWsServerFactoryBean.setServiceClass(DemoService.class);
Server server = jaxWsServerFactoryBean.create();
server.start();
System.out.println("demo服务启动 。。。。");
}
}
import com.hgx.web.service.demo.Demo;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public class MainClient {
public static void main(String[] args) {
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
jaxWsProxyFactoryBean.setAddress("http://localhost:8080/demo");
jaxWsProxyFactoryBean.setServiceClass(Demo.class);
Demo demo = (Demo) jaxWsProxyFactoryBean.create();
System.out.println(demo.sayHello("hgx", 24));
}
}
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>
No binding operation info while invoking unknown method with params unknown.
</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:q0="http://test.cxf.hgx.com/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:sayhello>
<arg0>Jack</arg0>
<arg1>16</arg1>
</q0:sayhello>
</soapenv:Body>
</soapenv:Envelope>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:sayhelloResponse xmlns:ns2="http://test.cxf.hgx.com/">
<return>Hello, Jack(16 years old)</return>
</ns2:sayhelloResponse>
</soap:Body>
</soap:Envelope>
<definitions> <types> 定义 web service 使用的数据类型 </types> <message> 每个消息均由一个或多个部件组成。可以把它当做java中一个函数调用的参数。 </message> <portType> 它类似Java中的一个函数库(或一个模块、或一个类) </portType> <binding> 为每个端口定义消息格式和协议细节。 </binding> </definitions>
<wsdl:definitions
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://service.hgx.com/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
name="HelloWorldImplService"
targetNamespace="http://service.hgx.com/">
</wsdl:definitions>
标签 | 描述 |
---|---|
name | 我们java程序中服务接口的实现类,SEI定义是:服务接口类+Service后缀,Service自动追加 |
targetNamespace | 命名空间: 相当于Java里面的package它刚好是和我们Java定义中的包名相反 |
其它 | 不变化,不关心 |
xmlns:tns | 相当于Java里面的import, 包名反转 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。