webservice02#wsdl#tcpmon#annotation定制参数名#服务类型
1,wsdl深入讲解
1>types:用来定义访问的类型,它的具体内容打开属性schemaLocation的值就可以看到,通过msimport导出之后都会产生相应的对象 比如 add.java addResponse.java minus.java minusResponse.java 。
<types> <xsd:schema> <xsd:import namespace="http://service.webservice.yangw.com/" schemaLocation="http://localhost:8888/ns?xsd=1"/> </xsd:schema> </types>
打开http://localhost:8888/ns?xsd=1的内容如下:
SOAP (Simple Object Access Protocol),简单对象访问协议,通过XML传输对象的
soap协议是用SOAPMessage来传递的
2>message: 每个方法必须为参数写消息,也必须为返回值写消息
<message name="minus"> <part name="parameters" element="tns:minus"/> </message> <message name="minusResponse"> <part name="parameters" element="tns:minusResponse"/> </message>
......
3>portType: 指明服务器的接口,operation指明接口中的方法
<portType name="IMyService"> <operation name="minus"> <input message="tns:minus"/> -- 参数 <output message="tns:minusResponse"/> -- 返回值 </operation> <operation name="add"> <input message="tns:add"/> <output message="tns:addResponse"/> </operation> </portType>
4>binding: 指定传递消息使用的格式, 消息有两种方式呈现给用户“document”和“rbc”,document用的最多;
消息以什么样的形式传递 “literal”使用xml形式的
<binding name="MyServiceImplPortBinding" type="tns:IMyService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="minus"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> <operation name="add"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding>
5> service 指定服务所发布的名称
<service name="MyServiceImplService"> <port name="MyServiceImplPort" binding="tns:MyServiceImplPortBinding"> <soap:address location="http://localhost:8888/ns"/> </port> </service>
2,消息是如何传递的,这里使用一个webservice的监控工具 tcpmon
这个工具下载解压缩后,直接运行 tcpmon-1.0-bin\build\tcpmon.bat 即可
将程序的 url地址端口改成我们的监听端口即可
package com.yangw.webservice.service; import java.net.URL; import javax.xml.namespace.QName; public class MyClient { public static void main(String[] args) throws Exception{ //我们也可以使用代参数的构造,指定URL和QName URL url=new URL("http://localhost:7777/ns?wsdl"); //生成QName(名称空间,本地webservice提供的名称) QName qName=new QName("http://service.webservice.yangw.com/","MyServiceImplService"); MyServiceImplService msis2=new MyServiceImplService(url,qName); IMyService ims2=msis2.getMyServiceImplPort(); System.out.println(ims2.add(10, 4)); } }
arg0,arg1,这样的名字没有意义,而且很难看,修改很简单的,在接口方法中加入相应的注解即可 @WebResult @WebParam
package com.yangw.webservice.service; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; //说明该接口是服务提供接口 @WebService public interface IMyService { @WebResult(name="addResult") public int add(@WebParam(name="a")int a,@WebParam(name="b")int b); @WebResult(name="minusResult") public int minus(@WebParam(name="a")int a,@WebParam(name="b")int b); }
***注意,修改之后,要重新wsimport 覆盖客户端的程序才能使用.***
3, 契约优先: 最大的好处可以定制标准
代码优先:
4, 服务类型: 基于实体的服务(最多)
基于功能的服务(如天气,统一发邮件)
基于流程的服务(业务流程) 业务流程BPM 服务编排 工作流程JBPM是业务系统内部的流程
未经作者 https://www.cnblogs.com/xin1006/ 梦相随1006 同意,不得擅自转载本文,否则后果自负