EOS CXF客户端动态调用webservice

CXF请求带安全验证的webservice
  在header头里面添加一个UsernameToken 带用户密码的soap报文信息,如:
<soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <wsse:Security
            xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="0">
            <wsse:UsernameToken
                xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-1815911473">
                <wsse:Username>bps</wsse:Username>
                <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">000000</wsse:Password>
            </wsse:UsernameToken>
        </wsse:Security>
    </soap:Header>
    <soap:Body>
        <ns2:begin
            xmlns="http://exception.model.bps.primeton.com"
            xmlns:ns2="http://www.primeton.com/WSGlobalTransactionManagerService"/>
        </soap:Body>
    </soap:Envelope>
请求方法如下
@Test
    public void begin(){
        String wsdlUrl="http://127.0.0.1:8080/default/WSGlobalTransactionManagerService?wsdl";
        // 创建动态客户端
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        Client client = dcf.createClient(wsdlUrl);
        client.getOutInterceptors().add(new AddSoapHeader());
        //输入报文拦截器
//        client.getInInterceptors().add(new InInterceptor());
        // 输出报文拦截器
//        client.getOutInterceptors().add(new OutInterceptor());

        Object[] objects = new Object[0];
        try {
            // invoke("方法名",参数1,参数2,参数3....);
            objects = client.invoke("begin");
            System.out.println("返回数据 TXID:" + objects[0]);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

如果是客户端代码生成的添加下面红色部分

 


拦截器代码:

package io.terminus.bps;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.xml.namespace.QName;

import org.apache.cxf.binding.soap.SoapHeader;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
import org.apache.cxf.headers.Header;
import org.apache.cxf.helpers.DOMUtils;
//import org.apache.cxf.helpers.XMLUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
  
public class AddSoapHeader extends AbstractSoapInterceptor {  
  
    public AddSoapHeader() {
    // 指定该拦截器在哪个阶段被激发  
        super(Phase.WRITE);  
    }

    /**
     * <soapenv:Header>
         <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="0">
             <wsse:UsernameToken
                xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
                wsu:Id="UsernameToken-1815911473">
                 <wsse:Username>bps</wsse:Username>
                 <wsse:Password   Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">000000</wsse:Password>
             </wsse:UsernameToken>
         </wsse:Security>
     </soapenv:Header>
     * @param message
     * @throws Fault
     */
    public void handleMessage(SoapMessage message) throws Fault {  

        QName qname = new QName("wsse:Security");//这个值暂时不清楚具体做什么用,可以随便写
  
        Document doc = (Document) DOMUtils.createDocument();

        Element wsse = doc.createElement("wsse:Security");
        wsse.setAttribute("xmlns:wsse","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
        wsse.setAttribute("soap:mustUnderstand","0");

        Element userNameToken = doc.createElement("wsse:UsernameToken");
        userNameToken.setAttribute("xmlns:wsu","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
        userNameToken.setAttribute("wsu:Id","UsernameToken-1815911473");

        Element userName = doc.createElement("wsse:Username");
        userName.setTextContent("bps");
        Element passWord = doc.createElement("wsse:Password");
        passWord.setAttribute("Type","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
        passWord.setTextContent("000000");

        userNameToken.appendChild(userName);
        userNameToken.appendChild(passWord);
        wsse.appendChild(userNameToken);

        SoapHeader head = new SoapHeader(qname, wsse);
        List<Header> headers = message.getHeaders();
        headers.add(head);
        System.out.print(headers.size());

    }
  
}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 1 文档介绍.......................................................................................................................................3 1.1 文档概述.............................................................................................................................3 1.2 适用范围.............................................................................................................................3 2 环境描述.......................................................................................................................................3 3 配置 EOSWebService服务....................................................................................................3 3.1 配置 WebService 声明.......................................................................................................3 3.1.1 WebLogic8.x环境.....................................................................................................3 3.1.2 JBoss 环境.................................................................................................................4 3.1.3 WebSphere5.x 环境...................................................................................................4 3.2 加入 axis 的 jar包到 CLASSPATH...................................................................................4 3.2.1 WebLogic8.x环境.....................................................................................................4 3.2.2 JBoss 环境.................................................................................................................5 3.2.3 WebSphere5.x 环境...................................................................................................5 3.3 设置调用 WebService 的验证码........................................................................................5 4 验证 EOSWebService服务....................................................................................................6 5 如何通过 EOSWebService 服务来调用业务逻辑................................................................6 5.1 传统 JAVA 方式.................................................................................................................6 5.1.1 调用方式及说明........................................................................................................6 5.1.2 例子...........................................................................................................................7 5.2 使用 EOS提供的 bizlet 调用方式..................................................................................11 5.2.1 调用方式及说明......................................................................................................11 5.2.2 例子.........................................................................................................................12 5.3 使用 VB 调用方式...........................................................................................................12 5.3.1 例子.........................................................................................................................12 5.4 使用 VC 调用方式...........................................................................................................13 5.4.1 例子.........................................................................................................................13 5.5 使用 delphi调用方式.......................................................................................................15 5.5.1 例子.........................................................................................................................15 附录 1: axis 的 jar包..................................................................................................................16 6 支持............................................................................................................................................18

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值