此篇文章延续上一篇的ssi框架整合,在原来的ssi框架上进行整合webservice,用的是cxf框架。
首先在src下新加一个包ws,写一个接口HelloWebService,在ws.impl下写一个实现类HelloWebServiceImpl
以下是接口的代码,这里接口要有@WebService注解
package ws;
import javax.jws.WebService;
@WebService
public interface HelloWebService {
public String sayWebHello();
}
这是实现类的代码
package ws.impl;
import org.springframework.stereotype.Service;
import ws.HelloWebService;
@Service
public class HelloWebServiceImpl implements HelloWebService {
/**
* hello web service
*/
public String sayWebHello() {
return "hello web service";
}
}
要使注解生效,在root-context.xml中添加扫描
<context:component-scan base-package="ws"></context:component-scan>
在root-context…xml中引入cxf的bean
<!-- 导入cxf的bean定义文件 -->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
发布webservice,这里在头部添加标签,由于上篇中是最终的文件,所以标签是全的,就不再添加,如果报错可以去看标签是否遗漏。
<!-- 发布webSevice -->
<jaxws:endpoint
id="testWS"
implementor="#helloWebServiceImpl"
address="/Hello"
implementorClass="ws.HelloWebService"
/>
在web.xml中配置webservice
<!-- 配置webservice -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/WebService/*</url-pattern>
</servlet-mapping>
配置完毕,启动服务器,访问localhost:8080/EbizTest/WebService/Hello?wsdl会看到webservice以xml格式声明有哪些方法及描述等。至此,webservice发布完成。接下来进行调用测试,这里测试第一种方法,第二种方法下一篇再写。
首先建一个动态web工程,然后导入相应的jar包,接着进行更改编译路径,加入jar包这些日常操作。
接着右键项目目录,新建一个Web Service Client,输入刚才访问的地址localhost:8080/EbizTest/WebService/Hello?wsdl,若提示地址invalid(无效的),则可能是上个工程(也就是webservice的服务端)未启动服务。然后点next,默认放到src下,不用改了,再点finish。
此时会在src下生成一个ws包,包内有五个以HelloWebService开头的类,像这样
接下来在test包下写一个测试类TestWS,这里用main方法进行测试,用controller要配置很多东西,测试类代码如下
package test;
import java.rmi.RemoteException;
import ws.HelloWebServiceProxy;
public class TestWS {
public static void main(String[] args) throws RemoteException {
HelloWebServiceProxy helloWebService = new HelloWebServiceProxy();
String msg = helloWebService.sayWebHello();
System.out.println(msg);
}
}
最后执行main方法进行测试,如果提示找不到加载类,可能是项目哪里有错误,看看jar包有没有出问题的,有的话移除就可以了。成功的话控制台会输出hello web service。