最近项目中运用到了motan进行分布式部署,但是本人对motan不太了解,仔细阅读了motan入门指南后还是没有完全体会到motan的思想与技术实现手段。
同事指点我从WebService入手,理解soap协议,从中获得灵感。
附上WebService工作原理链接(转):
http://www.cnblogs.com/Jessy/p/3528341.html
实践出真知。在网上阅读完WebService与soap的相关资料后,直接上手开干!
工具:
- intelliJ IDEA 2017 ULTIMATE
于是就研究了一下,但是关于intellij 开发 WebService 的文章极少,要不就是多年以前,于是研究一下,写这篇博文。纯属记录,分享,中间有不对的地方,望请指正,下面开始。
首先,开发WebService的服务器端,不需要借助任何的其他,JDK就可以搞定,只要在类上标注了@WebService,以及在方法上,标注了@WebMethod方法,就可以认为他是一个WebService。
下面,先显示一下我的目录结构:
在server包下的是服务器端代码,在client包下的是客户端代码。
下面看一下,服务端代码:
HelloWorldWS.java
package com.zj.server;
/**
* Author: zj
* Date: 2017/6/2
* Time: 11:31
*/
public interface HelloWorldWS {
public String sayHi(String name);
}
这是一个接口。(当然也可以没有这个接口,效果是一样的)
HelloWorldImpl.java
package com.zj.server;
import javax.jws.WebMethod;
import javax.jws.WebService;
/**
* Author: zj
* Date: 2017/6/2
* Time: 11:32
*/
@WebService
public class HelloWorldImpl implements HelloWorldWS{
@WebMethod
@Override
public String sayHi(String name) {
String str = "welcome:" + name;
System.out.println("服务器方法被调用,sayHi运行:"+str);
return str;
}
}
注意上面的两个注释@WebService 和 @WebMethod
下面就可以发布这个WebService了
Publish.java
package com.zj.server;
import javax.xml.ws.Endpoint;
/**
* Author: zj
* Date: 2017/6/2
* Time: 11:34
*/
public class Publish {
public static void main(String[] args) {
Object impl = new HelloWorldImpl();
String address = "http://localhost:8989/HelloWorld";
Endpoint.publish(address,impl);
System.out.println("WebService发布成功");
}
}
下面着重说一下客户端代码的创建过程。
intellij14 中内置了WebService 的客户端代码的实现方式,他是使用的 JAX-WS.废话不多说,上图。
在Intellj 的 Tool–>WebServices–>Generate Java Code From WSDL (一看就是根据WSDL文档生成java代码了)
随后应该弹出这个一个提示框。
按照上图的配置,就会在client包中生成这些代码:
下面我们就可以根据这些生成的代码,访问服务端的WebService了。
OK,先创建客户端test,跑起来!
package com.zj.client;
/**
* Author: zj
* Date: 2017/6/2
* Time: 14:34
*/
public class test {
public static void main(String[] args) {
HelloWorldImplService helloWorldImplService = new HelloWorldImplService();
HelloWorldImpl helloWorld = helloWorldImplService.getHelloWorldImplPort();
String result = helloWorld.sayHi("第一个WebService");
System.out.println("客户端成功调用sayHi方法,返回:" + result);
}
}
服务端显示:
客户端显示: