0 0

怎样禁止CXF的所有Interceptors?5

由于项目是维护项目,部分之前的webservice client已经使用了CXF,
现在新开发一个webservice client端,为了实现方便,
不使用代码生成的方式,而是直接发xml格式的http soap请求.
经过测试,发现如果class path 中没有CXF 的jar,那么可以顺利返回结果,
但如果有cxf的jar,就会发生错误,因此很讨厌CXF的interceptor,相把它们都去掉,
相当于直接发xml的http soap请求,跳过java to xml ( Xml to java)的转换。

代码如下:

      String soapEnv = "http://schemas.xmlsoap.org/soap/envelope/";
      String xmlns_urn="urn:schema:metric:webservices:server:dsview:avocent:com";
      String xmlns_urn1="urn:common:webservices:server:dsview:avocent:com";
        String zipRequest = "<soapenv:Envelope "
            + " xmlns:soapenv=\"" + soapEnv + "\" "  
            + " xmlns:urn=\"" + xmlns_urn + "\""    
            + " xmlns:urn1=\"" + xmlns_urn1 + "\">"            
            + "<soapenv:Body>"
            + "<urn:getMetric>"
            + "   <urn:getMetricRequest>"
            + "   <urn:unitId>"
            + "      <urnl:name>10-0e-e0P0_l</urnl:name>"
            + "   </urn:unitId>"
            + "   <urn:metricName>avctPowerWattsRead</urn:metricName>"
            + "   </urn:getMetricRequest>"
            + "</urn:getMetric>"
            + "</soapenv:Body>"
            +"</soapenv:Envelope>";

        String ns   ="https://prcsgi02991/dsview/services/";
        String wsdl =ns +"MetricServiceApi?wsdl";
       
        System.out.println(zipRequest);
       
        URL url = new URL(wsdl);

        QName SERVICE_NAME1 = new QName(ns, "MyService");
        Service service = Service.create(SERVICE_NAME1);
       
        QName portName = new QName(ns, "MyServicePort");
       
        // Endpoint Address
        String endpointAddress = ns+"MyService";

        // Add a port to the Service
        service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
       Dispatch<Source> dispatch = service.createDispatch(portName,Source.class, Service.Mode.MESSAGE);
        /*
         * JAX-WS Dispatch provides three usage options: -- JAXBContext
         * (unsure if works though for rpc/enc WSDL) -- JAXP Source objects
         * (used here) -- SAAJ SOAPMessages (used in 2nd request below)
         */
        Source zipResponse = dispatch.invoke(new StreamSource(new StringReader(zipRequest)));
        MessageFactory msgFactory = MessageFactory.newInstance();
        dispatch.getBinding().getHandlerChain().add(soapMessageHandler);
        SOAPMessage geocodeMsg = msgFactory.createMessage();           
        SOAPPart env = geocodeMsg.getSOAPPart();
        env.setContent(zipResponse);

