「 common 」という別のGrailsプラグインを使用する「foo」というGrailsプラグインがあります。
grails.plugin.location.'common' = "../common"
' common 'プラグインには、ドメインクラスと、リソースファイル(.propertiesファイル、xmlテンプレートなど)が含まれています。これらのファイルはすべて、common / grails-app /conf/のサブフォルダーにあります。
正しく機能するためにこれらのファイルを使用する私の「共通」プラグインにNamespaceContextを実装するクラスが1つあります。
public class MyNamespaceContext implements NamespaceContext {
private Map<String, String> namespaces;
public MyNamespaceContext() {
final String XML_NAMESPACES_FILE = "grails-app/conf/xml/xmlNamespaces.properties";
try {
Properties xmlNamespaces = new Properties();
xmlNamespaces.load(new FileReader(XML_NAMESPACES_FILE));
namespaces = new HashMap<String, String>((Map) xmlNamespaces);
} catch (FileNotFoundException e) {
throw new RuntimeException("XML namespaces file '" + XML_NAMESPACES_FILE + "' cannot be found");
} catch (IOException e) {
throw new RuntimeException("IOException");
}
}
...
}
このクラスは、xmlデコレータとして実装された、私のドメインモデルを形成する「common」にあるいくつかのクラスで使用されます。
public class UserXmlDecorator implements User {
private Document xmlDocument;
private XPath xPath;
private final String rawXml;
public UserXmlDecorator(String rawXml) {
this.rawXml = rawXml;
this.xmlDocument = XmlDocumentFactory.INSTANCE.buildXmlDocumentInUTF8(rawXml);
this.xPath = XPathFactory.newInstance().newXPath();
xPath.setNamespaceContext(new MyNamespaceContext());
}
public String getUserName() {
try {
XPathExpression userNameXPathExpr = xPath.compile("...");
String userName = userNameXPathExpr.evaluate(appendixBXmlDocument);
return userName;
} catch (XPathExpressionException e) {
throw new RuntimeException();
}
}
public String getAge() {
try {
XPathExpression ageXPathExpr = xPath.compile("...");
String age = ageXPathExpr.evaluate(appendixBXmlDocument);
return age;
} catch (XPathExpressionException e) {
throw new RuntimeException();
}
}
Grailsプラグイン'foo'でこれらのデコレータを作成すると、 common / grails-app /conf/ではなくfoo/grails-app / conf / xml / xmlNamespaces.propertiesでテンプレートを検索するため、FileNotFound例外が発生します。 xml/xmlNamespaces.properties。
Grails:インストールされたプラグイン内にあるリソースを参照する方法を読みまし たか?しかし、これは私を助けることができませんでした。
どうすればこれを解決できるのでしょうか?