首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Axis2附件在响应中消失

Axis2附件在响应中消失
EN

Stack Overflow用户
提问于 2010-03-11 07:18:40
回答 2查看 2.9K关注 0票数 4

我正在使用axis2来提出一个基本的web服务,它将获得文件名作为参数,并生成一个响应SOAP包,该包将文件与SOAP一起附加。

下面是我创建服务代码的方法(它很简单,灵感来自于Axis2示例代码)

代码语言:javascript
运行
复制
public String getFile(String name) throws IOException
{
MessageContext msgCtx = MessageContext.getCurrentMessageContext();
File file = new File (name);
System.out.println("File = " + name);
System.out.println("File exists = " + file.exists());
FileDataSource fileDataSource = new FileDataSource(file);
System.out.println("fileDataSource = " + fileDataSource);
DataHandler dataHandler = new DataHandler(fileDataSource);
System.out.println("DataHandler = " + dataHandler);
    String attachmentID = msgCtx.addAttachment(dataHandler);
    System.out.println("attachment ID = " + attachmentID);
    return attachmentID;
}

现在客户端代码-

代码语言:javascript
运行
复制
      MessageContext response = mepClient
            .getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
    SOAPBody body = response.getEnvelope().getBody();
    OMElement element = body.getFirstElement().getFirstChildWithName(
    new QName("http://service.soapwithattachments.sample","return"));
    String attachementId = element.getText();
    System.out.println("attachment id is " + attachementId);
    Attachments attachment = response.getAttachmentMap();
        DataHandler dataHandler = attachment.getDataHandler(attachementId);

问题是dataHandler总是为空。虽然我认为是在服务器端,但文件被读取并与SOAP包一起附加。我做错了什么吗?

编辑:我已经将<parameter name="enableSwA" locked="false">true</parameter>放到了axis2.xml文件中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-11 23:23:25

我找到了这个问题的解决方案。问题是,在服务器端,通过使用MessageContext msgCtx = MessageContext.getCurrentMessageContext();调用,我们获得了传入消息上下文的句柄。我在传入消息上下文中添加附件,而附件需要添加到传出消息上下文中。要获得传出消息上下文的句柄,需要完成以下步骤:

代码语言:javascript
运行
复制
   //this is the incoming message context
    MessageContext inMessageContext  = MessageContext.getCurrentMessageContext();
    OperationContext operationContext = inMessageContext.getOperationContext();
    //this is the outgoing message context
    MessageContext outMessageContext =     operationContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);

收到传出消息上下文后,在此处添加附件-

代码语言:javascript
运行
复制
String attachmentID = outMessageContext.addAttachment(dataHandler);

代码的其余部分保持不变。

有关这方面的更多信息,请访问here

票数 2
EN

Stack Overflow用户

发布于 2010-03-11 13:29:04

同时配置将下载附件的临时文件夹

使用axis2.xml或services.xml、的

代码语言:javascript
运行
复制
<parameter name="cacheAttachments" locked="false">true</parameter>
<parameter name="attachmentDIR" locked="false">temp directory</parameter>
<parameter name="sizeThreshold" locked="false">4000</parameter>

在客户端以编程方式使用

代码语言:javascript
运行
复制
options.setProperty(Constants.Configuration.CACHE_ATTACHMENTS,
                                                   Constants.VALUE_TRUE);
options.setProperty(Constants.Configuration.ATTACHMENT_TEMP_DIR,TempDir);
options.setProperty(Constants.Configuration.FILE_SIZE_THRESHOLD, "4000");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2421418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档