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