2013-08-14 6 views
3

나는 며칠 전에 Calabash XML을 다운로드하여 명령 프롬프트에서 쉽게 작업 할 수있었습니다. 그런 다음 Java 코드에서 실행하려고 시도했지만 아무 API도 없다는 것을 알았습니다 (예 : Calabash 기본 메소드는 어디에서나 코드 호출을 사용하여 방대합니다). 메인 메서드에서 거대한 청크를 래퍼 클래스에 복사하고 System.out에서 바이트 배열 출력 스트림 (그리고 결국 String)으로 전환해야하므로 작업이 매우 복잡했습니다. 즉실행중인 코드에서 코드

.. .

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 
} 

성능은 정말 느린 예를 들면 정말로 보인다 내가 때마다 많은처럼 보이지 않는다 17ms했다하지만 몽고 DB 호출 및 암호화 전화 등 내 스프링 REST 컨트롤러가 3/4 평균에 걸릴 평균적으로 간단한 필터를 1000 배 ...

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

를 실행 ms.

코드에서 칼라 바쉬를 실행할 때이 문제가 발생 했습니까? 내가 속력을 내기 위해 할 수있는 일이 있습니까?

XProcRuntime runtime = new XProcRuntime(config); 

이 한 번 생성하고 재사용 할 수 -

는 예를 들면, 나는이 매번 호출되고? Calamet를 사용하기 위해 돈을 지불하고 싶지는 않지만 실제로 코드에서 허용 가능한 성능으로 Xproc을 작동시키려는 경우 도움이됩니다.

답변

0

XMLCalabash를 프레임 워크에 통합하는 방법에 대한 예제는 Florent Georges가 Servlex를 언급 할 수 있습니다. 당신은 관련 비트를 찾을 수있는 코드를 검색해야 할 것이다, 그러나 마지막으로 나는 그것을 찾는 것은 그리 어렵지 않다 보았다 :

http://servlex.net/

XMLCalabash 불행히도 속도를 위해 구축되지 않았습니다. 프로필을 실행하고 일부 핫스팟을 찾을 수 있다면 Norm Walsh는 그것에 대해 듣고 싶어 할 것이라고 확신합니다.

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

나는 또한 당신이 더 나은 통합을위한 기본 클래스를 개선하기 위해 놈에게 패치를 보낼 수있는 경우 매우 확신, 그는 '

대안 XMLCalabash에서 파생 Quixprox로 보는 것입니다 그것에 대해 듣고 싶어합니다. 사실, 코드는 github에 있어야하며, 그냥 포크로 고쳐서 고치면됩니다.

HTH!

+0

좋습니다. 이 프로젝트에서는 성능이 중요합니다 (XProc가 제공하는 유연성도 마찬가지입니다). Servlex를 살펴 봅니다. 불행하게도 우리는 Quixprox를 GPL로 사용할 수 없습니다. 그것은 수치 스럽습니다. 감사! – bobmarksie