JAVA使用WebService的一些使用技巧

来源:互联网 发布:联通电信可用4g网络 编辑:程序博客网 时间:2024/06/04 20:04

             以前写文章单纯的就是为了记录一些技术实现,如果没有指出实际业务场景那么单纯的记录实现,不利于日后自己的查找和学习,业务场景就如同我们写代码的时候的注释一样,起到说明的作用,所以一篇好的技术文章是应该以一个业务场景来说明实际的业务场景,一般在企业中很少有采购系统全部采购一家软件公司的软件,且各个系统部署在业务流程的各个节点,如果各个系统业务自治,那就没什么问题,因为数据都在自己的系统内,操作起来比较方便,但是随着企业的业务发展,需要将各个系统进行连接来自动化完成相关的业务,那么好了,企业里的系统既有BS又有CS,而且实现的语言也不同,如JAVA平台,.NET平台,差异性比较大,那么如何来实现不同语言之间的信息交流么,我们其实有很多技术实现,但是那种好呢?其实又回到了业务场景,现在的主流技术有实时和非实时两种,非实时这种业务时效性要求不高的今天我们就不说了,那种技术都可以,只要保证数据正常传递就可以了,但是两个系统间数据的实时同步那就需要接口了,并且两个系统都是主动调用对方接口,为什么这么说呢,因为你只有主动了,才能得到自己想要的,如果你被动,那么你就不能及时得到你想要的。所以生活中也是一样的,我之前看过一篇文章有句话我觉得特别好---不是路不平,而是你不行。

            我举个例子,现在有两个业务系统A和B,现在有个业务场景,在A中做完单子,审核之后,自动同步到系统B,在B中审核后,回写确认消息给A,来完成这样一个业务场景,那么在A中调用B的接口的时候就要主动去调取接口,且B系统要主动暴露接口,B中同理,所以一个系统要和其他系统主动对接,就要暴露自己的接口,也要可以读取其他系统的接口,接下来我们说说在JAVA中实现webservice的实现方式,因为在。net中实现webservice比较容易。

           WEBservice我们可以使用java自带的API来实现,也可以使用CXF,CXF的好处我们接下来再说。

1,以JAVA的形式发布及调用webservice

import javax.jws.WebMethod;import javax.jws.WebService;import javax.xml.ws.Endpoint;@WebServicepublic class Hello {@WebMethodpublic String sayHello(String mmm) {return "invoke success"+mmm;}public static void main(String[] args) {Hello hello = new Hello();Endpoint endpoint = Endpoint.publish("http://localhost:4222/hello", hello);}}

发布没什么复杂,是不是很简单,这样我们就实现了一个webservice.

我们在浏览器中访问地址http://localhost:4222/hello?wsdl就可以看见我们发布的webservice了。

下面我们来说说客户端调用了,当我们拿到这个地址的时候客户端就可以调用了

我们在客户端通过wsimport命令生成客户端相应的类,然后将类打成一个jar包,放在系统中就可以像本地一样调用了

public class WsdlDemo {public static void main(String[] args) {HelloService _hello=new HelloService();Hello _ser=_hello.getHelloPort();String aa=_ser.sayHello(" aaa");System.out.println(aa);}}
是不是很简单,这样我们就可以调用了,下面我们来说一下CXF的方式来调用webservice,优势是什么呢?优势是我们不用生成客户端代码

import org.apache.cxf.endpoint.Client;import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;public class HelloClient {public static void main(String[] args) throws Exception {JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();Client client = dcf.createClient("http://localhost:4222/hello?wsdl"); Object[] res = client.invoke("sayHello", "test echo");System.out.println("Echo response: " + res[0]);}}
如何暴露webservice以及如何获取webservice都说完了,是不是很简单,还是那句话----不是路不平,而是你不行。

1 0
原创粉丝点击