我有一个使用Apache CXF开发的SOAP Web服务。 Web服务将在SOAP头中传递一个参数,我必须将该参数传递给Web服务方法。如何在Web服务方法中获取此参数? 例如。我的Web服务方法是getCustomerByName(String name)。 请求SOAP标头将有一个参数,authentication = ticket。如何在方法中获取此值(票证)。 我尝试过拦截器 - 它们允许获取Header详细信息,但是我在哪里存储它并将其放入方法体中。是否有我可以设置的共享上下文或属性?
答案 0 :(得分:4)
JAX-WS有一个WebServiceContext对象,可以通过@Resource注释注入。从上下文中,您应该能够在拦截器中获取您在消息中设置的任何内容。
OR
您可以使用PhaseInterceptorChain.getCurrentMessage()来获取CXF的当前消息并检索您需要的任何内容。
OR
您可以将方法修改为:getCustomerByName(@WebParam(header = true)String auth,String name)让CXF传入标题。
答案 1 :(得分: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());
}
}`