没有cxf jar的话,一切正常。
但如果有cxfjar,就会有错误:
javax.xml.ws.soap.SOAPFaultException: Error during saving a multipart message
at org.apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.java:197)
at org.apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.java:124)
at com.avocent.dvr.client.realpower.DSViewProviderWebServiceClient.test_dsview(DSViewProviderWebServiceClient.java:217)
at com.avocent.dvr.client.realpower.DSViewProviderWebServiceClient.getRealValue(DSViewProviderWebServiceClient.java:120)
at com.avocent.dvr.service.realpower.webservice.DSViewProviderServiceImpl.getValue(DSViewProviderServiceImpl.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:406)
at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183)
at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1417)
at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:878)
at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:121)
at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)
at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:49)
at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)
at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:146)
at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:274)
at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:377)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.avocent.dvr.service.persistence.HibernateRetryAndLogFilter.doFilter(HibernateRetryAndLogFilter.java:46)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.avocent.dvr.service.security.AmpAuthorizationFilter.doFilter(AmpAuthorizationFilter.java:134)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:680)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: org.apache.cxf.interceptor.Fault: Error during saving a multipart message
at org.apache.cxf.jaxws.interceptors.DispatchOutDatabindingInterceptor$PostDispatchOutLogicalHandlerInterceptor.handleMessage(DispatchOutDatabindingInterceptor.java:365)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
at org.apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.java:182)
... 46 more
Caused by: com.sun.xml.messaging.saaj.SOAPExceptionImpl: Error during saving a multipart message
at com.sun.xml.messaging.saaj.soap.MessageImpl.saveChanges(MessageImpl.java:1158)
at org.apache.cxf.jaxws.interceptors.DispatchOutDatabindingInterceptor$PostDispatchOutLogicalHandlerInterceptor.handleMessage(DispatchOutDatabindingInterceptor.java:361)
... 48 more
Caused by: com.sun.xml.messaging.saaj.SOAPExceptionImpl: Unable to get header stream in saveChanges:
at com.sun.xml.messaging.saaj.soap.MessageImpl.saveChanges(MessageImpl.java:1135)
... 49 more
Caused by: com.sun.xml.messaging.saaj.SOAPExceptionImpl: SOAP exception while trying to externalize:

因为考虑到cxf已经在用了,不能把它拿掉,真是头痛啊
SOA 
2011年7月13日 12:07
目前还没有答案

