如何在cxf中获取soap报文,工作中

如何在cxf中获取soap报文,工作中,第1张

1 单独建立线程池,线程池中的所有工作线程从线程池任务队列中读取任务,启动SOAP报文下发工作。
2 建立连接池,线程池中线程从连接池获取一个连接将SOAP报文下发到网元上。
3 其他线程:SOAP报文读取线程,将生成的SOAP报文文件映射到内存文件,每次读取1w条数据到SOAP报文下发队列,SOAP下发队列数据结构进行
封装,添加信号量,每次数据push_back一条信号量递增
SOAP报文下发线程,独立的线程从SOAP报文下发队列中取数据,等待下发队列的信号,如果有信号则从队列中取数据,构建下发任务
将下发任务压入线程池工作任务队列,同时信号量递减1
SOAP报文保存线程,SOAP报文下发后会收到网元的响应报文,解析模块分析响应报文,获取SOAP发送报文的执行结果,并将执行失败
的SOAP报文进行保存,对执行成功的报文写入日志。
4 连接池:连接池工厂,连接池,连接器实体
连接池工厂建立连接池名称和连接池实例的映射,管理所有连接池。
连接池管理所有会话连接(IOSession),建立空闲会话队列和使用会话队列,如果空闲队列为空,同时又有新的连接请求,则建立一条新的连接。
连接数不能超过最大连接数,如果已经达到最大连接数,则进入等待状态,当空闲队列空状态取消
Attach>CXF调用
import orgapachecxfinterceptorLoggingInInterceptor;
import orgapachecxfinterceptorLoggingOutInterceptor;
import orgapachecxfjaxwsJaxWsProxyFactoryBean;
import serviceICalculateService;
public class ClientTest {
public static void main(String[] args) {
// 创建webservice服务工厂
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
// 加入一个接收响应日志的拦截器
factorygetInInterceptors()add(new LoggingInInterceptor());
// 加入一个返回响应日志的拦截器
factorygetOutInterceptors()add(new LoggingOutInterceptor());
factorysetServiceClass(ICalculateServiceclass);
factorysetAddress(">先检查Deployment字段,这才是EJB deploy中真正用的serviceName 和portname 。比如WebLogic 就有@Policy, OC4J就有@Deployment
都是用来描述这类信息的。 应用服务器也肯定是有这类服务annotation的

详细介绍了在tomcat容器中创建、发布和访问CXF服务的步骤和各种方法。一、服务器端1.添加CXF包1)基本包:commons-logging-111jargeronimo-activation_11_spec-102jargeronimo-annotation_10_spec-111jargeronimo-javamail_14_spec-16jargeronimo-jaxws_21_spec-10jargeronimo-servlet_25_spec-12jargeronimo-stax-api_10_spec-101jargeronimo-ws-metadata_20_spec-112jarjaxb-api-21jarjaxb-impl-2112jarjetty-6121jarjetty-util-6121jarneethi-204jarsaaj-api-13jarsaaj-impl-132jarwsdl4j-162jarwstx-asl-328jarxml-resolver-12jarXmlSchema-145jar2)jsf和jstl(非必要,用MyEclipse创建WebProject时会自动加入,无须再添加)jsf-apijarjsf-impljarjstl-12jar3)cxfcxf-224jar4)Springjars,为XMLConfiguration添加Spring支持。aopalliance-10jarspring-core-255jarspring-beans-255jarspring-context-255jarspring-web-255jar2.服务接口及实现1)接口类,如HelloWorldjava:packagecxftest;importjavaxjwsWebService;@WebServicepublicinterfaceHelloWorld{//一个简单的方法,返回一个字符串Stringsay(Stringhello);}2)实现类,如HelloWorldImpljava:packagecxftest;importjavaxjwsWebService;//WebService实现类//使用@WebService指向Interface定义类即可@WebService(endpointInterface="cxftestHelloWorld")publicclassHelloWorldImplimplementsHelloWorld{publicStringsay(Stringhello){return"hello"+hello;}}3.服务配置1)webxmlcontextConfigLocationWEB-INF/beansxmlorgspringframeworkwebcontextContextLoaderListenerCXFServletorgapachecxftransportservletCXFServletCXFServlet/services/2)beansxml注:服务无需诸如indexjsp之类的配置,MyEclipse自动加入的可删除,对服务及配置无任何影响。4.服务发布(到Tomcat)方法一:通过MyEclipse发布点击工具栏图标,或者右键单击项目→MyEclipse→AddandRemoveProjectDeployments。方法二:使用Ant。二、客户端创建WebProject,执行下列步骤即可。无须设置webxml。1.添加CXF包针对不同的方法,需要的包不尽相同。如下面“3.服务调用”的方法三,需要如下包:commons-logging-111jarcxf-224jarneethi-204jarspring-core-255jarspring-beans-255jarspring-context-255jarwsdl4j-162jarXmlSchema-145jar2.获取服务服务接口类(类似于C/C++中的h头文件)方法一:直接从原项目中copy这当然是最简单的方法,也是最“难”的方法(如果服务不是自己做的,显然没法获得)。方法二:从wsdl文档中生成。需要先安装cxf程序包。生成步骤如下:1)安装cxf,设置环境变量,如:D:/Apache/apache-cxf-224;同时,PATH后加上“;%CXF_HOME%/bin”(可选)。wsdl2java的用法如下:wsdl2java–p包名–d目录名wsdl路径如:wsdl2java–pdemoserviceclient–de:/srchtt://localhost:8080/helloWorldwsdl-p指定其wsdl的命名空间,也就是要生成代码的包名-d指定要产生代码所在目录-client生成客户端测试webservice的代码-server生成服务器启动webservice的代码-impl生成webservice的实现代码-ant生成buildxml文件-compile生成代码后编译-quient静默模式,不输出警告与错误信息-all生成所有开始端点代码:types,serviceproxy,serviceinterface,servermainline,clientmainline,implementationobject,andanAntbuildxmlfile2)执行wsdl2java批处理程序,如:wsdl2java-pcxftest-dd:/src-servernecessarypublicfinalclassClient{privatestaticfinalQNameSERVICE_NAME=newQName("","HelloWorld");//首参为接口实现类包名的反缀privatestaticfinalQNamePORT_NAME=newQName("","HelloWorldPort");privateClient(){}publicstaticvoidmain(Stringargs[])throwsException{Serviceservice=Servicecreate(SERVICE_NAME);//EndpointAddressStringendpointAddress="HelloWorld";//AddaporttotheServiceserviceaddPort(PORT_NAME,SOAPBindingSOAP11>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13412607.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-31
下一篇 2023-07-31

发表评论

登录后才能评论

评论列表(0条)

保存