SOA 下实现分布式 调用 cxf+ webService +动态调用
2024-10-18 17:17:22
近期项目间隙 自学了 webservice 一下 是我写的 一个demo
首先我们在web.xml 里配置如下
- <servlet>
- <servlet-name>CXFServlet</servlet-name>
- <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>CXFServlet</servlet-name>
- <url-pattern>/services/*</url-pattern> //拦截qinqiu
- </servlet-mapping>
我用的 是maven项目 一下 pom.xml 引入一下依赖
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.7.14</version>
<exclusions>
<exclusion>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.7.14</version>
</dependency>
spring—cxf.xml 配置如下
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task" xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.2.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<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" />
<jaxws:endpoint id="lMSWebService"
implementor="wenqiang_web.wenqiang_mavenWeb.cn.wenqiang.service.impl.UserWebServiceimpl"
address="/lMSWebService">
</jaxws:endpoint>
</beans>
接口列子
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import wenqiang_web.wenqiang_mavenWeb.cn.wenqiang.emty.User;
import wenqiang_web.wenqiang_mavenWeb.cn.wenqiang.util.PageData;
@WebService(targetNamespace="http://impl.service.wenqiang.cn.wenqiang_mavenWeb.wenqiang_web/")
@SOAPBinding(style = Style.RPC)
public interface UserWebService {
String getUserByNameAndPwd(@WebParam(name = "pd")PageData pd);
}
接口实现类
public class UserWebServiceimpl implements UserWebService {
@Autowired
UserMapper usermapper;
public String getUserByNameAndPwd(@WebParam(name = "pd")PageData pd) {
Gson gson = new Gson();
String fenInformation = gson.toJson(usermapper.selectUserLogin(pd));
return fenInformation;
}
}
动态调用 工具类
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.log4j.Logger;
import org.springframework.util.StringUtils;
/**
*
* 使用cxf 调用webservice 接口
*
* @author chenj
*
*/
public class CxfInvokeUtil {
static Logger logger = Logger.getLogger(CxfInvokeUtil.class);
/**
*
* 调用webservice 接口
*
* @param wsdlUrl wsdl 地址
*
* @param method 调用方法名
*
* @param params 接口传入参数
*
* @return
*
*/
public static synchronized Object[] invoke(String wsdlUrl,String method,Object... params){
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
org.apache.cxf.endpoint.Client client = dcf.createClient(wsdlUrl);
Object[] objects = null;
if(StringUtils.isEmpty(wsdlUrl)){
logger.error("cxf 调用webservice 参数缺失:wsdl url 未传入");
return objects;
}
if(StringUtils.isEmpty(method)){
logger.error("cxf 调用webservice 执行方法名缺失:method 未传入");
return objects;
}
try {
objects=client.invoke(method,params);
} catch (Exception e) {
e.printStackTrace();
logger.error("cxf 调用webservice 执行错误:",e);
}
return objects;
}
}
动态调用测试类
import java.net.URLEncoder;
import java.util.Date;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import wenqiang_web.wenqiang_mavenWeb.cn.wenqiang.service.UserWebService;
import wenqiang_web.wenqiang_mavenWeb.cn.wenqiang.util.CxfInvokeUtil;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
public class MyTestClient {
public static void main(String[] args) throws Exception {
String wsdlUrl="http://localhost:8070/wenqiang_mavenWeb/Webservices/lMSWebService?wsdl";
String id="1";
Object[] obs = CxfInvokeUtil.invoke(wsdlUrl,"selectByPrimaryKey",id);
if(obs != null && obs.length > 0){
String result = (String)obs[0];
System.out.print(result);
}
如有不懂 可以和 本人联系 QQ:344436738
最新文章
- jasmine test 页面测试工具
- Oracle备库TNS连接失败的分析
- 【Java】java的内存浅析
- cURL.io - Share your files right from your terminal
- tomcat设置IP地址或者域名访问
- [妙味Ajax]第三课:AJAX跨域解决方案:JSONP
- OCR图片识别引擎
- Linux kernel 的 sendfile 是如何提高性能的
- linux修改用户id,组id
- 搭建iSCSI文件服务器故障转移群集
- Jquery ajax $getScript()和$getJSON和JSONP
- Spring+SpringMVC+MyBatis整合基础篇
- 第28次Scrum会议(11/16)【欢迎来怼】
- tomcat的添加及jar包和jQuery的加载
- 利率计算v2.0--web版--软件工程
- 为何php curl post模式发送数据速度变慢了?我来说说原因
- PHP通过SMTP实现发送邮件_包括附件
- Linux知识(3)----常用快捷键和命令
- 七、集成swagger2
- Windows下安装Memcached服务及安装PHP的Memcached扩展
热门文章
- eclipse和myeclipse设置默认编码格式为UTF-8
- windows phone 8.1开发:socket通信聊天
- Ubuntu14.04下搜狗输入法的安装及配置
- Python快速入门(1)
- Windbg调试中遇到的问题
- 关于RestfulAPI与SpringMVC之间的传值
- 获取VB类模块成员函数指针(转)
- 使用cocapods报错 [!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes
- layout_weight相关知识
- Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现