我正在构建一个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注释)。非常感谢你!
答案 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。