2013-08-14 5 views
3

Я загрузил Calabash XML пару дней назад и получил его достаточно легко из командной строки. Затем я попытался запустить его из Java-кода. Я заметил, что API отсутствует (например, основной метод Calabash массивный, с кодовыми вызовами везде). Чтобы заставить его работать, было очень грязно, так как мне пришлось копировать огромные куски из основного метода в класс-оболочку и отвлекаться от потока System.out до байтового массива (и, в конечном итоге, в строку), то естьЗапуск Calabash XML Из кода

.. .

ByteArrayOutputStream baos = new ByteArrayOutputStream(); // declare at top 

...

WritableDocument wd = null; 
if (uri != null) { 
    URI furi = new URI(uri); 
    String filename = furi.getPath(); 
    FileOutputStream outfile = new FileOutputStream(filename); 
    wd = new WritableDocument(runtime,filename,serial,outfile); 
} else { 
    wd = new WritableDocument(runtime,uri,serial, baos); // new "baos" parameter 
} 

спектакль кажется, действительно, очень медленно, например, я побежал простой фильтр 1000 раз ...

<p:filter> 
    <p:with-option name="select" select="'/result/meta-data/neighbors/document/title'" /> 
</p:filter> 

В среднем каждый раз взял 17ms, который не походит на много, но моя весна REST контроллер с вызовами Монго DB и шифрования звонков и т.д. принять в среднем 3/4 Миз.

Кто-нибудь сталкивался с этим при запуске Calabash из кода? Есть ли что-то, что я могу сделать, чтобы ускорить процесс?

К примеру, я это вызывается каждый раз -

XProcRuntime runtime = new XProcRuntime(config); 

Может ли это быть создан один раз и повторно использовать? Любая помощь приветствуется, поскольку я не хочу платить деньги за использование Calamet, но на самом деле хочу, чтобы Xproc работал от кода до приемлемой производительности.

ответ

0

Для примера о том, как вы можете интегрировать XMLCalabash в структуру, я могу упомянуть Servlex от Florent Georges. Вы должны были бы просматривать код, чтобы найти соответствующий бит, но последний раз я смотрел это не должно быть слишком трудно найти:

http://servlex.net/

XMLCalabash не был построен для скорости, к сожалению. Я уверен, что если вы запустите профиль и сможете найти некоторые горячие точки, Norm Walsh будет интересно услышать об этом.

альтернатива смотреть в Quixprox, который является производным от XMLCalabash:

https://code.google.com/p/quixproc/

Я также очень уверен, что если вы можете отправить Norm патч, чтобы улучшить основной класс для лучшей интеграции, он быть заинтересованным услышать об этом. На самом деле, код должен быть на github, просто разблокировать его, исправить и выполнить запрос на перенос.

HTH!

+0

Это хорошая идея. Производительность важна для этого проекта (но также и гибкость, предоставляемая XProc). Посмотрите на Servlex. К сожалению, мы не можем использовать Quixprox, поскольку это GPL, что является позором. Благодаря! – bobmarksie

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