亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 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.49028c.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网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲永久免费观看| 亚洲最大成人免费视频| 欧美丝袜一区二区三区| 日韩经典中文字幕在线观看| 欧美成人免费一级人片100| 欧美性感美女h网站在线观看免费| 人体精品一二三区| 91久久国产综合久久91精品网站| 久久精品免费播放| 日韩精品福利在线| 国语自产精品视频在线看一大j8| 日本亚洲欧洲色| 亚洲欧美在线第一页| 国产欧洲精品视频| 日韩欧美国产激情| 精品一区二区三区四区在线| 日韩中文字幕精品| 操日韩av在线电影| 色狠狠av一区二区三区香蕉蜜桃| 亚洲国产欧美自拍| 成人www视频在线观看| 久久久久久成人精品| 国产一区二区在线免费视频| 亚洲一区二区三区视频| 狠狠操狠狠色综合网| 亚洲精品白浆高清久久久久久| 91禁国产网站| www日韩中文字幕在线看| 91亚洲精品视频| 国产在线999| 欧美日韩另类在线| 136fldh精品导航福利| 国产成人精品日本亚洲专区61| 国产乱人伦真实精品视频| 亚洲欧美综合另类中字| 亚洲欧洲黄色网| 日韩欧美国产免费播放| 久久精品小视频| 91网在线免费观看| 日本不卡高字幕在线2019| 中文字幕国产亚洲| 久久综合伊人77777蜜臀| 日韩视频免费大全中文字幕| 亚洲人成自拍网站| 91网站在线免费观看| 日韩精品在线影院| 狠狠久久亚洲欧美专区| 成人激情在线观看| 97香蕉超级碰碰久久免费软件| 欧美激情乱人伦| 青青草成人在线| 久久好看免费视频| 久久久视频在线| 欧美巨乳在线观看| 国产成人免费av电影| 日韩av电影在线网| 不卡伊人av在线播放| 亚洲成人久久网| 亚洲欧洲日产国码av系列天堂| 91九色国产社区在线观看| 久久伊人色综合| 91久久在线观看| 精品电影在线观看| 欧美一区二区大胆人体摄影专业网站| 久久电影一区二区| 日韩欧美国产成人| 一区二区三区视频观看| 国产精品男人爽免费视频1| 色播久久人人爽人人爽人人片视av| 亚洲人成在线观看| 日韩精品在线观看网站| 亚洲视频第一页| 色阁综合伊人av| 国产日本欧美一区二区三区在线| 中文字幕精品在线视频| 91在线免费看网站| 成人国产亚洲精品a区天堂华泰| 88国产精品欧美一区二区三区| 亚洲自拍偷拍一区| 亚洲www在线| 日韩精品欧美激情| 91大神在线播放精品| 亚洲xxxx18| 国产极品jizzhd欧美| 91美女片黄在线观看游戏| 欧美洲成人男女午夜视频| 成人网欧美在线视频| 一区二区三区回区在观看免费视频| 国产精品视频一区国模私拍| 不用播放器成人网| 日韩成人在线播放| 欧美色视频日本高清在线观看| 亚洲国产日韩一区| 国产精品久久国产精品99gif| 欧美性xxxx极品hd满灌| 久久久久久成人| 久久久久久久一| 98视频在线噜噜噜国产| 亚洲成人久久久| 久久久www成人免费精品张筱雨| 韩国v欧美v日本v亚洲| 亚洲高清久久网| 亚洲欧美中文日韩v在线观看| 亚洲成成品网站| 欧美激情精品久久久久久黑人| 亚洲一区二区在线| 日韩精品亚洲精品| 91深夜福利视频| 国产成人精品久久二区二区| 日韩欧美国产一区二区| 中文亚洲视频在线| 92裸体在线视频网站| 亚洲直播在线一区| 久久免费视频这里只有精品| 26uuu国产精品视频| 日韩国产精品一区| 中文字幕日韩av综合精品| 亚洲另类xxxx| 欧美大片免费观看在线观看网站推荐| 欧美中文字幕视频在线观看| 国产亚洲人成网站在线观看| 国产精品久久久久久亚洲调教| 亚洲第一视频网| 国产精品扒开腿做爽爽爽的视频| www.午夜精品| 日韩在线视频网站| 亚洲自拍偷拍福利| 97在线观看视频| 中文字幕一精品亚洲无线一区| 中文字幕九色91在线| 91精品国产99久久久久久| 国产成人免费av| 久久激情视频免费观看| 国产精品成人在线| 久久伊人色综合| 性欧美激情精品| 一区二区欧美在线| 国产精品va在线播放| 亚洲欧洲偷拍精品| 欧美性极品xxxx做受| 日韩精品在线观看网站| 久久影院资源网| 中文字幕亚洲欧美一区二区三区| 大量国产精品视频| 亚洲aa中文字幕| 欧美电影免费观看高清完整| 欧美福利在线观看| 免费91麻豆精品国产自产在线观看| 裸体女人亚洲精品一区| 国产精品一区二区三区久久久| 午夜精品一区二区三区在线| 日韩中文字幕久久| 日韩在线观看免费网站| 中文字幕日韩欧美在线视频| 成人a在线观看| 欧美精品videos另类日本| 精品偷拍各种wc美女嘘嘘| 亚洲欧美日韩久久久久久| 91精品国产91| 国产精品色婷婷视频| 日韩成人激情影院| 欧洲精品毛片网站| 91色视频在线导航| 91性高湖久久久久久久久_久久99|