1.CXF依赖包
-cxf-2.7.17.jar
-xmlschema-core-2.1.0.jar
-wsdl4j-1.6.3.jar
-neethi-3.0.3.jar
-asm-3.3.1.jar
-geronimo-servlet_3.0_spec-1.0.jar
-stax2-api-3.1.4.jar
-woodstox-core-asl-4.4.1.jar
2.1)将CXF框架集成到Spring架构中
-修改web.xml文件加入CXFServlet前端控制器,拦截WebService请求,参见:cxf_home\samples\java_first_spring_support\src\main\webapp\WEB-INF\web.xml
<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>/services/*</url-pattern>
</servlet-mapping>
2)在Spring配置文件中引入CXF提供的cxf.xml配置,文件参见:cxf_home\samples\java_first_spring_support\src\main\webapp\WEB-INF\cxf-servlet.xml
<import resource="classpath:META-INF/cxf/cxf.xml" />
3. 1) 采用CXF框架开发基于JAX-WS规范的WebService北向接口
-北向接口和南向接口?
2)Facade(门面模式/外观模式),北向就是一个非常典型的facade模式体现,体现了统一入口
3)建立EgovFacade,采用@WebService和@WebParam注解声明
package com.chuangfuwu.egov.service;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface EgovFacade {
/**
* 取得所有的用户
* @return
* <users>
* <user>
* <login-account></login-account>
* <user-name></user-name>
* </user>
* ........
* ........
* <users>
*/
public String getUsers();
/**
* 根据帐号取得用户信息
* @param loginAccount
* @return
* <user>
* <login-account></login-account>
* <user-name></user-name>
* </user>
*/
public String getUserByLoginAccount(@WebParam(name="loginAccount")String loginAccount);
}
4)建立EgovFacadeImpl类实现以上接口
我数据库的用户字段是AccountNo和Name
package com.chuangfuwu.egov.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import com.bjpowernode.egov.domain.User;
import com.bjpowernode.egov.service.EgovFacade;
import com.bjpowernode.egov.service.UserService;
@Component
public class EgovFacadeImpl implements EgovFacade {
@Resource
private UserService userService;
@Override
public String getUsers() {
List<User> users = userService.getAll();
StringBuilder userXml = new StringBuilder();
userXml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
userXml.append("<users>");
for (User user : users) {
userXml.append("<user>");
userXml.append("<login-account>");
userXml.append(user.getAccountNo());
userXml.append("</login-account>");
userXml.append("<user-name>");
userXml.append(user.getName());
userXml.append("</user-name>");
userXml.append("</user>");
}
userXml.append("</users>");
return userXml.toString();
}
@Override
public String getUserByLoginAccount(String loginAccount) {
User user = userService.getUserByLoginAccount(loginAccount);
StringBuilder userXml = new StringBuilder();
userXml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
userXml.append("<user>");
userXml.append("<login-account>");
userXml.append(user.getAccountNo());
userXml.append("</login-account>");
userXml.append("<user-name>");
userXml.append(user.getName());
userXml.append("</user-name>");
userXml.append("</user>");
return userXml.toString();
}
}
5)发布WebService,让外界系统可以访问,参见:cxf_home\samples\java_first_spring_support\src\main\webapp\WEB-INF\cxf-servlet.xml
-引入jaxws命名空间
xmlns:jaxws="http://cxf.apache.org/jaxws"
-引入jaxws命名空间对应的xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
-采用jaxws命名空间下的endpoint标签发布
<jaxws:endpoint
id="egovFacade"
implementor="#egovFacadeImpl"
address="/EgovFacade" />
6)启动Tomcat,采用浏览器访问,查看WSDL,http://localhost:8080/egov/services/EgovFacade?wsdl
7)采用SoapUI进行测试