cxf如何配置线程数
1. IDEA如何配置CXF,maven项目,第一次搞wsdl这东西,完全不会,求教
先了解一下webservice原理,还有相关的专业术语,然后你就会了。你上来直接问咋配置,就算跟你说了,你也不住,下次还是不会。
2. cxf怎样提高webservice性能,及访问速度调优
1、 启用FastInfoset(快速信息集)
webservice的性能实在是不敢恭维。曾经因为webservice吞吐量上不
去,对webservice进行了一些性能方面的优化,采用了FastInfoset,效果很明显,极端条件下的大数据量传输,性能提高60%,他可以减
少传输成本,序列化成本和xml解析成本。
Cxf提供了FastInfoset协商机制,实现类见org.apache.cxf.feature.FastInfosetFeature,在bus中启用如下配置:
<cxf:features><cxf:fastinfoset force="false"/></cxf:features>
Force=false表示服务端和客户端第一次通信时会协商(通过检查标准的HTTP头的Accept字段,值为MIME类型的application/fastinfoset)是否启用FastInfoset支持,如果客户端不支持,则不启用快速信息集。
需要在pom中添加依赖:
<dependency>
<groupId>com.sun.xml.fastinfoset</groupId>
<artifactId>FastInfoset</artifactId>
<version>1.2.9</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
FastInfoset参考:http://java.sun.com/developer/technicalArticles/xml/fastinfoset/
client和service端都要配置
2、 启用gzip压缩支持
客户端和服务器端是否使用Gzip压缩,也是基于http协议协商的(检查请求
header 中是否有Accept-encoding:gzip)。但是这里需要仔细权衡下。对于小数据量,启用gzip压缩支持是吃力不讨好的行为,
数据量很小的时候,gzip压缩结果不明显,还浪费cpu。我们需要权衡数据大小,按照经验设置threshold为10*1024byte。
在bus中启用如下配置:
<bean class="org.apache.cxf.transport.common.gzip.GZIPFeature ">
<property name="threshold"><value>10240</value></property>
</bean>
官方文档指定是是配置org.apache.cxf.transport.http.gzip.GZIPFeature,但是这个类会找不到,可能是官方文档年久失修,造成一些混乱。官方文档中也没提示指定threshold,请参考GZIPFeature源代码。
参考http://cxf.apache.org/docs/featureslist.html
3、 使用slf4j代替cxf默认日志组件
CXF 默认使用java.util.logging作为日志打印组件,其性能我就不过多评价,也不太便于我们做统一日志管理。目前系统使用的slf4j作为日志打印组件,替换如下:
在classpath中加入META-INF/cxf/org.apache.cxf.Logger文件,文件内容为
org.apache.cxf.common.logging.Slf4jLogger
4、 测试中启用日志
bus中加入<cxf:logging/>,请在测试环境中启用有助于debug
补充:
1、如何自定义返回码:
请求在service中处理遇到异
常后,会调用请求链中所有拦截器的handleFault方法,参考PhaseInterceptorChain#unwind,然后判断请求是否单向请
求,如果不是,则构建异常请求链,并构建异常message对象,调用异常请求链中的handleMessage 方法(参
考:)
JAXWSMethodInvoker
转发soap请求到指定对象的方法,如果在请求处理失败,调用updateHeader方法,把请求时的soap
header放入返回header中。但是不同通过继承JAXWSMethodInvoker来实现清除异常时soap
header也返回给客户端的问题,因为JAXWSMethodInvoker没有采用注入的机制
(JaxWsServerFactoryBean#createInvoker)也没有chain.异常时,会由这些拦截器处理返回请求:
setup []
prepare-send [MessageSenderInterceptor, Soap11FaultOutInterceptor]
pre-stream [LoggingOutInterceptor, StaxOutInterceptor]
pre-protocol [WebFaultOutInterceptor]
write [SoapOutInterceptor]
拦截器初始化类
我们可以在异常链中加入清理soap header的拦截器,清理掉在系统异常时soapheader中有信息的问题。
返回错误状态码,在执行Soap11FaultOutInterceptor拦截器中被写死。
message.put(org.apache.cxf.message.Message.RESPONSE_CODE, new Integer(500));
为了使返回数据中有错误码,需要在Soap11FaultOutInterceptor后面加入拦截器
2、在项目测试时遇到一个报错
invalid LOC header (bad
signature),这个问题是因为jar包损坏照成的,虽然构建路径中有这个jar,但是还是会出现loadClass失败,清理maven 本地仓
库目录的jar,修改pom(比如加上一空行)让m2e重新加载。
3、Cxf中有一个很不错的特性,支持javascript访问soap
webservice,客户端访问http://localhost:8080/cxf/HelloWorld?js类似的请求,会生成
javascript 客户端,js编程时就可以使用此客户端提供的对象,启用此功能需要在引入
<import resource="classpath:META-INF/cxf/cxf-extension-javascript-client.xml" />并且在依赖中加入:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-javascript</artifactId>
<version>2.4.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
3. 官网下载Cxf3.1.7后怎么配置环境变量
步骤如下: 1、从Oracle官网下载JDK安装包,如:jdk-7u79-windows-x86版本。 2、安装包下载完成后,双击安装包进行安装,安装路径可以使用默认路径,这里改为D:\Program Files\Java。 3、安装完成后,还需要进行环境变量的配置,在系统环境变量...
4. WebService CXF 怎么设置 timeout
由于用CXF构建的webservice使用的是spring配置方式很简单
但是由于客户端使用jaxws:client方式请求的,这个请求方式不能直接配置timeout的
用spring配置jaxws客户端请求的的配置:
Xml代码
<jaxws:client id="" serviceClass="" address="" />
如果使用这种方式配置直接有timeout属性
Xml代码
<http-conf:conit>
<http-conf:client ConnectionTimeout="30000"/>
</http-conf:conit>
那我们继续使用jaxws:client配置方式如何设置timeout呢?
只需在我们调用web service的代码之处加上:
Java代码
long timeout = 10000L;
client = ClientProxy.getClient(对应spring配置文件里你配置的clientid);
if (client != null) {
HTTPConit conit = (HTTPConit) client.getConit();
HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setConnectionTimeout(timeout);
policy.setReceiveTimeout(timeout);
conit.setClient(policy);
}
5. cxf 使用wsdl2java命令的详细环境变量的配置!
用ant 或者 maven 在eclipse里弄,简单的多。
6. 求助ssh框架cxf的配置问题
可能是getHibernateTemplate没有注进sessionfactory吧 注释加的有问题吧,其中有些是必填项的 Caused by: java.lang.NullPointerException at e.tyut.caiqm..ZjmmbDaoImpl.getZjmmb(ZjmmbDaoImpl.java:17) 明显代码有问题 或许id为null
7. cxf怎么发布多个web服务
这个不是cxf的问题,你看看你的容器是用什么,TOMCAT还是什么的,看他的配置线程还有就是你用httpclient测试下多线程访问其他页面,如登录之类的,看看是不是也有限制,如果没有,估计就是你代码中加了限制了
8. java 用cxf发布webservice的配置文件
参考 1.“爸,如果你不是要去参加一个夏威夷草群聚会的话,请把现在你脖子上那条春花烂漫的领带换掉,好么?”
9. java cxf是什么,能干什么,用的时候需要注意什么,请赐教
CXF 包含了大量的功能特性,但是主要集中在以下几个方面:支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 WSDL 优先开发,也支持从 Java 的代码优先开发模式。容易使用: CXF 设计得更加直观与容易使用。有大量简单的 API 用来快速地构建代码优先的 Services,各种 Maven 的插件也使集成更加容易,支持 JAX-WS API ,支持 Spring 2.0 更加简化的 XML 配置方式,等等。支持二进制和遗留协议:CXF 的设计是一种可插拨的架构,既可以支持 XML ,也可以支持非 XML 的类型绑定,比如:JSON 和 CORBA。