【webservice】-实例与基础认知

Webservice 

一例子:发布一个webservice服务1.1 服务源码

一接口

@WebService

publicinterface PersonService {

   public String add(inta,intb);

}

二实现类

@WebService(endpointInterface="xiao.it.java.PersonService")

publicclass PersonServiceIm implements PersonService {

   @Override

   public String add(inta, intb) {

     System.out.println(a+":"+b);

     returna+b+"";

   }

}

发布服务

publicstaticvoid main(String[] args) {

  

       //Endpoint发布服务   

       //参数解释   

       //1.address - 服务地址   

       //2.implementor - 实现类   

       Endpoint.publish("http://127.0.0.1:12345/cal", new PersonServiceIm());  

  }

1.2 服务地址

如上图所示,把源码中你发布的服务地址,在浏览器中输入,就可以得到一个服务的wsdl地址,点击这个地址,就可以看到wsdl文件。

二 wsdl文件

通过访问服务给的wsdl路径,我们可以看到如上所示的wsdl信息,如上图所示,从下往上看,总体可以分解为以下几部分。

2.1 service

<service name="PersonServiceImService">

<port name="PersonServiceImPort" binding="tns:PersonServiceImPortBinding">

<soap:address location="http://127.0.0.1:12345/cal"/>

</port>

</service

如上图所示,指定了我们的服务,服务地址 name指定了我们的服务实现类,也就是我们的服务提供类,location指定了我们的服务地址

2.2 binding

<binding name="PersonServiceImPortBinding" type="tns:PersonService">

<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>

</binding>

binding 指定了服务绑定的借口类型,type指定了接口

Operation 指定了服务提供的方法类型,也就是方法名

Input:指定了我们的输入参数的类型定义

Output: 指定了我们的输出参数的类型定义

2.3 portType

<portType name="PersonService">

<operation name="add">

<input wsam:Action=http://java.it.xiao/PersonService/addRequest message="tns:add"/>

<output wsam:Action="http://java.it.xiao/PersonService/addResponse" message="tns:addResponse"/>

</operation>

</portType>

portType 指定了接口

operation 方法签名

Message 指定了参数

2.4 Message

<message name="add">

<part name="parameters" element="tns:add"/>

</message>

<message name="addResponse">

  <part name="parameters" element="tns:addResponse"/>

</message

指定了要传递的参数类型式

2.5 type

<types>

<xsd:schema>

<xsd:import namespace="http://java.it.xiao/" schemaLocation="http://127.0.0.1:12345/cal?xsd=1"/>

</xsd:schema>

</types

定义了参数类型的schema文件的地址http://127.0.0.1:12345/cal?xsd=1 

 

三Schema文件

有对接口与参数的类型,参数名的原始描述。我们考本schema的地址到浏览器中进行访问

如上图所示是schema文件的描述,上面定时了tns:add的参数类型

从参数类型我们可以看出add方法接受两个参数arg0,arg1他们是int类型的

也可看到返回是string类型的,整个过程是通过sop协议来完成的。

四 SOAP报文

4.1 Soap报文拦截工具

如上图所示我们使用tcpmon工具监听TCP请求。我们发现我们拦截到的客户端请求参数的数据格式如下所示。

4.2 请求报文

<?xml version="1.0" ?>

<S:Envelopexmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

<S:Body>

<ns2:addxmlns:ns2="http://java.it.xiao/">

<arg0>15</arg0>

<arg1>23</arg1>

</ns2:add>

</S:Body>

</S:Envelope

4.3 响应报文

<?xmlversion="1.0" ?>

<S:Envelopexmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

<S:Body>

<ns2:addResponsexmlns:ns2="http://java.it.xiao/">

<return>38</return>

</ns2:addResponse>

</S:Body>

</S:Envelope>

如上所示我们是通过soap约定的方式完成了数据的传递。

4.4 指定schema参数

@WebService

publicinterface PersonService {

    @WebResult(name="addResult")

   public String add(@WebParam(name="num1") inta,@WebParam(name="num2") intb);

}

我们可以改变webService的接口参数此时生成的schema文档也发生了改变

<!--

 Published by JAX-WS RI athttp://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01.

-->

<xs:schema xmlns:tns="http://java.it.xiao/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://java.it.xiao/">

<xs:element name="add" type="tns:add"/>

<xs:element name="addResponse" type="tns:addResponse"/>

<xs:complexType name="add">

<xs:sequence>

<xs:element name="num1" type="xs:int"/>

<xs:element name="num2" type="xs:int"/>

</xs:sequence>

</xs:complexType>

<xs:complexType name="addResponse">

<xs:sequence>

<xs:element name="addResult" type="xs:string" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

</xs:schema>

此时我们再发送数据的时候

<?xml version="1.0" ?>

<S:Envelopexmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

<S:Body><ns2:addxmlns:ns2="http://java.it.xiao/">

<num1>15</num1>

<num2>23</num2>

</ns2:add>

</S:Body>

</S:Envelope>

 

<?xml version="1.0" ?>

<S:Envelopexmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

<S:Body>

<ns2:addResponsexmlns:ns2="http://java.it.xiao/">

<addResult>38</addResult>

</ns2:addResponse>

</S:Body>

</S:Envelope>

我们发现如上所示的数据格式,soap数据随接口的改变而改变。

4.5 对象参数schema

@WebService

publicinterface PersonService {

    @WebResult(name="addResult")

   public String add(@WebParam(name="num1") inta,@WebParam(name="num2") intb);

   

    @WebResult(name="dogs")

    public Dog haha(@WebParam(name="name") String name,@WebParam(name="dog") Dog dog);

}

我们会得到不一样的schema文件

<!--

 Published byJAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01.

-->

<xs:schema xmlns:tns="http://java.it.xiao/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://java.it.xiao/">

<xs:element name="add" type="tns:add"/>

<xs:element name="addResponse" type="tns:addResponse"/>

<xs:element name="haha" type="tns:haha"/>

<xs:element name="hahaResponse" type="tns:hahaResponse"/>

<xs:complexType name="add">

<xs:sequence>

<xs:element name="num1" type="xs:int"/>

<xs:element name="num2" type="xs:int"/>

</xs:sequence>

</xs:complexType>

<xs:complexType name="addResponse">

<xs:sequence>

<xs:element name="addResult" type="xs:string" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

<xs:complexType name="haha">

<xs:sequence>

<xs:element name="name" type="xs:string" minOccurs="0"/>

<xs:element name="dog" type="tns:dog" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

<xs:complexType name="dog">

<xs:sequence>

<xs:element name="age" type="xs:string" minOccurs="0"/>

<xs:element name="name" type="xs:string" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

<xs:complexType name="hahaResponse">

<xs:sequence>

<xs:element name="dogs" type="tns:dog" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

</xs:schema>

如上所示我们可以看到对象类型返回值类型dogs参数类型是一个tns:dog类型的,此时我们可以看到上面

<xs:complexType name="dog">

<xs:sequence>

<xs:element name="age" type="xs:string" minOccurs="0"/>

<xs:element name="name" type="xs:string" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

这个片段对返回类型进行了定义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值