如何使用 Axis2 将二进制文件发送到 Web 服务?
How do you send a binary file to a webservice using Axis2?
我正在使用 Axis 1.4 on a project and I am moving to Axis2 1.6.3。我问这个是因为在 Axis1.4 中它非常简单:
myStub.addAttachment(new DataHandler(new FileDataSource("path_to_file")));
你只要在Stub中添加一个DataHandler然后发送即可。但是在Axis2中好像没有这个方法。所以我想知道将 DataHandler 附加到存根的新方法是什么?
当我在互联网上搜索时,我发现您必须将 DataHandler 附加到 MessageContext
(Downloading a Binary File from a Web Service using Axis2 and SOAP with Attachments)。
所以我做了 据说:
MessageContext messageContext = MessageContext.getCurrentMessageContext();
OperationContext operationContext = messageContext.getOperationContext();
MessageContext outMessageContext = operationContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
outMessageContext.addAttachment(new DataHandler(new FileDataSource("path_to_file")));
但问题是MessageContext.getCurrentMessageContext()
return null。我认为它不起作用,因为这个片段应该在服务器端使用。我想要的是能够将文件发送到服务器而不是从服务器检索文件。
我可能遗漏了什么。也许这不是这样做的方法,无论如何,我们将不胜感激。与此同时,我会继续在互联网上搜索,如果我找到了什么,我会通知你:)
一段时间后,我在 Axis2 文档中找到了如何执行此操作。
转到 SOAP with Attachments (SwA) with Axis2 并在名为 发送 SwA 类型附件 的第二部分。在这里您将了解如何将文件发送到服务器。
这是他们提供的代码片段:
public void uploadFileUsingSwA(String fileName) throws Exception {
Options options = new Options();
options.setTo(targetEPR);
options.setProperty(Constants.Configuration.ENABLE_SWA, Constants.VALUE_TRUE);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
options.setTo(targetEPR);
ServiceClient sender = new ServiceClient(null,null);
sender.setOptions(options);
OperationClient mepClient = sender.createClient(ServiceClient.ANON_OUT_IN_OP);
MessageContext mc = new MessageContext();
mc.setEnvelope(createEnvelope());
FileDataSource fileDataSource = new FileDataSource("test-resources/mtom/test.jpg");
DataHandler dataHandler = new DataHandler(fileDataSource);
mc.addAttachment("FirstAttachment",dataHandler);
mepClient.addMessageContext(mc);
mepClient.execute(true);
}
有关详细信息,请查看文档页面。
干杯!
我正在使用 Axis 1.4 on a project and I am moving to Axis2 1.6.3。我问这个是因为在 Axis1.4 中它非常简单:
myStub.addAttachment(new DataHandler(new FileDataSource("path_to_file")));
你只要在Stub中添加一个DataHandler然后发送即可。但是在Axis2中好像没有这个方法。所以我想知道将 DataHandler 附加到存根的新方法是什么?
当我在互联网上搜索时,我发现您必须将 DataHandler 附加到 MessageContext
(Downloading a Binary File from a Web Service using Axis2 and SOAP with Attachments)。
所以我做了 据说:
MessageContext messageContext = MessageContext.getCurrentMessageContext();
OperationContext operationContext = messageContext.getOperationContext();
MessageContext outMessageContext = operationContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
outMessageContext.addAttachment(new DataHandler(new FileDataSource("path_to_file")));
但问题是MessageContext.getCurrentMessageContext()
return null。我认为它不起作用,因为这个片段应该在服务器端使用。我想要的是能够将文件发送到服务器而不是从服务器检索文件。
我可能遗漏了什么。也许这不是这样做的方法,无论如何,我们将不胜感激。与此同时,我会继续在互联网上搜索,如果我找到了什么,我会通知你:)
一段时间后,我在 Axis2 文档中找到了如何执行此操作。
转到 SOAP with Attachments (SwA) with Axis2 并在名为 发送 SwA 类型附件 的第二部分。在这里您将了解如何将文件发送到服务器。
这是他们提供的代码片段:
public void uploadFileUsingSwA(String fileName) throws Exception {
Options options = new Options();
options.setTo(targetEPR);
options.setProperty(Constants.Configuration.ENABLE_SWA, Constants.VALUE_TRUE);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
options.setTo(targetEPR);
ServiceClient sender = new ServiceClient(null,null);
sender.setOptions(options);
OperationClient mepClient = sender.createClient(ServiceClient.ANON_OUT_IN_OP);
MessageContext mc = new MessageContext();
mc.setEnvelope(createEnvelope());
FileDataSource fileDataSource = new FileDataSource("test-resources/mtom/test.jpg");
DataHandler dataHandler = new DataHandler(fileDataSource);
mc.addAttachment("FirstAttachment",dataHandler);
mepClient.addMessageContext(mc);
mepClient.execute(true);
}
有关详细信息,请查看文档页面。
干杯!