CXF302+Spring3214 WebService入门实例三.docx
- 文档编号:9725830
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:23
- 大小:52.40KB
CXF302+Spring3214 WebService入门实例三.docx
《CXF302+Spring3214 WebService入门实例三.docx》由会员分享,可在线阅读,更多相关《CXF302+Spring3214 WebService入门实例三.docx(23页珍藏版)》请在冰豆网上搜索。
CXF302+Spring3214WebService入门实例三
好了,继续学习CXFWebService!
这次学习CXF拦截器,老天开眼了,比较顺利,各位大牛,大神请飘过!
不要嘲笑我等小白,不对我是老白了,因为我们不在一个频道上!
首先还是要介绍一下开发工具和开发环境,jdk1.6.0_43+Tomcat6.0.29+MyEclipse10.5,没有使用Maven进行管理!
一、新建web工程,不要选择JavaEE6.0,如果选了,会报一个错误!
下面将会有介绍。
二、新建接口HelloWorld.java
packagecom.firstws.test;
importjavax.jws.WebService;
@WebService
publicinterfaceHelloWorld{
publicStringsayHi(Stringname);
}
三、新建HelloWorldImpl.java
packagecom.firstws.test;
importjavax.jws.WebService;
@WebService(endpointInterface="com.firstws.test.HelloWorld")
publicclassHelloWorldImplimplementsHelloWorld{
//注意此处不能写@Override,好像是jdk1.5不支持
publicStringsayHi(Stringtext){
System.out.println("sayHi方法被调用!
");
return"Hello"+text;
}
}
四、建立服务类Server.java
packagecom.firstws.test;
importjavax.xml.ws.Endpoint;
publicclassServer{
protectedServer()throwsException{
System.out.println("StartingServer");
HelloWorldImplimplementor=newHelloWorldImpl();
Stringaddress="http:
//localhost:
8080/wbInter";
Endpoint.publish(address,implementor);
}
publicstaticvoidmain(Stringargs[])throwsException{
newServer();
System.out.println("Serverready...");
Thread.sleep(5*60*1000);
System.out.println("Serverexiting");
System.exit(0);
}
}
五、点击运行Server.java,如果新建web工程,你选择的是JavaEE5.0,那么控制台将出现如下信息
StartingServer
2016-1-69:
34:
47org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBeanbuildServiceFromClass...
Serverready...
=====================================================================
如果你新建web工程是你选择的是JavaEE6.0,那么控制台将报如下异常!
然后网上一搜好多解决方式,巴拉巴拉,心中一万头草你妈飘过~~~,最后发现是工程中的jdk问题~~~~
StartingServer
2016-1-69:
37:
10...
Exceptioninthread"main"java.lang.NoSuchMethodError:
org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
atorg.eclipse.jetty.util.log.JettyAwareLogger.log(JettyAwareLogger.java:
607)
atorg.eclipse.jetty.util.log.JettyAwareLogger.warn(JettyAwareLogger.java:
431)
atorg.eclipse.jetty.util.log.Slf4jLog.warn(Slf4jLog.java:
69)
atponent.AbstractLifeCycle.setFailed(AbstractLifeCycle.java:
204)
atponent.AbstractLifeCycle.start(AbstractLifeCycle.java:
74)
atorg.apache.cxf.transport.http_jetty.JettyHTTPServerEngine.addServant(JettyHTTPServerEngine.java:
417)
atorg.apache.cxf.transport.http_jetty.JettyHTTPDestination.activate(JettyHTTPDestination.java:
179)
atorg.apache.cxf.transport.AbstractObservable.setMessageObserver(AbstractObservable.java:
53)
atorg.apache.cxf.binding.AbstractBindingFactory.addListener(AbstractBindingFactory.java:
95)
atorg.apache.cxf.binding.soap.SoapBindingFactory.addListener(SoapBindingFactory.java:
895)
atorg.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:
123)
atorg.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:
362)
atorg.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:
251)
atorg.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:
155)
atjavax.xml.ws.Endpoint.publish(Endpoint.java:
57)
atcom.firstws.test.Server.
11)
atcom.firstws.test.Server.main(Server.java:
15)
六、建立一个拦截器测试类InterceperTest.java
packagecom.firstws.interceptor;
importorg.apache.cxf.interceptor.LoggingInInterceptor;
importorg.apache.cxf.interceptor.LoggingOutInterceptor;
importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean;
importcom.firstws.test.HelloWorld;
publicclassInterceperTest{
publicstaticvoidmain(String[]args){
JaxWsProxyFactoryBeanfactory=newJaxWsProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http:
//localhost:
8080/wbInter/HelloWorld");
factory.getInInterceptors().add(newLoggingInInterceptor());
factory.getOutInterceptors().add(newLoggingOutInterceptor());
HelloWorldhw=(HelloWorld)factory.create();
Stringresult=hw.sayHi("abc");
System.out.println("haaha=="+result);
}
}
七、点击运行InterceperTest.java
信息:
OutboundMessage
---------------------------
ID:
1
Address:
http:
//localhost:
8080/wb2/HelloWorld
Encoding:
UTF-8
Http-Method:
POST
Content-Type:
text/xml
Headers:
{Accept=[*/*],SOAPAction=[""]}
Payload:
Envelopexmlns: soap="http: //schemas.xmlsoap.org/soap/envelope/"> Body> sayHixmlns: ns2=" -------------------------------------- 2016-1-69: 41: 18org.apache.cxf.services.HelloWorldService.HelloWorldPort.HelloWorld 信息: InboundMessage ---------------------------- ID: 1 Response-Code: 200 Encoding: UTF-8 Content-Type: text/xml;charset=UTF-8 Headers: {Content-Length=[211],content-type=[text/xml;charset=UTF-8],Server=[Jetty(8.1.15.v20140411)]} Payload: Envelopexmlns: soap="http: //schemas.xmlsoap.org/soap/envelope/"> Body> sayHiResponsexmlns: ns2="abc sayHiResponse> Body> Envelope> -------------------------------------- haaha==Helloabc 八、有些时候我们需要自定义一个拦截器,做一些特殊的处理! 新建一个实现类 MessageInterceptor.java packagecom.firstws.interceptor; importorg.apache.cxf.interceptor.Fault; importorg.apache.cxf.message.Message; importorg.apache.cxf.phase.AbstractPhaseInterceptor; /** *功能: 自定义消息拦截器 *作者: 张述飞 *创建日期: 2015-12-319: 55 *qq: 361202421 *版本: V1.0 */ PublicclassMessageInterceptorextendsAbstractPhaseInterceptor publicMessageInterceptor(Stringphase){ super(phase); } publicvoidhandleMessage(Messagemessage)throwsFault{ System.out.println("###########handlerMessage############"); System.out.println(message); if(message.getDestination()! =null){ System.out.println(message.getId()+"##"+message.getDestination().getMessageObserver()); } if(message.getExchange()! =null){ System.out.println(message.getExchange().getInMessage()+"##"+message.getExchange().getInFaultMessage()); System.out.println(message.getExchange().getOutMessage()+"##"+message.getExchange().getOutFaultMessage()); } } } 九、新建发布类DeployInteceptorClient.java packagecom.firstws.interceptor; importorg.apache.cxf.jaxws.JaxWsServerFactoryBean; importorg.apache.cxf.phase.Phase; importcom.firstws.test.HelloWorld; importcom.firstws.test.HelloWorldImpl; publicclassDeployInteceptorClient{ publicstaticvoidmain(String[]args)throwsException{ JaxWsServerFactoryBeanfactory=newJaxWsServerFactoryBean(); factory.setServiceClass(HelloWorld.class); factory.setAddress("http: //localhost: 8080/wbInter/HelloWorld"); factory.setServiceBean(newHelloWorldImpl()); factory.getInInterceptors().add(newMessageInterceptor(Phase.RECEIVE)); factory.getOutInterceptors().add(newMessageInterceptor(Phase.SEND)); factory.create(); System.out.println("Serverstart~~~~~"); Thread.sleep(5*1000*60); System.exit(0); System.out.println("Serverexit~~~"); } } 一十、运行DeployInteceptorClient.java,运行结果为 Serverstart~~~~~ 一十一、新建HelloWorldServiceClient.java类 packagecom.firstws.interceptor; importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean; importcom.firstws.test.HelloWorld; publicclassHelloWorldServiceClient{ /** *@paramargs */ publicstaticvoidmain(String[]args){ JaxWsProxyFactoryBeanclient=newJaxWsProxyFactoryBean(); client.setServiceClass(HelloWorld.class); client.setAddress("http: //localhost: 8080/wbInter/HelloWorld"); HelloWorldservice=(HelloWorld)client.create(); System.out.println("[result]"+service.sayHi("张述飞")); } } 一十二、运行HelloWorldServiceClient.java,客户端运行结果为 [result]Hello张述飞 服务端运行结果是 Serverstart~~~~~ ###########handlerMessage############ {org.apache.cxf.message.Message.PROTOCOL_HEADERS={Accept=[*/*],Cache-Control=[no-cache],connection=[keep-alive],Content-Length=[191],content-type=[text/xml;charset=UTF-8], ~~~~~ Content-Type=text/xml;charset=UTF-8}##null null##null sayHi方法被调用! ###########handlerMessage############ {javax.xml.ws.wsdl.port={org.apache.cxf.ws.policy.EffectivePolicy=org.apache.cxf.ws.policy.EffectivePolicyImpl@151ac10, org.apache.cxf.service.model.BindingMessageInfo=org.apache.cxf.service.model.BindingMessageInfo@f77511,Content-Type=text/xml,org.apache.cxf.message.Message.RESPONSE_CODE=200,org.apache.cxf.headers.Header.list=[]}##null ===================================================================== 到这里为止,基本上的拦截器已经做完了,下面这部分将是和Spring嵌套使用了! ! 一十三、下面这部分引用的是(达拉斯母牛的CXF实战之自定义拦截器(五)),博客地址: 在这里先谢谢他的分享! ! 如果侵犯了你的权益,请告诉我,我撤下来! 一十四、权限认证拦截器处理SOAPHeader中的认证信息,客户端在发起请求时在SOAPHeader中添加认证信息,服务端在接收到请求后,校验认证信息,校验通过则继续执行,校验不通过则返回错误。 --认证信息格式如下--> //localhost: 8080/auth"> 一十五、客户端代码AuthAddInterceptor.java packagecom.firstws.spring; importjava.util.List; importjavax.xml.namespace.QName; importorg.apache.cxf.binding.soap.SoapMessage; importorg.apache.cxf.headers.Header; importorg.apache.cxf.helpers.DOMUtils; importorg.apache.cxf.interceptor.Fault; importorg.apache.cxf.phase.AbstractPhaseInterceptor; importorg.apache.cxf.phase.Phase; importorg.w3c.dom.Document; importorg.w3c.dom.Element; publicclassAuthAddInterceptorextendsAbstractPhaseInterceptor publicAuthAddInterceptor(){ super(Phase.PREPARE_SEND); } publicvoidhandleMessage(SoapMessagemessage)throwsFault{ List Documentdoc=DOMUtils.createDocument(); Elementauth=doc.createElementNS("http: //zhangshufei/auth","auth"); Elementname=doc.createElement("name"); name.setTextContent("admin"); Elementpassword=doc.createElement("password"); password.setTextContent("admin"); auth.append
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CXF302+Spring3214 WebService入门实例三 CXF302 Spring3214 WebService 入门 实例