在WebService类问题中访问SOAPMessage

时间:2014-02-27 21:54:08

标签: java web-services java-ee soap

我正在构建一个Java Web服务。我的环境是Java EE6,Glassfish 3.1.2 我需要将一些文件发送到我的Web服务,所以我使用SOAP附件方法。在我的Web服务类中,我需要获取所有附件部分。以下是我的代码:

@WebService
//@MTOM
public class UploadServiceImpl implements UploadService {

@Resource
WebServiceContext wsctx;


@Override
public String upload() {
            // This below line is CASTING error
    SOAPMessageContext soapMessageContext = (SOAPMessageContext)wsctx.getMessageContext();

    SOAPMessage soapMessage = soapMessageContext.getMessage();

    soapMessage.getAttachments();
    // ... 

    return "done";
}
}

我收到了CASTING错误,因为我正在将wsctx.getMessageContext()转换为SOAPMessageContext 。 wsctx.getMessageContext()不是SOAPMessageContext的实例。

我的问题是:为什么处理程序(SOAPHandler)。我能够将MessageContext转换为SOAPMessageContext,但是在WebService类中,我无法做到?

任何人都知道这是什么问题?如何在webservice类中访问SOAPMessage? (由@WebService注释)。非常感谢你!

1 个答案:

答案 0 :(得分:0)

原因是Web服务API被设计为独立于协议,而SOAP只是可用于实现Web服务的众多潜在协议之一,因此消息上下文不是{ {1}}除非容器确定您专门处理SOAP协议,例如SOAPMessageContext

但没关系,你仍然可以检索你的附件,试试这个,

SOAPHandler

地图@Override public String upload() { MessageContext mc = wsctx.getMessageContext(); Map<String, DataHandler> atts = mc.get(MessageContext.INBOUND_MESSAGE_ATTACHMENTS); // ... return "done"; } 将每个附件的atts映射到其各自的Content-ID。要查看消息上下文中的所有其他属性check the docs