2015-04-09 2 views
0

Имея следующий код, я загружаю модель BPMN.Как заставить EMF не манипулировать ссылочными идентификаторами

// dummy URI, loading done through input stream 
URI uri = URI.createURI("data.bpmn"); 
ResourceSet resourceSet = new ResourceSetImpl(); 
Resource resource = resourceSet.createResource(uri, "org.eclipse.bpmn2.content-type.xml"); 
resource.load(contentStream, null); 

Сохранение ресурсов resource.save(outputStream, null); манипулирует вывод и добавляет data.bpmn# к ссылкам:

<bpmndi:BPMNShape id="BPMNShape_StartEvent_1" bpmnElement="data.bpmn#StartEvent_1"> 
    <dc:Bounds height="36.0" width="36.0" x="162.0" y="182.0"/> 
     <bpmndi:BPMNLabel id="BPMNLabel_1" labelStyle="data.bpmn#BPMNLabelStyle_1"> 
      <dc:Bounds height="15.0" width="68.0" x="146.0" y="218.0"/> 
     </bpmndi:BPMNLabel> 
</bpmndi:BPMNShape> 

Где это выглядит исходя из входного потока:

<bpmndi:BPMNShape id="BPMNShape_StartEvent_1" bpmnElement="StartEvent_1"> 
    <dc:Bounds height="36.0" width="36.0" x="162.0" y="182.0"/> 
     <bpmndi:BPMNLabel id="BPMNLabel_1" labelStyle="BPMNLabelStyle_1"> 
      <dc:Bounds height="15.0" width="68.0" x="146.0" y="218.0"/> 
     </bpmndi:BPMNLabel> 
</bpmndi:BPMNShape> 

Есть ли способ заставить EMF не манипулировать ссылками?

ответ

0

Вот как я решил it:

ResourceSet resourceSet = new ResourceSetImpl(); 
XMLResource resource = (XMLResource) resourceSet.createResource(modelUri, "org.eclipse.bpmn2.content-type.xml"); 
XMLResource.URIHandler uriHandler = new URIHandlerImpl() { 
    @Override 
    public URI deresolve(URI uri) { 
     // make sure references are stored without # URI prefix 
     return URI.createURI(uri.fragment()); 
    } 
}; 
resource.getDefaultSaveOptions().put(XMLResource.OPTION_URI_HANDLER, uriHandler); 

resource.load(inputStream, null); 
0

изменить это:

URI uri = URI.createURI("data.bpmn"); 

в

URI.createPlatformResourceURI("/full/workspace/path/data.bpmn"); 

Вы должны зарегистрировать любое определение пакета в data.bpmn для EPackage с/глобального пакета реестре ResourceSet в ...

если вы загружаете data.bpmn из потока, XML и т. д.

The EMF Persistence API

Интерфейс ресурса включает в себя второй вариант сохранения() и нагрузки() методы, которые включают в себя потоковый аргумент:

недействительные сохранить (OutputStream OutputStream, опции Карты) броски IOException; void load (InputStream inputStream, Параметры карты) бросает IOException; Возможно, вы думаете, что это означает, что ресурсы EMF по своей сути основаны на потоках. Хотя большинство ресурсов, используемых с EMF, как правило, основаны на потоках, включая XML-ресурсы, предоставляемые с помощью EMF, также могут быть реализованы ресурсы, основанные на потоке (например, реляционная база данных).

+0

Ресурс.save (null); был неправильным, я на самом деле использую resource.save (outputStream, null); Если я использую createPlatformResourceURI(), «StartEvent_1» превращается в «# StartEvent_1», также если я использую createFileURI(). Есть ли какая-то возможность справиться с этим? –

Смежные вопросы