相关推荐

    CXF发布WebService加入拦截器

    在Java世界中,Apache CXF是一个广泛使用的开源框架,它允许开发者创建和消费Web服务。当我们谈论"CXF发布WebService加入拦截器"时,这涉及到在CXF服务端和客户端增加拦截器来增强服务功能和控制流程。拦截器是CXF...

    cxf所需jar包(内含配置文件)

    4. **服务拦截器**:CXF支持拦截器,可以通过`&lt;jaxws:interceptors&gt;`来添加自定义的处理逻辑,例如日志记录、安全检查等。 5. **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding)进行对象到XML的自动...

    CXF打印SOAP报文,记录WebService日志

    1. **CXF Interceptors机制**:CXF采用了一种基于拦截器的架构,允许开发者在消息处理的不同阶段插入自定义的行为。这些拦截器可以被用来执行各种任务,比如安全检查、日志记录等。 2. **Logging Message**:CXF内部...

    CXF WEBSERVICE

    例如,你可以使用Spring Security来保护你的Web服务,或者通过CXF的 interceptors 来自定义消息处理逻辑。 总的来说,CXF与Spring的结合,不仅简化了Web服务的开发,还提供了强大的扩展性和灵活性,使得开发者能够...

    springBoot完整整合WebService框架CXF示例

    你可以定义一个实现了`ClientInterceptor`或`ServerInterceptor`接口的类,并通过`interceptors`属性添加到CXF客户端或服务器端。 6. **授权校验**:在拦截器中,你可以检查请求头中的认证信息,比如Token或者API...

    13.为CXF与Spring整合发布WebService添加拦截器进行权限控制

    &lt;cxf:interceptors&gt; &lt;cxf:inInterceptors&gt; &lt;/cxf:inInterceptors&gt; &lt;cxf:outInterceptors&gt; &lt;/cxf:outInterceptors&gt; &lt;/cxf:interceptors&gt; &lt;/cxf:bus&gt; &lt;!-- CXF服务配置 --&gt; &lt;cxf:service id=...

    CXF体系架构

    1. Bus:包含registry of extensions、interceptors和Properties三个部分,负责管理 CXF 体系架构中的扩展、拦截器和属性。 2. Front-end:提供了编程模型,用于创建服务,实现了对服务的描述和发布。 3. ...

    CXF开发实例.pdf

    ### CXF的拦截器(Interceptors) CXF支持拦截器机制,可以在消息传递过程中插入自定义逻辑。拦截器在处理Web服务请求时可以在不同阶段进行相应的处理,比如日志记录、消息转换、安全性校验等。 ### CXF开发实例中...

    webService 生成插件apache-cxf(2.7.7)

    6. **Interceptors and Handlers**:CXF允许用户自定义拦截器和处理程序,以便在请求和响应过程中添加额外的功能或处理逻辑。 7. **Transport and Bindings**:CXF支持多种传输协议(如HTTP、HTTPS、JMS等)和绑定...

    08.CXF拦截器的理论以及如何为CXF的客户端和服务器端添加拦截器

    **CXF拦截器理论与应用** 在Web服务领域,Apache CXF是一个强大的开源框架,它提供了构建和消费SOAP和RESTful服务的能力。拦截器是CXF框架中的一个重要组成部分,允许开发者在服务调用的生命周期中插入自定义逻辑,...

    零配置spring 整合cxf、struts2

    我们可以通过Spring的`struts-plugin.xml`配置文件或者Struts2的`struts.xml`配置文件中的`&lt;interceptors&gt;`元素添加Spring拦截器,从而实现在Struts2动作类中注入Spring管理的bean。 在实际操作中,"CXFServer"可能...

    Apache CXF文件目录结构及需要jar包

    6. **Interceptors**:拦截器是CXF中的一个重要概念,它们可以对消息进行处理,如认证、加密等。 Apache CXF的文件目录结构通常包含以下部分: 1. **bin**:存放可执行脚本,如启动和停止服务器的脚本。 2. **conf*...

    cxfSecurity.rar cxf加密 加拦截器

    【标题】"cxfSecurity.rar" 是一个与Apache CXF框架相关的压缩文件,它涉及到在Web服务(Webservice)环境中实现安全加密以及使用拦截器(Interceptors)的技术。Apache CXF是一个开源的服务框架,用于构建和开发...

    CXF Web Service 安全认证出错?求大牛解决

    - **CXF配置文件**:检查`cxf.xml`或`cxf-servlet.xml`等配置文件,确保安全相关的元素(如`&lt;security:interceptors&gt;`)已正确添加并配置。 - **服务接口注解**:确认服务接口和实现类上的安全注解(如`@...

    CXF处理不规则SOAP message(转)

    6. **Interceptors**:CXF的Interceptors是处理SOAP消息的关键组件,它们可以在消息生命周期的各个阶段介入,例如在消息发送前或接收到消息后。开发者可以创建自定义拦截器来处理不规则消息,如添加额外的头信息或...

    CXF 添加soap 头部信息.zip_CXF增加soap头验证_bluex8z_cxf_meltedkw7_soap信息头

    在CXF中,我们可以利用Interceptors(拦截器)机制来处理这些头部信息。 1. **创建SOAP头对象** 在CXF中,你可以定义自定义的SOAP头类来存储需要添加的信息。这个类通常会继承`javax.xml.soap.SOAPHeaderElement`...

    cxf api javadoc

    CXF API Javadoc 是 Apache CXF 框架的重要组成部分,它提供了详细的Java文档,用于解释框架中的类、接口、方法和其他元素。Apache CXF 是一个开源服务框架,主要用于构建和开发Web服务。该框架支持多种协议和服务...

    apache-cxf-jar包(分两次).rar

    Apache CXF是一个开源的Java框架,它主要用于构建和开发服务导向架构(SOA)和Web服务。这个资源,"apache-cxf-jar包(分两次).rar",显然是一个包含Apache CXF库的压缩文件,由两个部分组成,这里只列出了第一部分...

    apache cxf 工程

    Apache CXF 是一个开源的Java框架,主要用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)和Web服务。这个"apache cxf 工程"可能是一个包含CXF项目示例或配置的压缩包,尽管描述中没有具体信息,...

    cxf-spring-boot-starter:由Spring Boot和Apache CXF支持的企业和生产就绪的SOAP Web服务

    配置CXF以使用slf4j并提供Logging-Interceptors,以仅将SOAP-Messages登录到控制台 提取SoapMessages以在Elastic-Stack(ELK)中进行处理,例如 定制您自己的自定义SOAP错误,这些错误符合XML模式内部定义的异常 ...

Global site tag (gtag.js) - Google Analytics