webservice之拦截器

记录一次webservice添加拦截器,来达到修改xml报文的目的

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;

 private  Soap createSoap() {
        service = new Service();
        soap = service.getServiceSoap();
        //拦截器改造报文头
        client = ClientProxy.getClient(soap);
        HeaderInInterceptor soapHeaderInInterceptor = new HeaderInInterceptor();
        soapHeaderInInterceptor.setHostUser("username", "password");
        client.getOutInterceptors().add(soapHeaderInInterceptor);
        return soap;
    }

public class HeaderInInterceptor extends AbstractSoapInterceptor {
    public HeaderInInterceptor() {
        super(Phase.WRITE);
    }

    private String msg;

    @Override
    public void handleMessage(SoapMessage message) throws Fault {
        try {
            List<Header> headers = message.getHeaders();
            QName qName = new QName("Authorization-My-Header");//需要增加的节点
            Document document = careteDocument(msg);
            Element documentElement = document.getDocumentElement();
            SoapHeader head = new SoapHeader(qName, documentElement);
            headers.add(head);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void setHostUser(String username,String pw) {
        String  str = "<tem:AuthorizationSoapHeader soapenv:mustUnderstand=\"1\" xmlns:tem=\"http://tempuri.org/\" "
            + "xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
            + "\t<tem:UserName>"+ username+"</tem:UserName>\n"
            + "\t<tem:Password>"+pw+"</tem:Password>\n"
            + "</tem:AuthorizationSoapHeader>";
        this.msg = str;
    }

    public static Document careteDocument(String xml) throws Exception {
        InputStream strm ;
        strm = new ByteArrayInputStream(xml.getBytes("UTF-8"));
        DocumentBuilderFactory domFactory = DocumentBuilderFactory
            .newInstance();
        domFactory.setNamespaceAware(true);
        DocumentBuilder builder = domFactory.newDocumentBuilder();
        Document doc = builder.parse(strm);
        return doc;
    }
}

ps:一般来说,使用 “wsimport -clientjar {xxx.jar} -p {包名} -s {源码包名} {url}” 生成的客户端中,创建service都有无参和有参的方法

无参:每次去调用远端的URL来生成service

有参:将wsdl放在本地,通过url传入该方法,即可减少每次请求的网络开销

service = new Service(new URL("file://xxx/xxx.wsdl"));

原文地址:https://www.cnblogs.com/number7/p/9291298.html

时间: 2024-10-16 13:00:54

webservice之拦截器的相关文章

使用CXF为webservice添加拦截器

拦截器分为Service端和Client端 拦截器是在发送soap消息包的某一个时机拦截soap消息包,对soap消息包的数据进行分析或处理.分为CXF自带的拦截器和自定义的拦截器 1.Service端: 通过将org.apache.cxf.jaxws.EndpointImpl类的方法即可实现   发布Web Service 方法可以通过Endpoint.publish()方法,此方法返为EndpointImpl,所以为Service端添加拦截器很简单. 部分代码: UserService us

webservice拦截器

CXF的拦截器 理解 为什么设计拦截器? 为了在webservice请求过程中,能动态操作请求和响应数据, CXF设计了拦截器. 拦截器分类: 按所处的位置分:服务器端拦截器,客户端拦截器 按消息的方向分:入拦截器,出拦截器 按定义者分:系统拦截器,自定义拦截器 基于jdk的webservice没有拦截器的功能实现. 接口方法: import javax.jws.WebMethod; import javax.jws.WebService; @WebService public interfac

WebService拦截器的使用

. WebService自定义拦截器只需要继承AbstractPhaseInterceptor即可 . 编写自定义拦截器之后,需要在发布的类和调用类中添加拦截器,分布使用JaxWsServerFactoryBean实例.getInInterceptors().add(自定义拦截器实例);和 JaxWsProxyFactoryBean.getOutInterceptors().add(自定义拦截器实例),进行拦截器的添加. . 一个简单的用户验证的拦截器,具体的代码如下: ------------

7.添加基于Spring的WebService拦截器

客户端拦截器: public class AccountInterceptor extends AbstractPhaseInterceptor<SoapMessage>{ private String name; private String password; public AccountInterceptor(String name,String password) { //Phase值决定了拦截器什么时候拦截到消息 //PRE_PROTOCOL准备请求时拦截 super(Phase.P

WebService -- Java 实现之 CXF ( 添加系统预定义的拦截器)

1. 概述 CXF允许我们在webservice的in/out位置添加拦截器.拦截器有两大分类,一类是系统预定义的:另一类是自定义拦截器. 2. 在server端添加拦截器. JaxWsServerFactoryBean wsSvrFactoryBean = new JaxWsServerFactoryBean(); String address = "http://127.0.0.1/helloWorld"; wsSvrFactoryBean.setAddress(address);

5.webService拦截器

CXF为什么要设计拦截器? 为了在webservice请求过程中,能动态操作请求和响应数据, CXF设计了拦截器. 拦截器分类 1.按所处的位置分:服务器端拦截器,客户端拦截器 2.按消息的方向分:入拦截器,出拦截器 3.按定义者分:系统拦截器,自定义拦截器 3.1系统拦截器: LoggingInInterceptor(系统日志入拦截器类) LoggingOutInterceptor(系统日志出拦截器类) ***server*** //SEI @WebService public interfa

基于CXF框架的webservice简单的SC两端出入拦截器实现。

开发工具:  ECLIPSE(EE) + CXF(2.5.9) (I)可以现在eclipse中使用JDK来创建webservice基础服务.(没有CXF框架的webservice) (1)新建一个java project. (命名为FirstWebService) 新建一个interface接口.改接口就是相当于webservice中的SEI. (在接口类定义前使用JDK自带webservice注释[email protected] SEI方法则是使用@WebMethod生命方法.) (2)在定

构建基于CXF的WebService服务(3)-- 利用拦截器实现权限验证

CXF中的拦截器分为in拦截器和out拦截器,又有客户端拦截器和服务端拦截器. 拦截器使用流程:客户端(out)-> 服务端(in)->处理业务->服务端(out)->客户端(in),并不是每一步都需要拦截器.在这里我们用到的是客户端Out拦截器和服务端in拦截器.服务端in拦截器检查用户级权限,客户端out浏览器发送用户信息给服务端. 1.创建服务端验证 JaxWsServerFactoryBean或Endpoint都可以通过getInInterceptors方法,向WebSer

【WebService】CXF拦截器的设置以及自定义CXF拦截器

WebService系列文章: [WebService]带你走进webservice的世界 [WebService]自定义WebService服务及其调用 [WebService]wsdl配置详解以及使用注解修改wsdl配置 [WebService]CXF处理javaBean等复合类型以及Map等复杂类型的数据 CXF的拦截器和以前学过的servlet的拦截器类似的,都是在开始或结束切入一段代码,执行一些逻辑之类的.我们可以在调用ws服务前设置拦截器,也可以在调用ws服务后设置拦截器,当然了,拦