`

CXF超时配置

 
阅读更多

       前段时间需要配置CXF的超时设置,看到一篇不错的文章

       Web 服务都是使用HTTP 作为传输协议,这个端口用于配置服务端、客户端在调用Web 服务时的HTTP 的相关设置,例如:超时时间,SSL 相关设置、是否启用缓存等。
(1.)客户端调用:
<http-conf:conduit name="*.http-conduit">
<http-conf:client ConnectionTimeout="5000" ReceiveTimeout="10000" />
</http-conf:conduit>

 

在命名空间配置上需要加入:

xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"

http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd
这里的*.http-conduit 是指对所有的Web 服务调用起作用,如果你想对一部分起作用,可以使用{targetNamespace}serviceName.http-conduit 来设置。http-conf:conduit 是客户端配置的顶级元素,它有如下几个子元素:

 元素  描述
 http-conf:client  指定HTTP 的超时时间、是否启用持续连接、ContentType 等信息
 http-conf:authorization  指定HTTP 基本验证方式的相关配置
 http-conf:proxyAuthorization  指定HTTP 基本验证方式时使用的代理服务器配置
 http-conf:tlsClientParameters  指定SSL/TLS 连接方式的配置
 http-conf:basicAuthSupplier  指定HTTP 基本验证方式的提供者信息
 http-conf:trustDecider  指定HTTP 连接的信任机制配置

上面我们配置的是客户端连接Web 服务、接收返回值的超时时间设置,CXF 的默认设置为30000ms 和60000ms。
(2.)服务端调用:
<http-conf:destination name="*.http-destination">
<http-conf:server ReceiveTimeout="10000" />
</http-conf:destination>
这里的*.http-destination 是指对所有的Web 服务发布起作用,如果你想对一部分起作用,可以使用{targetNamespace}serviceName.http-destination 来设置。http-conf:destination 是客户端配置的顶级元素,它有如下几个子元素:

 元素  描述
 http-conf:server  指定HTTP 的连接设置信息
 http-conf:contextMatchStrategy  指定上下文匹配策略
 http-conf:fixedParameterOrder  指定是否固定参数拍学

(3.)Java Code 调用:
如果你不使用Spring,那么使用Java Code,那么你需要借助CXF 的Front End 的API 操作。
服务端:
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.frontend.ServerFactoryBean;
import org.apache.cxf.transport.http_jetty.JettyHTTPDestination;
import org.apache.cxf.transports.http.configuration.HTTPServerPolicy;
public class SoapServer {
public static void main(String[] args) {
ServerFactoryBean serverFactoryBean = new ServerFactoryBean();
serverFactoryBean.setAddress("http://127.0.0.1:8080/ws/services/helloService");
serverFactoryBean.setServiceClass(HelloServiceImpl.class);
Server server = serverFactoryBean.create();
JettyHTTPDestination destination = (JettyHTTPDestination) server.getDestination();
HTTPServerPolicy httpServerPolicy = new HTTPServerPolicy();
httpServerPolicy.setReceiveTimeout(32000);
destination.setServer(httpServerPolicy);
}
}
客户端:
import java.net.MalformedURLException;
import java.net.URL;
import java.text.ParseException;
import javax.xml.namespace.QName;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
public class SoapClient {
public static void main(String[] args) throws ParseException,
HelloException, MalformedURLException {
QName qName = new QName("http://server.soap.ilkj.net/","HelloServiceImpl");
HelloServiceImplService helloServiceImplService = newHelloServiceImplService(newURL("http://127.0.0.1:8080/ws/services/helloService?wsdl"),qName);
IHelloService helloService = helloServiceImplService.getPort(IHelloService.class);
Client client = ClientProxy.getClient(helloService);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setReceiveTimeout(32000);
http.setClient(httpClientPolicy);
// helloService.***
}
}
使用CXF的Front End的API,你可以调用更多的方法,但是你也看到操作起来也是最繁琐的,所以除非你有必要使用CXF的这么多特性,否则不要使用这种方式来操作JAX-WS。


6.CXF的拦截器特征机制:
CXF通过拦截器(Interceptor)和特征(Feature)扩展自己的功能,例如:WS-Addressing功能使用Feature实现,日志、WS-Security使用Interceptor实现。我们也可以编写自己的拦截器注册到CXF中完成特定的功能。CXF中的所有拦截器都要实现org.apache.cxf.inrerceptor.Interceptor<T extends org.apache.cxf.message.Message>接口,Message 接口可以获得SOAP 消息的相关信息。通过查看CXF 的API 文档,你会看到CXF已经实现了很多种拦截器,很多已经在发布、访问Web 服务时已经默认添加到拦截器链。
一般情况下, 我们自己的拦截器只要继承AbstractPhaseInterceptor<T extends org.apache.cxf.message.Message>类即可,这个类可以指定继承它的拦截器在什么阶段被启用,阶段属性可以通过org.apache.cxf.phase.Phase 中的常量指定值。
例:
package net.ilkj.soap.server.interceptor;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
public class HelloInInterceptor extends
AbstractPhaseInterceptor<Message> {
public HelloInInterceptor(String phase) {
super(phase);
}
public HelloInInterceptor() {
super(Phase.RECEIVE);//这个拦截器只在接收阶段有效
}
@Override
public void handleMessage(Message message) throws Fault {
System.out.println("*****************");
}
}
你要注意CXF 中的拦截器编写时不要只针对服务端或者客户端,应该是两者均可使用,另外名字要见名知意。例如:使用In、Out 标注这是一个输入时起作用还是输出时起作用的拦截器。上面的HelloInInterceptor 由于在构造方法中指定在接收消息阶段有效,所以即使你把它注册到OutInterceptor 的集合中也是无效的。具体关于CXF 中拦截器的内容需要时请参看
http://cwiki.apache.org/CXF20DOC/interceptors.html
同样, 我们也可以通过继承AbstractFeature 类来实现一个新的特征, 只需要覆盖initializeProvider 方法即可。其实Feature 就是将一组拦截器放在其中,然后一并注册使用。
例:
package net.ilkj.soap.server.feature;
import org.apache.cxf.Bus;
import org.apache.cxf.feature.AbstractFeature;
import org.apache.cxf.interceptor.InterceptorProvider;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
public class HelloFeature extends AbstractFeature {
@Override
protected void initializeProvider(InterceptorProvider provider, Bus bus) {
provider.getInInterceptors().add(new LoggingInInterceptor());
provider.getOutInterceptors().add(new LoggingOutInterceptor());
}
}
这个特征类将日志拦截器捆绑在一起,你就可以将它注册到你要使用的地方,而不必一个一个拦截器的注册使用。
CXF 除了允许在Spring 中的配置文件、硬编码注册拦截器和特征类,也允许你是用其自带的注解@InInterceptors、@OutInterceptors、@InFaultInterceptors、@OutFaultInterceptors、@Features 来直接注册到SEI,但是不推荐你这么做,因为这样你的类中就耦合和CXF 这个
具体的JAX-WS 实现的API。

 

本文转载自:http://poorboy030103.blog.163.com/blog/static/54635147201081451324893/

 

PS: 目前通配形式的超时设置已经成功,但是仍然不知道怎么配置具体某一个webService的超时设置,希望知道的朋友告知一声,呵呵,在此谢过!

 

 

 

针对特殊服务限制超时时间的配置:<http-conf:conduit name="{http://impl.service.product.super.com/}ProjectService.http-conduit">

分享到:
评论
1 楼 zfanxu 2012-08-14  
建议你换换标题的名称,改成CXF服务端超时配置!
public static void main(String[] args) throws ParseException,
HelloException, MalformedURLException {
QName qName = new QName("http://server.soap.ilkj.net/","HelloServiceImpl");
HelloServiceImplService helloServiceImplService = newHelloServiceImplService(newURL("http://127.0.0.1:8080/ws/services/helloService?wsdl"),qName);
IHelloService helloService = helloServiceImplService.getPort(IHelloService.class);
Client client = ClientProxy.getClient(helloService);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setReceiveTimeout(32000);
http.setClient(httpClientPolicy);
// helloService.***
}
}

标准的JAXWS调用方式,跟CXF没半毛钱关系!

相关推荐

    cxf超时设置

    "cxf超时设置"这个主题是关于如何在使用CXF框架时,对网络通信的超时时间进行配置,以优化服务的稳定性和性能。 首先,理解超时的概念至关重要。在计算机网络中,超时是指等待某个操作完成的时间限制。当这个时间...

    springboot整合CXF发布webservice和客户端调用

    SpringBoot简化了Spring应用程序的初始设置和配置,通过自动配置和“起步依赖”(Starter POMs)使开发者可以快速启动项目。它内嵌了Tomcat或Jetty服务器,使得部署无需额外的容器。 2. **Apache CXF简介** ...

    client cxf

    - 配置文件:CXF支持通过Spring配置文件来管理客户端,可以定义服务端点、认证信息、超时设置等。 - 自动发现WSDL:如果服务提供者没有提供WSDL,CXF可以通过服务地址自动获取WSDL。 - 安全性:CXF支持多种安全机制...

    在WebSphere发布CXF注意事项

    8. **性能优化**:根据应用的需求,可能需要调整CXF和WebSphere的性能设置,例如线程池大小、连接超时、缓存设置等。 9. **版本兼容性**:确保所使用的WebSphere版本和CXF版本是兼容的。不兼容的版本可能会导致各种...

    cxf客户端调用axis服务端流程

    CXF客户端需要一个Bus实例来配置其行为,例如连接超时、HTTP代理等。你可以通过编程或XML配置文件(如client.xml)来创建和配置Bus。 ```java BusFactory factory = BusFactory.newInstance(); Bus bus = factory....

    CXF客户端启动过程

    - HTTP客户端的配置包括连接超时、重试策略、认证机制等,这些都可以通过CXF的客户端配置进行定制。 5. **消息构建与处理**: - 当调用服务代理的方法时,CXF会构建SOAP消息,这涉及到数据对象的XML序列化。 - ...

    spring_cxf_dubbo

    2. 创建服务消费者:在服务消费者的配置文件中引用服务提供者,设置远程调用的相关参数,如服务URL、超时时间等。 3. 调用服务:通过Dubbo的API或注解方式,消费者可以便捷地调用服务提供者提供的接口方法。 【SSM...

    开发CXF JAVA客户端

    5. **配置客户端**:如果需要,我们还可以在`src/main/resources`目录下创建`cxf.xml`或`cxf-servlet.xml`配置文件,对客户端进行更复杂的配置,如设置HTTP连接池、超时时间等。 6. **测试和运行**:使用JUnit或...

    cxf生成webservice客户端

    4. **创建并配置客户端实例**:编译完成后,你可以根据生成的Java类创建Web服务客户端实例,并进行必要的配置,如设置服务地址、超时等。 5. **调用Web服务**:通过实例化生成的Java客户端,你可以调用Web服务提供...

    使用cxf wsdl2java生成webservice客户端

    使用cxf wsdl2java生成webservice客户端命令

    spring + cxf + mybatis整合

    7. **性能优化**:在实际项目中,可能还需要关注性能优化,如缓存策略、数据库连接池配置、服务调用的超时设置等。此外,安全考虑也非常重要,如添加身份验证和授权机制。 整合Spring、CXF和MyBatis可以帮助开发者...

    myService_purpose1sv_cxf调用axis2的接口服务_接口服务_

    2. **配置客户端**:配置客户端的连接参数,如服务地址、认证信息、超时设置等。这些可以通过XML配置文件或编程方式设置。 3. **调用服务方法**:通过生成的服务代理类实例,我们可以调用Axis2接口服务中的具体方法...

    CXF动态webservice客户端demo

    7. **配置和优化**:CXF支持多种配置,例如设置超时、安全认证、日志等,这可以通过Spring配置文件或编程式方式进行。 在"DynamicClientDemo"项目中,你可以看到如何将这些步骤整合到实际应用中,包括如何初始化...

    cxf webService客户端

    配置文件可以设置服务地址、认证信息、超时等参数。例如: ```xml ``` 在编程方式下,你可以使用`JAXWSClientFactory`来创建客户端: ```java JAXWSProxyFactoryBean factory = new JAXWSProxyFactoryBean(); ...

    cxf调用c#的webservice

    - 可以通过调整CXF客户端的配置,例如设置连接超时、重试策略等,来优化性能和稳定性。 总之,使用Apache CXF,Java开发者可以方便地调用C#编写的Web服务,实现跨语言的通信。这个过程涉及到了WSDL解析、Java代理...

    cxf webservice 文件分块上传

    "文件分块上传"是一种处理大文件的技术,通常用于优化网络传输效率,避免一次性传输大量数据导致的网络拥塞或超时问题。本主题将深入探讨如何利用CXF Webservice实现文件的分块上传。 【描述】: 根据提供的博文...

    Spring+cxf请求webService

    - 在Spring配置文件中,定义一个`jaxws:client` bean,指定服务地址、服务接口和代理类,配置连接超时、重试策略等参数。 3. **XML请求与响应处理** 在Spring+CXF的环境中,XML请求通常是通过Java对象转换得到的...

    cxf-circuit-switcher-1.0.zip

    6. **配置管理**:学习如何配置代理设置,如端口、白名单、黑名单、超时设置等。 7. **测试与调试**:了解如何编写单元测试和集成测试,以及如何使用调试工具检查运行时行为。 8. **版本控制与Git**:作为开源项目...

    webservice远程调用与cxf框架共26页.pdf

    对于性能,可以调整传输层设置,如超时、缓冲大小等。版本管理则涉及到如何兼容旧版本的服务接口,避免因升级导致的中断。 总的来说,Apache CXF为开发者提供了强大的工具和灵活的选项,使得Web服务的远程调用变得...

Global site tag (gtag.js) - Google Analytics