利用cxf框架发布webservice接口
- 引入cxf jar包
通过maven引入:修改pom.xml文件
<!-- cxf-begin -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.0.3</version>
</dependency>
<dependency> <groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.1.8</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/wsdl4j/wsdl4j -->
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
<!-- cxf-end -->
手动引入maven仓库中不存在的jar包
- 接口
package com.webService;
import javax.jws.WebService;
/**
* webservice接口类
*/
@WebService
public interface werServiceTest {
public String receive(String paramString1);
}
- 实现类
package com.webService;
import javax.jws.WebService;
/**
* webservice实现类
* @WebService 注解用在类上标识这个类是一个WebService的服务类
*/
class WebServiceImpl implements werServiceTest{
@Override
public String receive(String paramString1) {
System.out.println("当前城市:"+paramString1);
if("北京".equals(paramString1)){
return paramString1+":晴转多云!";
}
return paramString1+":其他地区不清楚!!";
}
}
- 添加CXF的配置文件applicationContext-cxf.xml,并引入cxf的命名空间
<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<!-- 通过spring管理webservice服务类 -->
<bean id="wwww" class="com.webService.WebServiceImpl"></bean>
<!-- 使用cxf发布webservice服务
引入cxf命名空间
address:服务地址
webservice地址:http://ip:端口号/项目名/web.xml url-pattern配置/webservice的address
-->
<jaxws:server address="/worksheetBackService">
<jaxws:serviceBean>
<ref bean="wwww"/>
</jaxws:serviceBean>
</jaxws:server>
</beans>
- 修改web.xml
把cxf的配置文件引入
配置cxf的核心servlet
<!-- begin 配置cxf核心的Servlet
作用:用来区分什么请求时一个webservice请求 -->
<servlet>
<servlet-name>workerWebSer</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>workerWebSer</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
<!-- end -->
- 在shiro的配置文件中放开对webservice的拦截
- 启动服务
- 访问地址
http://ip:端口号/项目名/webservice/worksheetBackService
http://localhost:8180/bd-be/webservice/worksheetBackService?wsdl
一、利用axis框架调用webservice接口:
- 引入axis jar包
通过maven引入:修改pom.xml文件
<!-- axis begin -->
<dependency>
<groupId>axis</groupId>
<artifactId>axis-ant</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.bundles</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.4_1</version>
</dependency>
<dependency>
<groupId>jaxrpc</groupId>
<artifactId>jaxrpc</artifactId>
<version>1.1</version>
</dependency>
<!-- axis end -->
手动导入:
//axis調用(服务器端接口类上要加@WebService)
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.encoding.XMLType;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
String url = "http://192.168.1.102:8989/uapws/service/INCGSDataSyncWebService";
String xml="<?xml version='1.0' encoding='utf-8'?><service><data><SJ><ID>2c958ad66e150091016e1f8e0b6b0025</ID><XMBH>LF2019117</XMBH><XMMC>山西省易地扶贫搬迁大型安置点教育医疗设施补短板项目评估工作</XMMC><WTDW>C000100</SJ></data></service>";
String targetspace = "http://itf.ws.nc/INCGSDataSyncWebService";
String method="MDM_XMXX";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(url));
call.addParameter("string", XMLType.XSD_STRING,ParameterMode.IN);//string 是用soapui时的参数,即是wsdl方法上的name
call.setReturnType(XMLType.XSD_STRING);
call.setUseSOAPAction(true);
String obj = (String) call.invoke(new javax.xml.namespace.QName(targetspace, method), new Object[] { xml });
System.out.println(obj);
//读取并转换String
SAXReader sax = new SAXReader();//创建一个SAXReader对象
StringReader read = new StringReader(obj);
Document document = sax.read(read);//获取document对象,如果文档无节点,则会抛出Exception提前结束
Element root = document.getRootElement();//获取根节点
Element data = root.element("mess");//获取子节点
String resultcode= data.elementText("returnCode");//获取节点的值
String returnMsg= data.elementText("returnMsg");//获取节点的值
if("0000".equals(resultcode)){
return this.buildSuccess(entity);
}else{
return this.buildError("msg", returnMsg, RequestStatusEnum.FAIL_FIELD);
}
二、利用cxf框架调用webservice接口:
1、引入jar包
- 把服务端的接口类复制到客户端,要保证接口类名,方法名,参数和wsdl上一致
服务器端接口类:
@WebService
public interface INCGSDataSyncWebService {
public abstract String MDM_XMXX(String project);
}
客户端接口类:
@WebService(targetNamespace="http://itf.ws.nc/INCGSDataSyncWebService")
public interface INCGSDataSyncWebService {
public abstract String MDM_XMXX(@WebParam(name="string")String project);
}
- 代码如下:
//cxf調用
String xml="<?xml version='1.0' encoding='utf-8'?><service><data><SJ><ID>2c958ad66e150091016e1f8e0b6b0025</ID></SJ></data></service>";
final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
final String address = "http://192.168.1.102:8989/uapws/service/INCGSDataSyncWebService";
factory.setAddress(address);
factory.setServiceClass(INCGSDataSyncWebService.class);//接口类名 INCGSDataSyncWebService workerService = (INCGSDataSyncWebService) factory.create();
String mdm_XMXX = workerService.MDM_XMXX(xml);
System.out.println(mdm_XMXX);
//读取并转换String
SAXReader sax = new SAXReader();//创建一个SAXReader对象
StringReader read = new StringReader(mdm_XMXX);
Document document = sax.read(read);//获取document对象,如果文档无节点,则会抛出Exception提前结束
Element root = document.getRootElement();//获取根节点
Element data = root.element("mess");//获取子节点
String resultcode= data.elementText("returnCode");//获取节点的值
String returnMsg= data.elementText("returnMsg");//获取节点的值
if("0000".equals(resultcode)){
return this.buildSuccess(entity);
}else{
return this.buildError("msg", returnMsg, RequestStatusEnum.FAIL_FIELD);
}