CTO文件跨文件引用资产报错:Namespace is not defined for type org.comp.item
解决CTO文件中命名空间导入报错的问题
嘿,我之前也遇到过这个Hyperledger Composer CTO文件的导入问题,咱们来快速搞定它!
你碰到的Namespace is not defined for type org.comp.item错误,核心原因是导入语句的写法不符合CTO文件的语法规范——直接写命名空间是无效的,必须明确指定要导入的类型,或者导入整个命名空间的所有内容。
修正后的transaction.cto代码
namespace org.comp.transaction // 方案1:导入org.comp.item命名空间下的所有类型(推荐,后续新增类型不用重复导入) import org.comp.item.* // 方案2:只导入需要用到的Item资产(更精准) // import org.comp.item.Item /** * JUST FOR INITIALIZING A DEMO */ transaction SetupDemoItem { } transaction Get { } transaction CreateItem { o Item newItem }
报错原因详解
你原来的import org.comp.item只是声明了命名空间,但没有告诉解析器要导入这个空间下的哪些具体类型。CTO解析器无法关联到Item资产的定义,自然会报错说命名空间未定义。
另外还要注意:两个CTO文件必须放在同一个模型目录(比如项目的models文件夹)下,这样Composer的模型加载器才能正确读取并关联这两个文件的内容,避免出现找不到命名空间的情况。
内容的提问来源于stack exchange,提问作者UnexpectedCharacter
相关产品推荐
相关产品推荐

