1、分别创建两个Maven project,结构如下:
2、webservice_client_demo项目中的pom.xml内容如下:
4.0.0
com.baidu.webservice_client_demo
webservice_client_demo
0.0.1-SNAPSHOT
jar
webservice_client_demo
http://maven.apache.org
UTF-8
org.apache.cxf
cxf-rt-frontend-jaxws
3.0.10
org.apache.cxf
cxf-rt-transports-http-jetty
3.0.10
org.glassfish.main.javaee-api
javax.jws
3.1.2
junit
junit
3.8.1
test
org.apache.maven.plugins
maven-compiler-plugin
3.2
1.8
UTF-8
true
3、webservice_demo项目中的pom.xml内容如下:
4.0.0
com.baidu.webservice_demo
webservice_demo
0.0.1-SNAPSHOT
jar
webservice_demo
http://maven.apache.org
UTF-8
org.apache.cxf
cxf-rt-frontend-jaxws
3.0.10
org.apache.cxf
cxf-rt-transports-http-jetty
3.0.10
org.glassfish.main.javaee-api
javax.jws
3.1.2
junit
junit
3.8.1
test
org.apache.maven.plugins
maven-compiler-plugin
3.2
1.8
UTF-8
true
4、在webservice_demo创建一个接口供外部调用,HelloService、HelloServiceImpl、Server内容分别如下:
package com.baidu.service;
import javax.jws.WebService;
//对外发布服务的接口
@WebService
public interface HelloService {
//对外部服务的接口的方法
public String say(String name);
}
package com.baidu.service.impl;
import com.baidu.service.HelloService;
public class HelloServiceImpl implements HelloService{
public String say(String name) {
return name+",How are you .";
}
}
package com.test;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import com.baidu.service.impl.HelloServiceImpl;
public class Server {
public static void main(String[] args) {
//发布服务的工厂
JaxWsServerFactoryBean factory =new JaxWsServerFactoryBean();
//设置服务地址(访问方式:http://localhost:8000/baidu/hello?wsdl)
factory.setAddress("http://localhost:8000/baidu/hello");
//设置服务类
factory.setServiceBean(new HelloServiceImpl());
//发布服务
factory.create();
System.out.println("发布服务成功,服务启动了等待调用……");
}
}
5、webservice_client_demo单独作为一个项目来调用webservice_demo提供的一个接口,HelloService、Client内容如下:
package com.baidu.service;
import javax.jws.WebService;
//对外发布服务的接口
@WebService
public interface HelloService {
//对外部服务的接口的方法
public String say(String name);
}
package com.baidu.client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.baidu.service.HelloService;
public class Client {
public static void main(String[] args) {
//创建cxf代理工厂
JaxWsProxyFactoryBean factory =new JaxWsProxyFactoryBean();
//设置远程访问服务端地址
factory.setAddress("http://localhost:8000/baidu/hello");
//设置接口类型
factory.setServiceClass(HelloService.class);
//对接口生成代理对象
HelloService helloService = factory.create(HelloService.class);
//代理对象
System.out.println(helloService.getClass());
//远程访问服务端方法
String content = helloService.say("Tom");
System.out.println(content);
}
}
6、代码完成了,接下来开始启动测试,先启动webservice_demo中Server类,然后运行我们刚才定义的服务地址:http://localhost:8000/baidu/hello?wsdl
7、启动webservice_client_demo中的Client类,此时看eclipse控制台信息。
需要注意的细节:
1、本案例采用Apache CXF框架,需要引入相关依赖;
2、接口调用方需要定义被调用接口的全部信息,包括接口路径,这些信息要与被调用方的接口信息一致;
3、验证服务端接口是否发布成功需要在浏览器地址栏输入发布路径测试,注意链接后面接上?wsdl。