网上各种创建webservice接口的方法,创建简单,但是大都集成到已有项目中比较繁琐,这里介绍一个通过cxf简单集成webservice接口的方法,传统web项目即可集成。
项目结构如下:
第一步:创建接口 IHelloWorldServer
@WebService
public interface IHelloWorldServer {
@WebMethod
public String sayHello(@WebParam(name="username")String username);
}
第二步:创建接口实现类 HelloWorldServerImp (这里可以继承自己项目的BaseDao类操作数据库)
public class HelloWorldServerImp implements IHelloWorldServer {
@Override
public String sayHello(String username) {
return username+" : HelloWorld";
}
}
第三步:发布类 WebServlet
import javax.servlet.ServletConfig;
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.transport.servlet.CXFNonSpringServlet;
public class WebServlet extends CXFNonSpringServlet {
// private static final String SERVICE_SUFFIX = "";
private static final long serialVersionUID = 1L;
@Override
protected void loadBus(ServletConfig servletConfig) {
super.loadBus(servletConfig);
Bus bus = getBus();
BusFactory.setDefaultBus(bus);
HelloWorldServerImp helloWorld = new HelloWorldServerImp();// 实现类
// 方法一
// ServerFactoryBean serverFactoryBean = new ServerFactoryBean();
// //server工厂
// 方法二
JaxWsServerFactoryBean serverFactoryBean = new JaxWsServerFactoryBean();
/*
* 方法一发布的参数@WebParam会无效,不能被识别为有意义参数,客户端参数会显示为arg0,arg1
* 方法一与方法二发布的项目,在客户端实例化时会有差异
*/
serverFactoryBean.setServiceClass(IHelloWorldServer.class);// 接口类
serverFactoryBean.setAddress("/helloWorld"); // 服务请求路径
serverFactoryBean.setServiceBean(helloWorld);
serverFactoryBean.create();
System.out.println("=================================================");
System.out.println("== ");
System.out.println("== webservice服务发布成功! ");
System.out.println("== ");
System.out.println("=================================================");
}
}
第四步:添加web.xml配置 添加依赖包
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>com.test.server.WebServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
上面的servlet节点中 <load-on-startup>节点代表服务发布的顺序,如果要操作数据库,一定不能比BaseDao层启动快,否则会报错,可以设置成已有节点更大的值即可。
启动过后,wsdl地址为:http://localhost:8080/blueway_web/ws/helloWorld?wsdl
依赖包我已打包好,有需要的可以下载支持一下也可以自己寻找
地址:https://download.csdn.net/download/qq_37749959/12325228
接下来是测试类 HelloWorldClient 测试
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
public class HelloWorldClient {
public static void main(String[] args) {
//方法一与方法二生成的类不同,所以实例化方式有些许区别,请自行测试方法一
//方法一
//IHelloWorldServer toolCardService= new IHelloWorldServerImpService();
//方法二
IHelloWorldServerService helloWorld= new IHelloWorldServerService();
IHelloWorldServer webServlet = helloWorld.getIHelloWorldServerPort();
String responseData = webServlet.sayHello("李磊");
System.out.println(responseData);
}
}
运行过后显示效果:
参考文章:https://blog.csdn.net/xiaoduishenghuogo/article/details/38147165