用cxf集成spring的demo

时间:2022-05-25 19:34:32

1.在web.xml配置一下内容

<!-- webservice 相关配置 -->
<servlet>
<display-name>cxfServlet</display-name>
<servlet-name>cxfServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>config-location</param-name>
<param-value>WEB-INF/config/webservice-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>cxfServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

2.webservice-servlet.xml配置如下:

<span>GmDataExchangeWebServiceImp</span>

<?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-2.0.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="gmDataExchangeWs" implementor="com.jeecms.cms.webservice.imp.GmDataExchangeWebServiceImp" address="/gmDataExchangeWs" />
</beans>

3.定义接口IGmDataExchangeWebService

import javax.jws.WebParam;
import javax.jws.WebService;
/**
* 交易信息-变更公示接口
* @author Administrator
*
*/
@WebService(<span style="color:#ff0000;">targetNamespace</span>="interfaces.webservice.cms.jeecms.com")
public interface IGmDataExchangeWebService {
public String saveOrUpdateExchangeData(
@WebParam(name="businessXml") String businessXml,
@WebParam(name="authenticateXml") String authenticateXml,
@WebParam(name="type") String type);
}

4.实现接口

@WebService(endpointInterface="com.jeecms.cms.webservice.interfaces.IGmDataExchangeWebService",
targetNamespace="interfaces.webservice.cms.jeecms.com")
public class GmDataExchangeWebServiceImp implements IGmDataExchangeWebService {

public String saveOrUpdateExchangeData(String businessXml,String authenticateXml,String type) {
//TODO
return null;
}
}

5.访问http://ip:port/services/gmDataExchangeWs?wsdl

用cxf集成spring的demo用cxf集成spring的demo

6.调用接口demo

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.hibernate.envers.tools.Tools;

import sun.misc.BASE64Encoder;

import com.jeecms.cms.util.PropertiesUtil;
import com.jeecms.cms.util.StaticVariableUtil;
import com.jeecms.cms.util.ToolsUtil;
import com.jeecms.cms.util.WebserviceUtil;

public class WebServiceTest {

public static void main(String[] args){
String serverURL = "http://192.9.5.11:8080/services/gmDataExchangeWs?wsdl";
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(serverURL);
Map<String,String> paramMap = new HashMap<String, String>();
paramMap.put("businessXml", getBusinessXml());
paramMap.put("authenticateXml", getAuthenticateXml());
paramMap.put("type", "1");
String soapRequestData = getRequestXml("interfaces.webservice.cms.jeecms.com", "saveOrUpdateExchangeData", paramMap);
try {
HttpEntity re = new StringEntity(soapRequestData,HTTP.UTF_8);
httppost.setHeader("Content-Type","application/soap+xml; charset=utf-8");
httppost.setEntity(re);
HttpResponse response = httpClient.execute(httppost);
//输出结果
if(response.getStatusLine().getStatusCode() == 200){
String xmlStr = EntityUtils.toString(response.getEntity());
xmlStr = ToolsUtil.decodeString(xmlStr);
int beginIndex = xmlStr.indexOf("<return>")+"<return>".length();
int endIndex = xmlStr.indexOf("</return>");
String returnStr = xmlStr.substring(beginIndex, endIndex);
System.out.println(returnStr);
if("".equals(returnStr)){
//TODO
}
else{
//TODO
}
}
else{
System.out.println("调用接口失败");
//TODO
}
} catch (Exception e) {
e.printStackTrace();
} finally{
httpClient.getConnectionManager().shutdown();
}

}
public static String getRequestXml(String nameSpace, String method, Map<String,String> paramMap){
StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
sb.append("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ");
sb.append(" xmlns:sam=\""+nameSpace+"\" "); //命名空间
sb.append(" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"");
sb.append(" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">");
sb.append("<soap:Header/>");
sb.append("<soap:Body>");
sb.append("<sam:"+method+">"); //调用方法名
if(paramMap != null && !paramMap.isEmpty()){
for(Map.Entry<String, String> entry : paramMap.entrySet()){
String key = (String)entry.getKey();
String value = (String)entry.getValue();
value = value == null?"":value;
sb.append("<"+key+"><![CDATA["+value+"]]></"+key+">"); //传参
}
}
sb.append("</sam:"+method+">");
sb.append("</soap:Body>");
sb.append("</soap:Envelope>");

return sb.toString();
}
}