麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

springboot整合cxf發布webservice以及調用的方法

2024-07-14 08:42:01
字體:
來源:轉載
供稿:網友

webservice性能不高,但是現在好多公司還是在用,恰好今天在開發的時候對接項目組需要使用到webservice下面來說下簡單的案例應用

首先老規矩:引入jar包

<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.1.11</version></dependency>

新增一個公共的返回實體類

public class BaseResult { private String isSuccess; private String errCode; private String message; public String getIsSuccess() { return isSuccess; } public void setIsSuccess(String isSuccess) { this.isSuccess = isSuccess; } public String getErrCode() { return errCode; } public void setErrCode(String errCode) { this.errCode = errCode; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }}

其他類繼承即可

@XmlRootElement(name = "testResult")public class TestResult extends BaseResult implements Serializable { private static final long serialVersionUID = -7128575337024823798L; private List<User> data; public List<User> getData() { return data; } public void setData(List<User> data) { this.data = data; }}

新增user類

public class User { private String name; private int age; public User(String name, int age) { super(); this.name = name; this.age = age; } public User() { super(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }

接下來新增服務接口

@WebServicepublic interface TestWService{ @WebMethod @WebResult TestResult list3();}

實現服務接口

@Service@WebService(targetNamespace = "http://ws.**.com/",//命名空間,一般是接口的包名倒序) endpointInterface = "com.**.ws.TestWSservice")//接口全路徑//**自己改自己的包路徑public class TestWSservice Impl implements TestWSservice {  @Override public TestResult list3() { List<User> list = new ArrayList<User>(); list.add(new User("張三",23)); list.add(new User("李四",24)); TestResult testResult = new TestResult(); testResult.setIsSuccess("Y"); testResult.setData(list); testResult.setMessage("操作成功"); return testResult; }}

新增配置類,發布服務

import javax.xml.ws.Endpoint;import org.apache.cxf.Bus;import org.apache.cxf.bus.spring.SpringBus;import org.apache.cxf.jaxws.EndpointImpl;import org.apache.cxf.transport.servlet.CXFServlet;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.hikvision.hikserviceassign.ws.MonitorSurveyWS;import com.hikvision.hikserviceassign.ws.SmartLockServiceOrderWS;/** * webservice 發布服務類 * @author Xupx * @Date 2018年8月14日 下午4:25:25 * */@Configurationpublic class CxfConfig { @Autowired private TestWService testWService; @SuppressWarnings("all") @Bean public ServletRegistrationBean wsServlet() {  ServletRegistrationBean bean = new ServletRegistrationBean(new CXFServlet(), "/soap/*");   return bean; } @Bean(name = Bus.DEFAULT_BUS_ID) public SpringBus springBus() {  return new SpringBus(); } @Bean public Endpoint testWService() {  //會找到O2oWebService的實現類,所以實現類只能有一個  EndpointImpl endpoint = new EndpointImpl(springBus(), testWService);  endpoint.publish("/testWService");  return endpoint; }}

啟動項目,然后打開路徑:localhost:8080/soap 可以查看多個自己發布的服務,如果要發布多個服務,使用多個Bean即可

測試調用1:

import org.apache.cxf.endpoint.Client;import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)@SpringBootTestpublic class SpringBootCxfApplicationTests { @Test public void contextLoads() throws Exception { JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); Client client = dcf.createClient("http://127.0.0.1:8080/soap/testWservice?wsdl"); Object[] objects = client.invoke("list3",param1,param2);//list3方法名 后面是可變參數 //輸出調用結果 System.out.println(objects[0].getClass()); System.out.println(objects[0].toString()); }}

客戶端調用,用soapUI生成客戶端(具體方法自己百度下,不介紹了)

TestWSImplService implService = new TestWSImplService (); TestServiceWS ws = implService.getTestServiceWSImplPort(); TestResult result = ws.list3(); System.err.println(result);

增加密碼校驗,以下基礎內容引用http://www.companysz.com/article/145707.htm,我補充下包依賴

import javax.xml.namespace.QName;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.headers.Header;import org.apache.cxf.helpers.DOMUtils;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.w3c.dom.Document;import org.w3c.dom.Element;public class LoginInterceptor extends AbstractPhaseInterceptor<SoapMessage> { private String username="root"; private String password="admin"; public LoginInterceptor(String username, String password) {  //設置在發送請求前階段進行攔截  super(Phase.PREPARE_SEND);  this.username=username;  this.password=password; } @Override public void handleMessage(SoapMessage soapMessage) throws Fault {  List<Header> headers = soapMessage.getHeaders();  Document doc = DOMUtils.createDocument();  Element auth = doc.createElementNS("http://cxf.wolfcode.cn/","SecurityHeader");  Element UserName = doc.createElement("username");  Element UserPass = doc.createElement("password");  UserName.setTextContent(username);  UserPass.setTextContent(password);  auth.appendChild(UserName);  auth.appendChild(UserPass);  headers.add(0, new Header(new QName("SecurityHeader"),auth)); }}
import java.util.List;import javax.xml.soap.SOAPException;import org.apache.commons.lang3.StringUtils;import org.apache.cxf.binding.soap.SoapHeader;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.apache.cxf.headers.Header;public class AuthInterceptor extends AbstractPhaseInterceptor<SoapMessage> { private static final String USERNAME="root"; private static final String PASSWORD="admin"; public AuthInterceptor() {  //定義在哪個階段進行攔截  super(Phase.PRE_PROTOCOL); } @Override public void handleMessage(SoapMessage soapMessage) throws Fault {  List<Header> headers = null;  String username=null;  String password=null;  try {   headers = soapMessage.getHeaders();  } catch (Exception e) {   e.printStackTrace();  }  if (headers == null) {   throw new Fault(new IllegalArgumentException("找不到Header,無法驗證用戶信息"));  }  //獲取用戶名,密碼  for (Header header : headers) {   SoapHeader soapHeader = (SoapHeader) header;   Element e = (Element) soapHeader.getObject();   NodeList usernameNode = e.getElementsByTagName("username");   NodeList pwdNode = e.getElementsByTagName("password");    username=usernameNode.item(0).getTextContent();    password=pwdNode.item(0).getTextContent();   if( StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){    throw new Fault(new IllegalArgumentException("用戶信息為空"));   }  }  //校驗用戶名密碼  if(!(username.equals(USERNAME) && password.equals(PASSWORD))){   SOAPException soapExc = new SOAPException("認證失敗");   throw new Fault(soapExc);  } }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久久久久免费视频 | 国产精品久久久久无码av | videos真实高潮xxxx | 欧美日韩在线视频一区 | 曰批全过程120分钟免费69 | av免费在线网 | japanesexxxx24videofree| 久久免费视频精品 | 视频国产一区二区 | 欧美韩国日本在线 | 亚洲无线看 | 午夜精品久久久久久中宇 | 天海翼无删减av三级在线观看 | 国产99久久久久久免费看 | 精品国产一区二区三区久久久蜜 | 欧美成人精品欧美一级乱黄 | 中文字幕 亚洲一区 | 亚洲操比视频 | 欧美成人精品不卡视频在线观看 | 日本在线视频一区二区三区 | 精品一区二区三区免费毛片 | 一级大片一级一大片 | 日本中文字幕网址 | 黄色成人小视频 | 久久精品99北条麻妃 | 久久久成人精品视频 | 成人午夜精品久久久久久久蜜臀 | 欧美日韩色片 | 欧美性猛交一区二区三区精品 | 久久精品综合视频 | 娇妻被各种姿势c到高潮小说 | 福利一区二区三区视频在线观看 | 精品国产一区二区三区四区在线 | 国产1区2区在线观看 | 国产无限资源在线观看 | 美女亚洲综合 | 成人午夜影院 | 欧美不卡| 毛片a级毛片免费播放100 | 国av在线 | 色网站免费观看 |