国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

使用jaxws建立webservice客戶端并實(shí)現(xiàn)soap消息的handler驗(yàn)證示例

2019-11-26 15:36:55
字體:
供稿:網(wǎng)友

因項(xiàng)目需要,將之前使用過的webservice重新?lián)炝似饋恚⑶疫@次選擇了使用不需要jar包的Java原生Jaxws。首先是wsimport的用法,先分享我的用法:cmd下先轉(zhuǎn)到工程所在路徑,然后運(yùn)行以下命令

復(fù)制代碼 代碼如下:

wsimport -keep -extension -s ./src -p com.jaxws.test http://192.168.1.1:8080/service?wsdl

在com.jaxws.test的包下就能找到自動(dòng)生成的各種客戶端相關(guān)輔助類。這些類怎么用就不細(xì)說了,網(wǎng)上很多資料。然后就是自己編寫調(diào)用類(我這里只是一個(gè)方法,會(huì)被調(diào)用到就行)

復(fù)制代碼 代碼如下:

public String jaxws(Object[] opArgs)
{
    ServicesService service=new ServicesService();

    //向SOAP添加表頭
    service.setHandlerResolver(new HandlerResolver(){
        public List<Handler> getHandlerChain(PortInfo portInfo) {
            List<Handler> handlerList = new ArrayList<Handler>();
            //添加認(rèn)證信息
            handlerList.add(new ClientHandler());
            return handlerList;
        }
    });

    String result =service.getServicesPort().getResults(opArgs.toString());
    //得到結(jié)果
    System.out.println(result);
    return result;
}

注意到這里的【//添加認(rèn)證信息 handlerList.add(new ClientHandler());】,所以我們還需要新建一個(gè)ClientHandler類來實(shí)現(xiàn)認(rèn)證消息的組裝,如下:

復(fù)制代碼 代碼如下:

package com.jaxws.test;

import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.*;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

public class ClientHandler implements SOAPHandler<SOAPMessageContext> {

    public boolean handleMessage(SOAPMessageContext ctx) {

    //出站,即客戶端發(fā)出請(qǐng)求前,添加表頭信息
    Boolean request_p=(Boolean)ctx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
    if(request_p){
        try {
            SOAPMessage msg=ctx.getMessage();
            SOAPEnvelope env=msg.getSOAPPart().getEnvelope();
            SOAPHeader hdr=env.getHeader();
            if(hdr==null) hdr=env.addHeader();

            //添加認(rèn)證信息頭

            //QName(String namespaceURI, String localPart, String prefix)
            //QName(String namespaceURI, String localPart)
            //QName(String localPart)
            //@param namespaceURI:QName的名稱空間
            //@param localPart:QName的本地部分
            //@param prefix:QName的前綴
            QName name=new QName("http://csdc.info/", "Authentication", "wsse");
            SOAPHeaderElement header = hdr.addHeaderElement(name);

            //addChildElement(String localName, String prefix,String uri)
            //addChildElement(String localName, String prefix)
            //addChildElement(String localName)
            //@param uri:新元素所屬空間名稱URI
            //@param localName:新元素的本地名稱
            //@param prefix:新元素名稱的空間前綴
            //見JDK 1.6的API
            SOAPElement userElement = header.addChildElement("Username", "wsse");
            userElement.addTextNode("admin");
            SOAPElement passElement = header.addChildElement("Password", "wsse");
            passElement.addTextNode("admin");

            msg.saveChanges();

            //把SOAP消息輸出到System.out,即控制臺(tái)
            msg.writeTo(System.out);

            return true;   
        } catch (Exception e) {   
           e.printStackTrace();   
        }
    }   
    return false;   
    }

    @Override
    public boolean handleFault(SOAPMessageContext context) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void close(MessageContext context) {
        // TODO Auto-generated method stub       
    }

    @Override
    public Set<QName> getHeaders() {
        // TODO Auto-generated method stub
        return null;
    }
}

 這個(gè)類就把所有的soap消息都加上了一個(gè)頭消息,我這里的頭消息如下:
復(fù)制代碼 代碼如下:

<wsse:Authentication xmlns:wsse="http://csdc.info/">
    <wsse:Username>admin</wsse:Username>
    <wsse:Password>admin</wsse:Password>
</wsse:Authentication>

這樣就實(shí)現(xiàn)了帶soap頭認(rèn)證的基于jaxws的webservice客戶端。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 茌平县| 于田县| 乌拉特中旗| 眉山市| 波密县| 安多县| 黎川县| 沁水县| 泗洪县| 桐梓县| 青河县| 汾西县| 乌海市| 友谊县| 清新县| 朝阳县| 嘉兴市| 旅游| 德格县| 百色市| 万安县| 璧山县| 鄂伦春自治旗| 怀远县| 汉源县| 宣化县| 富锦市| 沁水县| 马公市| 宜兰县| 龙游县| 崇礼县| 宾川县| 邵东县| 洛扎县| 西华县| 定陶县| 寿阳县| 乌鲁木齐县| 铜山县| 呼伦贝尔市|