bbossgroups cxf Webservice服务管理框架
来源:互联网 发布:java培训班4个月有用吗 编辑:程序博客网 时间:2024/04/28 16:10
Bboss aop框架中很好地集成了apache cxf webservice服务框架,原理如下图:
下面具体来介绍如果通过bboss aop框架来管理和发布基于apache cxf webservice服务框架的webservice服务。
1.1 Webservice协议配置
对应的配置文件为:
/bbossaop/resources/org/frameworkset/spi/manager-rpc-webservices.xml
文件在/bbossaop/resources/org/frameworkset/spi/manager-rpc-service.xml中导入。
<!--
导入webservice服务配置
-->
<managerimport file="org/frameworkset/spi/manager-rpc-webservices.xml" />
Webservice协议配置包含ws rpc协议配置、发布的webservice服务配置、cxf webservice客服端连接参数配置四部分。分别介绍如下。
1.2 发布webservice服务servlet配置
rpc 服务器端还需要在web.xml文件中配置发布webservice服务的servlet:
<servlet>
<display-name>cxf</display-name>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.RPCCXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/cxfservices/*</url-pattern>
</servlet-mapping>
1.3 Cxf webservice服务控制开关
<property name="rpc.webservice.enable" value="true"/>
标记是否启用webservice服务,为false时,启动cxf的serverlet将不会加载和发布配置的webservice 服务(这些webservice服务配置在cxf.webservices.config属性中)。如果采用webservice协议作为远程服务调用的协议时, rpc.webservice.enable开关必须配置为true。
1.4 webservice服务配置
<property name="cxf.webservices.config">
<list>
<!--
webservice RPC服务,用来实现业务组件之间的远程服务调用
属性说明:
name 服务的唯一标识名称
singleable 服务组件的单列模式
servicePort 发布的服务端口
class 服务的实现类
mtom 服务是否支持附件传输
true:支持,false:不支持
-->
<property name="rpc.webservice.RPCCall"
singlable="true"
servicePort="RPCCallServicePort"
class="org.frameworkset.spi.remote.webservice.RPCCall"/>
</list>
</property>
1.5 Cxf客服端连接参数配置
<property name="cxf.client.config" enable="true">
<map>
<property label="connectionTimeout " name="connectionTimeout"
value="30000" class="long">
<description> <![CDATA[Specifies the amount of time, in milliseconds, that the client will attempt to establish a connection before it times out. The default is 30000 (30 seconds).
0 specifies that the client will continue to attempt to open a connection indefinitely. ]]></description>
</property>
<property label="receiveTimeout" name="receiveTimeout"
value="60000" class="long">
<description> <![CDATA[Specifies the amount of time, in milliseconds, that the client will wait for a response before it times out. The default is 60000.
0 specifies that the client will wait indefinitely. ]]></description>
</property>
<property label="autoRedirect" name="autoRedirect"
value="false" class="boolean">
<description> <![CDATA[Specifies if the client will automatically follow a server issued redirection. The default is false. ]]></description>
</property>
<property label="maxRetransmits" name="maxRetransmits"
value="-1" class="int">
<description> <![CDATA[Specifies the maximum number of times a client will retransmit a request to satisfy a redirect. The default is -1 which specifies that unlimited retransmissions are allowed. ]]></description>
</property>
<property label="allowChunking" name="allowChunking"
value="true" class="boolean">
<description> <![CDATA[Specifies whether the client will send requests using chunking. The default is true which specifies that the client will use chunking when sending requests.
Chunking cannot be used used if either of the following are true:
http-conf:basicAuthSupplier is configured to provide credentials preemptively.
AutoRedirect is set to true.
In both cases the value of AllowChunking is ignored and chunking is disallowed.
See note about chunking below. ]]></description>
</property>
1.6 客服端网络代理服务参数配置
<!-- <property label="proxyServer" name="proxyServer"-->
<!-- value="172.16.17.1" class="String">-->
<!-- <description> <![CDATA[Specifies the URL of the proxy server through which requests are routed. ]]></description>-->
<!-- </property>-->
<!-- <property label="proxyServerPort" name="proxyServerPort"-->
<!-- value="808" class="int">-->
<!-- <description> <![CDATA[Specifies the port number of the proxy server through which requests are routed. ]]></description>-->
<!-- </property>-->
<!-- <property label="proxyServerType" name="proxyServerType"-->
<!-- value="SOCKS" >-->
<!--
指定属性注入时的属性编辑和转换器
-->
<!-- <editor class="org.frameworkset.spi.remote.webservice.ProxyServerTypeEditor"/>-->
<!-- <description> <![CDATA[Specifies the type of proxy server used to route requests. Valid values are: -->
<!-- HTTP(default) -->
<!-- SOCKS -->
<!-- ]]></description>-->
<!-- </property>-->
</map>
</property>
1.7 Ssl参数配置-没有经过测试
<property name="ws.ssl.config" enable="false">
<map>
<property name="keyManagers" keyPassword="password">
<list>
<property name="keyStore1" type="JKS" password="password" file="src/test/java/org/apache/cxf/systest/http/resources/Morpit.jks"/>
</list>
</property>
<property name="trustManagers" keyPassword="password">
<list>
<property name="keyStore1" type="JKS" password="password" file="src/test/java/org/apache/cxf/systest/http/resources/Truststore.jks"/>
</list>
</property>
<property name="cipherSuitesFilter">
<list>
<property value=".*_EXPORT1024_.*"/>
<property value=".*_WITH_DES_.*"/>
<property value=".*_WITH_NULL_.*"/>
<property value=".*_DH_anon_.*"/>
</list>
</property>
<property name="userName" value="Betty"/>
<property name="password" value="password"/>
<!--
<http:tlsClientParameters>
<sec:keyManagers keyPassword="password">
<sec:keyStore type="JKS" password="password"
file="src/test/java/org/apache/cxf/systest/http/resources/Morpit.jks"/>
</sec:keyManagers>
<sec:trustManagers>
<sec:keyStore type="JKS" password="password"
file="src/test/java/org/apache/cxf/systest/http/resources/Truststore.jks"/>
</sec:trustManagers>
<sec:cipherSuitesFilter>-->
<!-- these filters ensure that a ciphersuite with
export-suitable or null encryption is used,
but exclude anonymous Diffie-Hellman key change as
this is vulnerable to man-in-the-middle attacks -->
<!-- <sec:include>.*_EXPORT_.*</sec:include>
<sec:include>.*_EXPORT1024_.*</sec:include>
<sec:include>.*_WITH_DES_.*</sec:include>
<sec:include>.*_WITH_NULL_.*</sec:include>
<sec:exclude>.*_DH_anon_.*</sec:exclude>
</sec:cipherSuitesFilter>
</http:tlsClientParameters>
<http:authorization>
<sec:UserName>Betty</sec:UserName>
<sec:Password>password</sec:Password>
</http:authorization>
-->
<property>
</property>
</map>
</property>
1.8 配置服务服务器
Webservice 框架必须部署在web application应用中,因此先在ws rpc服务器端配置webservice框架servlet:
<servlet>
<display-name>cxf</display-name>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.RPCCXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/cxfservices/*</url-pattern>
</servlet-mapping>
1.9 Webservice客服端调用示例
我们已rpccall webservice服务为列来说明如何调用通过bboss aop框架发布的webservice服务。
我们首先要通过eclipse插件来生成调用rpccall webservice服务的客服端,客服端的生成过程这里就不说明了。
QName serviceName = new QName("http://webservice.remote.spi.frameworkset.org/", "RPCCallService");
QName portName = new QName("http://webservice.remote.spi.frameworkset.org/", “RPCCallServicePort”);
Service service = Service.create(serviceName);
String url = “http://localhost:8080/WebRoot/cxfservices/RPCCallServicePort”);
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, url);
client = service.getPort(portName,
org.frameworkset.spi.remote.webservice.RPCCallService.class);
// Okay, are you sick of configuration files ?
// This will show you how to configure the http conduit dynamically
Client client_ = ClientProxy.getClient(client);
HTTPConduit http = (HTTPConduit) client_.getConduit();
/**
* 初始化cxf客服端连接参数开始
*/
Pro client_config = BaseSPIManager.getProBean("cxf.client.config");
if(client_config != null)
{
boolean enable = client_config.getBooleanExtendAttribute("enable");
if(enable)
{
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
org.apache.cxf.transports.http.configuration.ProxyServerType s;
try
{
BeanAccembleHelper.injectProperties(httpClientPolicy, client_config.getMap());
}
catch(Exception e)
{
e.printStackTrace();
}
// httpClientPolicy.setConnectionTimeout(36000);
// httpClientPolicy.setAllowChunking(false);
// httpClientPolicy.setReceiveTimeout(32000);
//
// httpClientPolicy.setProxyServer("");
// httpClientPolicy.setProxyServerPort(444);
// httpClientPolicy.setProxyServerType(ProxyServerType.HTTP);
http.setClient(httpClientPolicy);
}
}
/**
* 初始化cxf客服端连接参数结束
*/
/**
* 初始化cxf客服端ssl参数开始
*/
// TLSClientParameters ssl = new TLSClientParameters();
// ssl.setTrustManagers(SSLHelper.getTrustManagers(null, null));
// ssl.setKeyManagers(SSLHelper.getKeyManagers(null, null));
//
// http.setTlsClientParameters((TLSClientParameters)null);
/**
* 初始化cxf客服端ssl参数结束
*/
/**
* 初始化cxf客服端鉴权参数开始
*/
// http.setAuthorization(authorization);
/**
* 初始化cxf客服端鉴权参数结束
*/
}
}
}
//发起服务调用
RPCMessage ret = client.sendRPCMessage(srcmsg);
- bbossgroups cxf Webservice服务管理框架
- 使用CXF框架搭建WebService服务接口
- CXF框架学习,发布webservice服务
- CXF实现webService服务
- cxf发布webservice 服务
- CXF创建WebService服务
- spring和cxf框架整合实现webService服务
- WebService之CXF整合Spring框架发布REST服务
- webservice应用 cxf框架
- WebService之CXF框架
- webservice的CXF框架
- webservice之cxf框架
- WebService和Cxf框架
- CXF框架实现WebService
- webservice(三) 使用JDK的EndPoint和cxf框架分别发布webservice服务
- Spring 集成CXF框架发布Webservice服务 和 使用jdk生成Webservice clinet
- 使用CXF框架,发布webservice服务,并使用客户端远程访问webservice
- (三)CXF发布WebService服务
- C#中动态的实现控件的实例
- Qt 国际化语言版本
- 10000的阶乘只要1.3秒左右
- 泛型vs模板
- 一般n-叉树的C++实现
- bbossgroups cxf Webservice服务管理框架
- JSTL字符串处理函数
- 使用dbgsrv及windbg进行远程调试
- .NET/CLR好书推荐
- linux 进程同步
- 转载:12年前的作品──《美绿中国象棋》制作过程及算法简介
- 运行时自更新程序的.NET实现
- bbossgroups 线程池使用
- Freemarker中如何遍历 List