0

我有一个使用 Apache CXF 开发的 SOAP Web 服务。Web 服务将在 SOAP 标头中传递一个参数,我必须将其传递给 Web 服务方法。如何在 Web 服务方法中获取此参数?例如。我的网络服务方法是 getCustomerByName(String name)。请求 SOAP 标头将有一个参数 authentication=ticket。如何在方法中获取此值(票证)。我尝试了拦截器-它们允许获取标头详细信息,但是我在哪里存储它并在方法主体中获取它。是否有可以设置的共享上下文或属性?

4

2 回答 2

4

JAX-WS 有一个 WebServiceContext 对象,可以通过@Resource 注解注入。从上下文中,您应该能够在拦截器中获取您在消息中设置的任何内容。

或者

您可以使用 PhaseInterceptorChain.getCurrentMessage() 来获取 CXF 的当前消息并检索您需要的任何内容。

或者

您可以将方法修改为: getCustomerByName(@WebParam(header = true) String auth, String name) 以让 CXF 传入标头。

于 2013-11-05T17:13:53.740 回答
0

我这样做了,它奏效了:

`Message message = PhaseInterceptorChain.getCurrentMessage();

List<Header> headers = CastUtils.cast((List<?>) message.get(Header.HEADER_LIST));

for(Header hd : headers){
   if (hd!=null){
    //do dom parsing
    Element e = (Element)hd.getObject();
    e.getTextContent());
    }
}`
于 2013-11-08T07:03:22.363 回答