diff --git a/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/XmiResourceManager.java b/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/XmiResourceManager.java index 0f39aba550..fc9d0511a3 100644 --- a/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/XmiResourceManager.java +++ b/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/XmiResourceManager.java @@ -221,36 +221,41 @@ public class XmiResourceManager { return resourceSet.createResource(propertyResourceURI); } - public Resource getReferenceFileResource(Resource itemResource, String extension, boolean needLoad) { - URI referenceFileURI = getReferenceFileURI(itemResource.getURI(), extension); + public Resource getReferenceFileResource(Resource itemResource, ReferenceFileItem refFile, boolean needLoad) { + URI referenceFileURI = getReferenceFileURI(itemResource.getURI(), refFile.getExtension()); URIConverter converter = resourceSet.getURIConverter(); Resource referenceResource = new ByteArrayResource(referenceFileURI); InputStream inputStream = null; List resources = new ArrayList(resourceSet.getResources()); - for (Resource res : resources) { - if (res != null && referenceFileURI.toString().equals(res.getURI().toString())) { - res.unload(); - resourceSet.getResources().remove(res); + // in case ESB load reference file from the physcial file,but DI need reference from the EMF,so add this flag + if (refFile.isReloadFromFile()) { + for (Resource res : resources) { + if (res != null && referenceFileURI.toString().equals(res.getURI().toString())) { + res.unload(); + resourceSet.getResources().remove(res); + } } - } - resourceSet.getResources().add(referenceResource); - try { - if (needLoad) { - inputStream = converter.createInputStream(referenceFileURI); - referenceResource.load(inputStream, null); - } - } catch (IOException e) { - e.printStackTrace(); - } finally { + resourceSet.getResources().add(referenceResource); try { - if (inputStream != null) { - inputStream.close(); + if (needLoad) { + inputStream = converter.createInputStream(referenceFileURI); + referenceResource.load(inputStream, null); } } catch (IOException e) { - ExceptionHandler.process(e); + e.printStackTrace(); + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException e) { + ExceptionHandler.process(e); + } } + } else { + referenceResource = resourceSet.getResource(referenceFileURI, true); } return referenceResource; } @@ -363,7 +368,7 @@ public class XmiResourceManager { // do nothing, consider the file don't exist itemResource = null; } - } + } if (itemResource == null && createIfNotExist) { itemResource = resourceSet.createResource(itemResourceURI); }