-
怎样禁止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已经在用了,不能把它拿掉,真是头痛啊2011年7月13日 12:07
目前还没有答案
相关推荐
在Java世界中,Apache CXF是一个广泛使用的开源框架,它允许开发者创建和消费Web服务。当我们谈论"CXF发布WebService加入拦截器"时,这涉及到在CXF服务端和客户端增加拦截器来增强服务功能和控制流程。拦截器是CXF...
4. **服务拦截器**:CXF支持拦截器,可以通过`<jaxws:interceptors>`来添加自定义的处理逻辑,例如日志记录、安全检查等。 5. **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding)进行对象到XML的自动...
1. **CXF Interceptors机制**:CXF采用了一种基于拦截器的架构,允许开发者在消息处理的不同阶段插入自定义的行为。这些拦截器可以被用来执行各种任务,比如安全检查、日志记录等。 2. **Logging Message**:CXF内部...
例如,你可以使用Spring Security来保护你的Web服务,或者通过CXF的 interceptors 来自定义消息处理逻辑。 总的来说,CXF与Spring的结合,不仅简化了Web服务的开发,还提供了强大的扩展性和灵活性,使得开发者能够...
你可以定义一个实现了`ClientInterceptor`或`ServerInterceptor`接口的类,并通过`interceptors`属性添加到CXF客户端或服务器端。 6. **授权校验**:在拦截器中,你可以检查请求头中的认证信息,比如Token或者API...
<cxf:interceptors> <cxf:inInterceptors> </cxf:inInterceptors> <cxf:outInterceptors> </cxf:outInterceptors> </cxf:interceptors> </cxf:bus> <!-- CXF服务配置 --> <cxf:service id=...
1. Bus:包含registry of extensions、interceptors和Properties三个部分,负责管理 CXF 体系架构中的扩展、拦截器和属性。 2. Front-end:提供了编程模型,用于创建服务,实现了对服务的描述和发布。 3. ...
### CXF的拦截器(Interceptors) CXF支持拦截器机制,可以在消息传递过程中插入自定义逻辑。拦截器在处理Web服务请求时可以在不同阶段进行相应的处理,比如日志记录、消息转换、安全性校验等。 ### CXF开发实例中...
6. **Interceptors and Handlers**:CXF允许用户自定义拦截器和处理程序,以便在请求和响应过程中添加额外的功能或处理逻辑。 7. **Transport and Bindings**:CXF支持多种传输协议(如HTTP、HTTPS、JMS等)和绑定...
**CXF拦截器理论与应用** 在Web服务领域,Apache CXF是一个强大的开源框架,它提供了构建和消费SOAP和RESTful服务的能力。拦截器是CXF框架中的一个重要组成部分,允许开发者在服务调用的生命周期中插入自定义逻辑,...
我们可以通过Spring的`struts-plugin.xml`配置文件或者Struts2的`struts.xml`配置文件中的`<interceptors>`元素添加Spring拦截器,从而实现在Struts2动作类中注入Spring管理的bean。 在实际操作中,"CXFServer"可能...
6. **Interceptors**:拦截器是CXF中的一个重要概念,它们可以对消息进行处理,如认证、加密等。 Apache CXF的文件目录结构通常包含以下部分: 1. **bin**:存放可执行脚本,如启动和停止服务器的脚本。 2. **conf*...
【标题】"cxfSecurity.rar" 是一个与Apache CXF框架相关的压缩文件,它涉及到在Web服务(Webservice)环境中实现安全加密以及使用拦截器(Interceptors)的技术。Apache CXF是一个开源的服务框架,用于构建和开发...
- **CXF配置文件**:检查`cxf.xml`或`cxf-servlet.xml`等配置文件,确保安全相关的元素(如`<security:interceptors>`)已正确添加并配置。 - **服务接口注解**:确认服务接口和实现类上的安全注解(如`@...
6. **Interceptors**:CXF的Interceptors是处理SOAP消息的关键组件,它们可以在消息生命周期的各个阶段介入,例如在消息发送前或接收到消息后。开发者可以创建自定义拦截器来处理不规则消息,如添加额外的头信息或...
在CXF中,我们可以利用Interceptors(拦截器)机制来处理这些头部信息。 1. **创建SOAP头对象** 在CXF中,你可以定义自定义的SOAP头类来存储需要添加的信息。这个类通常会继承`javax.xml.soap.SOAPHeaderElement`...
CXF API Javadoc 是 Apache CXF 框架的重要组成部分,它提供了详细的Java文档,用于解释框架中的类、接口、方法和其他元素。Apache CXF 是一个开源服务框架,主要用于构建和开发Web服务。该框架支持多种协议和服务...
Apache CXF是一个开源的Java框架,它主要用于构建和开发服务导向架构(SOA)和Web服务。这个资源,"apache-cxf-jar包(分两次).rar",显然是一个包含Apache CXF库的压缩文件,由两个部分组成,这里只列出了第一部分...
Apache CXF 是一个开源的Java框架,主要用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)和Web服务。这个"apache cxf 工程"可能是一个包含CXF项目示例或配置的压缩包,尽管描述中没有具体信息,...
配置CXF以使用slf4j并提供Logging-Interceptors,以仅将SOAP-Messages登录到控制台 提取SoapMessages以在Elastic-Stack(ELK)中进行处理,例如 定制您自己的自定义SOAP错误,这些错误符合XML模式内部定义的异常 ...