`
234390216
  • 浏览: 10218817 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462019
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1774439
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1397513
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:394706
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679510
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530299
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1180705
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:466040
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151030
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:67738
社区版块
存档分类
最新评论
阅读更多

Cxf获取Http对象

 

目录

1.1        服务实现类中

1.1.1         通过MessageContext获取

1.1.2         通过Message获取

1.2        拦截器中

 

         有的时候我们可能需要在Webservice中获取Http元素,包括HttpServletRequestHttpServletResponse等。虽然说通过Http协议进行传输的Webservice请求是运行在对应的Http环境下的,是包含HttpServletRequestHttpServletResponse对象的,但是当我们使用Cxf时,这些都是被Cxf处理过的,我们是在Cxf封装的实现里面进行工作的,也就是说不能直接访问HttpServletRequestHttpServletResponse对象。好在Cxf已经在接收到Http请求时已经将HttpServletRequest等对象保存起来了,我们可以在服务的实现过程中获取对应的Http对象。我们可以在两个地方获取当前请求相关的Http对象,服务实现类中和拦截器中。

 

1.1     服务实现类中

         当我们需要在服务实现类中获取Http对象时,主要有两种方式,通过MessageContext获取和通过Message获取。

 

1.1.1通过MessageContext获取

         通过MessageContext获取时,我们需要给服务实现类定义一个WebServiceContext类型的属性,并使用@Resource进行标注。这样当请求到来时Cxf将为我们给该属性注入对应的对象。通过WebServiceContext对象我们就可以获取到对应的MessageContext对象了,然后就可以从其中获取到HttpServletRequestHttp对象。

 

@WebService

public class HelloWorldServiceImpl implements HelloWorldService {

 

   @Resource

   private WebServiceContext context;

  

   public void sayHello(String who) {

      MessageContext messageContext = context.getMessageContext();

      //获取request

      HttpServletRequest request = (HttpServletRequest) messageContext.get(MessageContext.SERVLET_REQUEST);

      //或者通过如下方式获取,AbstractHTTPDestination.HTTP_REQUESTMessageContext.SERVLET_REQUEST这两个常量值是不一样的,

      //但它们对应于MessageContext对象中存储的都是HttpServletRequest对象

//    HttpServletRequest request = (HttpServletRequest) messageContext.get(AbstractHTTPDestination.HTTP_REQUEST);

      //获取response

      HttpServletResponse response = (HttpServletResponse) messageContext.get(MessageContext.SERVLET_RESPONSE);

      //获取ServletContext

      ServletContext servletContext = (ServletContext) messageContext.get(MessageContext.SERVLET_CONTEXT);

 

   }

 

}

 

1.1.2通过Message获取

         Message也有类似MessageContextget方法,可以获取到所需要的Http对象,对应的Key可以通过AbstractHTTPDestination中定义的常量来获取。关键在于我们在服务实现类中如何获取到当前服务请求时对应的Message对象呢?我们知道Cxf是有拦截器的,Cxf里面的很多功能都是通过拦截器来实现的。在进行请求处理时Cxf会将当前消息存到一个线程变量中,这个对象我们可以通过PhaseInterceptorChain的静态方法getCurrentMessage取到当前请求对应的Message对象,然后就可以从Message对象中获取对应的Http对象了。

 

@WebService

public class HelloWorldServiceImpl implements HelloWorldService {

 

   public void sayHello(String who) {

      Message message = PhaseInterceptorChain.getCurrentMessage();

      //获取request

      HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);

      //获取response

      HttpServletResponse response = (HttpServletResponse) message.get(AbstractHTTPDestination.HTTP_RESPONSE);

      //获取ServletContext

      ServletContext servletContext = (ServletContext) message.get(AbstractHTTPDestination.HTTP_CONTEXT);

   }

 

}

 

         需要注意的一点是在从Message对象中获取Http对象时,只能通过AbstractHTTPDestination类中定义的常量来获取,而不能通过MessageContext中定义的常量来获取,这是通过Message对象获取Http对象和通过MessageContext对象获取Http对象的一点区别。

 

1.2     拦截器中

         在拦截器中获取Http对象,其实也是通过Message对象来获取的,只是因为拦截器中拦截的本来就是Message,我们可以非常轻易的获取到Message对象,并从其中获取Http对象。这里就不再赘述了。

 

(注:本文是基于Cxf2.7.6所写)

(注:原创文章,转载请注明出处,原文地址:http://haohaoxuexi.iteye.com/blog/2264367

 

0
0
分享到:
评论

相关推荐

    CXF利用Json格式传输对象

    对于CXF客户端,可以使用`javax.ws.rs.client.ClientBuilder`创建一个客户端实例,然后通过`target()`方法指定服务地址,`register()`方法注册JSON处理类,最后调用`invoke()`方法发起请求并获取JSON响应。...

    CXF服务端对象文件支持断点传送

    在这个场景中,"CXF服务端对象文件支持断点传送"指的是CXF服务端具有处理文件传输的能力,并且这种能力包含了对断点传输的支持。断点传输是一种允许用户中断并恢复文件传输的技术,特别适用于大文件的上传和下载,以...

    cxf所需jar包

    4. **cxf-rt-bindings-soap**: 提供了SOAP绑定,负责将XML消息转换为Java对象,反之亦然。 5. **cxf-rt-wsdl**: 解析并处理WSDL(Web Service Description Language),这是定义Web服务接口的标准语言。 6. **cxf-...

    cxf最少依赖jar包

    - `jaxb-api.jar`和相关实现(如`jaxb-impl.jar`, `jaxb-runtime.jar`):提供了Java对象到XML数据的绑定,是JAX-WS服务的基础。 - `wsdl4j.jar`:用于处理WSDL文档,是定义和解析Web服务接口的关键。 4. **运行...

    apache-cxf-2.4.6.zip

    Apache CXF是一个开源的Java...不过,值得注意的是,由于这是较早的版本,可能不包含后来添加的一些新特性和修复的安全漏洞,因此在生产环境中,你可能需要考虑升级到更现代的CXF版本,以获取最新的功能和安全改进。

    CXF2.6 spring 提供rest服务输出xml或json等格式数据

    最后,启动Spring应用,你就可以通过浏览器或HTTP客户端访问如"http://localhost:8080/services/person?id=1"这样的URL,获取XML或JSON格式的Person数据了。 总结一下,通过CXF 2.6与Spring的集成,我们可以轻松地...

    CXF客户端启动过程

    - CXF使用JAXB(Java Architecture for XML Binding)将XML配置转换为Java对象,以便进一步处理。 2. **服务代理创建**: - 根据配置信息,CXF会生成一个服务代理类,这个代理类实现了服务接口。这个代理类是...

    使用CXF实现带header的soap服务

    4. **处理HTTP头信息**:CXF提供了拦截器(Interceptor)机制,可以通过自定义拦截器来读取和操作HTTP头。在`frontend/client`或`frontend/server`的拦截器链中添加自定义拦截器,拦截器可以访问并处理Message对象中...

    apache-cxf-3.1.9

    3. **数据绑定**:CXF 提供JAXB(Java Architecture for XML Binding)和JAX-BT(Java API for XML-based Web Services with Attachments)数据绑定,使得Java对象可以直接与XML消息交互。 4. **协议栈**:CXF支持...

    CXF客户端调用例子

    1. 获取服务代理:CXF提供了ClientProxyFactoryBean,可以生成一个服务接口的代理对象,这个代理对象能透明地调用远程服务。 2. 配置服务地址:设置服务代理的终结点URL,指明要调用的服务的位置。 3. 调用服务:...

    apache-cxf-3.1.6.zip官网完整包

    3. **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding)和XMLBeans,用于将Java对象转换为XML和反之亦然。 4. **互操作性**:由于CXF实现了多种Web服务标准,如WSDL 2.0、WS-I BP 1.1、WS-Security等...

    cxf-2.7.0-src

    3. **数据绑定**:CXF提供了XML到Java对象(JAXB)和Java对象到XML(XSD)的数据绑定,简化了服务接口和实现之间的转换。 4. **WS-*兼容性**:CXF实现了许多Web服务标准,如WS-Security、WS-ReliableMessaging等,...

    CXF和spring整合所需jar包

    3. **cxf-rt-wsdl.jar**:WSDL(Web Service Description Language)解析库,用于读取和处理WSDL文件,以便生成服务端点和服务客户端代理。 4. **cxf-rt-bindings-soap.jar**:提供SOAP绑定支持,使得CXF能够将SOAP...

    apache-cxf-2.7.6

    这个压缩包"apache-cxf-2.7.6"包含了该版本的所有组件和资源,使得开发者能够方便地实现基于SOAP(简单对象访问协议)和RESTful(表述性状态转移)的Web服务。 CXF这个名字是"CXF = XFire + Celtix"的合并,这两个...

    webservice天气预报例子cxf实例

    在这个实例中,我们可能会看到如何使用CXF来创建一个可以获取天气预报信息的Web服务。 首先,我们需要了解Web服务的基本工作原理。Web服务通常通过WSDL(Web Services Description Language)文件来定义其接口,该...

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

    现在你可以通过代理对象调用服务端的方法,传入必要的参数,并接收返回结果。 ```java Response response = port.myMethod(requestObject); ``` #### 7. 错误处理和资源释放 在调用完成后,别忘了清理和关闭资源...

    cxf开发范例

    4. **数据绑定**:CXF支持多种数据绑定机制,如JAXB,用于自动序列化和反序列化Java对象到XML或JSON。 5. **部署和测试**:将资源类部署到CXF服务器,使用HTTP客户端进行测试。 【Spring与CXF的整合】 Spring是一...

    CXF webService 工具类

    - **数据绑定**:帮助将XML消息自动映射到Java对象,反之亦然,减少手动处理XML的复杂性。 - **错误处理**:提供异常处理机制,便于捕获和处理服务调用中的错误。 4. **使用CXF工具类的步骤** - **添加依赖**:...

    WebService开发客户端 cxf方式

    CXF是一个开源的Java框架,它支持构建和部署SOAP(简单对象访问协议)和RESTful(Representational State Transfer)Web服务。CXF提供了丰富的功能,包括WSDL(Web服务描述语言)第一类公民支持、强大的数据绑定、...

    apache-cxf-3.0.0

    3. **数据绑定**:CXF提供了JAXB(Java Architecture for XML Binding)和XMLBeans两种数据绑定机制,方便将XML文档与Java对象之间进行转换。 4. **WS-*栈**:CXF提供了完整的WS-*栈,包括WS-Security、WS-...

Global site tag (gtag.js) - Google Analytics