【问题标题】:Axis2 attachments are vanishing in the responseAxis2 附件在响应中消失
【发布时间】:2010-03-10 23:18:39
【问题描述】:

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

这是我创建服务代码的方式(其简单且受 Axis2 示例代码的启发)

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;
}

现在是客户端代码 -

      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 文件中。

【问题讨论】:

    标签: java web-services axis2


    【解决方案1】:

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

       //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);
    

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

    String attachmentID = outMessageContext.addAttachment(dataHandler);
    

    其余代码保持不变。

    更多信息请见here

    【讨论】:

      【解决方案2】:

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

      使用axis2.xml或services.xml,

      <parameter name="cacheAttachments" locked="false">true</parameter>
      <parameter name="attachmentDIR" locked="false">temp directory</parameter>
      <parameter name="sizeThreshold" locked="false">4000</parameter>
      

      在客户端以编程方式,

      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");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-22
        • 2015-01-26
        相关资源
        最近更新 更多