我这里是实现有Spring+SpringMVC+Mybatis的项目,由于CXF能很好的集成到Spring容器中,所以对于已经使用Spring框架的项目推荐使用CXF框架来添加WebService服务
在项目中集成的步骤(服务端):
1:复制CXF的相关jar包。
2:在web.xml配置CXF的核心控制器:CXFServlet
3:开发一个WebService业务接口,该接口要使用@WebService修饰。
开发一个WebService实现类,实现类也需要用@WebService修饰。
4:在Spring配置文件中导入CXF提供Schema。我这里是重新写了一个cxf-config.xml的配置文件方便分模块和查找,开始进行配置使用jaxws:endpoint元素来暴露WebService。
5:如果要添加拦截器。在jaxws:endpoint元素添加inIntercepts或者outIntercept子元素
详细操作如下:
1:复制CXF的相关jar包其中核心包6个
2:在web.xml配置CXF的核心控制器:CXFServlet
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
3:开发一个WebService业务接口,该接口要使用@WebService修饰。
开发一个WebService实现类,实现类也需要用@WebService修饰。
package log.controller;
import javax.jws.WebService;
import net.sf.json.JSONObject;
@WebService
public interface TestWebservice {
public abstract void say();
public String login(String userName, String password);
}
package log.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.jws.WebService;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import dj.log.dao.EmployeeMapper;
import dj.log.service.EmployeeService;
import dj.log.service.LogService;
@WebService(endpointInterface = "log.controller.TestWebservice", serviceName = "TestWebserviceImpl")
public class TestWebserviceImpl implements TestWebservice {
@Autowired
private EmployeeService employeeService;
@Autowired
private EmployeeMapper employeeMapper;
@Autowired
private LogService logService;
/*
* (non-Javadoc)
*
* @see dj.log.controller.TestWebservice#say()
*/
@Override
public void say() {
System.out.println("dddddddddddddddddd");
}
public String login(String userName, String password) {
JSONObject json=new JSONObject();
List<Map<String, Object>> userInfo = logService.selectLogin(userName,
password);
String respMessage = "0";
if (userInfo.size() > 0) {
respMessage = "1";
json.put("userName", userName);
json.put("password", password);
json.put("emp_id",userInfo.get(0).get("EMP_ID"));
json.put("roles",userInfo.get(0).get("ROLES"));
}
json.put("respMessage", respMessage);
// PrintWriter out = response.getWriter();
// out.print(json.toString());
// out.close();
return json.toString();
}
}
4:在Spring配置文件中导入CXF提供Schema。我这里是重新写了一个cxf-config.xml的配置文件方便分模块和查找,开始进行配置使用jaxws:endpoint元素来暴露WebService:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<!-- 引用cxf包下的配置 -->
<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" />
<!--声明一个bean -->
<bean id="testWebservice" class="controller.TestWebserviceImpl" />
<!-- 通过这个bean来暴露WebService
implementor=""这个bean实现相关的业务逻辑:可以直接写类的路径,
也可以直接写已经声明的bean为了更好的使用Spring的依赖注入我们使用声明好的bean
address="/RCSWebService" 指定访问的路径
-->
<jaxws:endpoint id="myWebService" implementor="#testWebservice"
address="/RCSWebService" />
</beans>
在客户端调用的步骤:
1:下载apache-cxf文件,并配置系统环境变量path路径,我这里使用apache-cxf-2.7.6
2:调用cxf提供的wsdl2java工具,根据wsdl文档生成相应的java代码。
3:找到生成的类中一个继承了Service的类。该类的实例可以当做工厂类来使用。通过调用的该类的getXXX获得对象返回赋给一个代理类,通过代理类调用对应的方法
TestWebserviceImpl test = new TestWebserviceImpl();
TestWebservice testdao = test.getTestWebserviceImplPort();
testdao.say();
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。