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()仍返回空,检查两点:- 确认MagicDraw UI中该智能包确实包含InformationFlow元素
- 确保API调用处于活跃的编辑会话中:
SessionManager sessionManager = SessionManager.getInstance(); sessionManager.createSession("Access Smart Package"); try { // 在这里执行获取智能包元素的代码 } finally { sessionManager.closeSession(); }
内容的提问来源于stack exchange,提问作者DC United
相关产品推荐
相关产品推荐

