You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Lotus Notes中使用MTOM:寻求Web Service Consumer创建协助

我来帮你一步步搞定支持MTOM的Lotus Notes Web Service Consumer,顺便也梳理下你之前写Provider代码时可能踩的坑~

创建支持MTOM的Lotus Notes Web Service Consumer 步骤指导

1. 准备MTOM-enabled的Web Service WSDL

首先得确保目标Web Service(不管是你自己开发的还是第三方的)已经启用MTOM,并且有可用的WSDL文件。如果是你自己写的Provider,先把它调通(后面我会分析你代码里的问题)。

2. 生成Web Service Consumer代理

在Domino Designer里操作:

  • 新建一个代理(Agent)或者Java类库(Java Library)项目
  • 右键点击项目,选择Web Services → Generate Web Service Client
  • 输入WSDL的URL或者本地文件路径,点击下一步
  • 在配置界面,找到MTOM相关选项(一般在Advanced或Binding配置页),勾选「Enable MTOM」
  • 完成生成,Domino会自动生成对应的Consumer代理类和依赖文件

3. 编写Consumer调用代码

实例化代理类并启用MTOM特性,示例代码如下:

import com.yourpackage.MtomserviceService;
import com.yourpackage.MtomservicePortType;
import javax.xml.ws.soap.MTOMFeature;
import java.io.File;
import java.nio.file.Files;

public class MTOMConsumerAgent extends AgentBase {
    public void NotesMain() {
        try {
            // 开启MTOM特性
            MTOMFeature mtomFeature = new MTOMFeature(true);
            
            // 初始化服务和端口
            MtomserviceService service = new MtomserviceService();
            MtomservicePortType port = service.getMtomservicePort(mtomFeature);

            // 读取要发送的二进制文件(示例为PDF)
            String filePath = getSession().getEnvironmentString("Directory", true) + "/test.pdf";
            byte[] fileBytes = Files.readAllBytes(new File(filePath).toPath());

            // 调用Web Service方法
            Response response = port.getResponse(fileBytes);

            // 处理响应结果
            if ("OK".equals(response.getResponseStatus())) {
                System.out.println("文件上传成功!");
            } else {
                System.err.println("上传失败:" + response.getResponseErrorText());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4. 部署与测试

  • 将代理或类库部署到Domino服务器
  • 运行代理,检查服务器控制台日志,同时查看Provider端的目标目录是否有文件生成

你之前Web Service Provider代码的问题分析

看了你的Provider代码,有几个明显的问题会导致它无法正常工作:

  1. 拼写错误:response.setResponseststus里多了一个t,正确的应该是response.setResponseStatus,这个会导致编译错误或者运行时找不到方法。

  2. 缺少必要的Web Service注解:除了@MTOM,你的类还需要@WebService注解来标识这是一个Web Service Provider,修正后:

import javax.jws.WebService;
import javax.xml.ws.soap.MTOM;

@WebService(serviceName = "MtomserviceService", portName = "MtomservicePort")
@MTOM(enabled = true)
public class Mtomservice {
    // 你的方法代码...
}
  1. 资源未关闭:FileOutputStream没有手动关闭,可能导致文件损坏或资源泄漏,建议用try-with-resources语法自动管理:
try (FileOutputStream fileOut = new FileOutputStream(new File(filePath))) {
    fileOut.write(arg0);
    response.setResponseStatus("OK");
} catch (Exception e) {
    // 异常处理逻辑
}
  1. Response类缺少JAXB注解:Response作为Web Service的返回对象,需要添加@XmlRootElement注解,并且要有无参构造函数,才能被JAXB正确序列化:
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Response {
    private String responseStatus;
    private String responseErrorText;

    // 必须要有无参构造函数
    public Response() {}

    // Getter和Setter方法
    public String getResponseStatus() {
        return responseStatus;
    }

    public void setResponseStatus(String responseStatus) {
        this.responseStatus = responseStatus;
    }

    public String getResponseErrorText() {
        return responseErrorText;
    }

    public void setResponseErrorText(String responseErrorText) {
        this.responseErrorText = responseErrorText;
    }
}

修正这些问题后,你的Provider应该能正常运行,之后再按照前面的步骤创建Consumer即可。

内容的提问来源于stack exchange,提问作者Renat Ahmetshin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:57:53