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

MagicDraw 2021x Java API获取智能包内容的方法求助

MagicDraw Java API: 智能包调用getPackagedElement()返回空的解决方法
  • 识别智能包的真实类型
    MagicDraw的“智能包”对应的具体类是com.nomagic.uml2.ext.magicdraw.classes.mdkernel.SmartPackage,它虽继承自标准UML的Package接口,但普通Package变量无法访问其特有的方法,需先做类型转换:
// 假设pkg是你已获取的Package类型变量
if (pkg instanceof com.nomagic.uml2.ext.magicdraw.classes.mdkernel.SmartPackage) {
    com.nomagic.uml2.ext.magicdraw.classes.mdkernel.SmartPackage smartPkg = 
        (com.nomagic.uml2.ext.magicdraw.classes.mdkernel.SmartPackage) pkg;
}
  • 获取智能包内的元素
    智能包的元素存储逻辑和普通包不同,getPackagedElement()无法获取其内容,需调用它特有的getContents()方法:
Collection<Element> allElements = smartPkg.getContents();
// 过滤出你需要的InformationFlow元素
List<InformationFlow> infoFlows = new ArrayList<>();
for (Element elem : allElements) {
    if (elem instanceof InformationFlow) {
        infoFlows.add((InformationFlow) elem);
    }
}
  • 排查权限与会话问题
    如果调用getContents()仍返回空,检查两点:
    1. 确认MagicDraw UI中该智能包确实包含InformationFlow元素
    2. 确保API调用处于活跃的编辑会话中:
SessionManager sessionManager = SessionManager.getInstance();
sessionManager.createSession("Access Smart Package");
try {
    // 在这里执行获取智能包元素的代码
} finally {
    sessionManager.closeSession();
}

内容的提问来源于stack exchange,提问作者DC United

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:23:14