2016-05-04 12 views
0

jBoss WebアプリケーションからRemoteConverterを使用して、documents4jプロジェクトにデフォルトのserver-standaloneとして組み込まれているスタンドアロンサーバーを使用しています。Documents4jのRemoteConverter用のカスタムHttpClient

私は必要なライブラリの古いバージョンを持っていますhttpclient-4.0.1.jarと関連するhttpcore-4.0.1.jar私は多くのClassDefNotFoundExceptionに直面しているので、JVMによってロードされたJARの異なるバージョンによって引き起こされます。

まだ

私は、理由により以前の問題のために、standalone-server用のカスタムHTTPクライアントをbluildしたいのですが、この問題を回避するために、それはだバージョンでは利用できませんHttpClientConnectionManagerオブジェクトとの具体的な問題があります私はJerseyを使用することはできません。

誰かがそれに対してstandalone-serverの別のクライアントを構築していますか?カスタムRemoteClientを構築するスペックは何ですか?

UPDATE 1スニッフィングツールの助けを借りて、分析を少しした後、私はメッセージの構図を考え出したので、私はちょうど、次のようにそのサーバ用のカスタムHttpClientを終了しました

File wordFile = new File("C:/temp/test.docx"); 
    InputStream targetStream = new FileInputStream(wordFile); 

    URL url = new URL("http://localhost:9998"); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setDoOutput(true); 
    conn.setRequestMethod("POST"); 
    conn.setRequestProperty("Content-Type", "application/vnd.com.documents4j.any-msword"); 
    conn.setRequestProperty("Accept", "application/pdf"); 
    conn.setRequestProperty("Converter-Job-Priority", "1000"); 


    OutputStream os = conn.getOutputStream(); 
    os.write(IOUtils.toByteArray(targetStream)); 
    os.flush(); 

    if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) { 
     throw new RuntimeException("Failed : HTTP error code : " 
      + conn.getResponseCode()); 
    } 

    BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream()))); 
    FileWriter ostream = new FileWriter("C:/temp/test.pdf"); 
    BufferedWriter out = new BufferedWriter(ostream); 
    String output; 
    System.out.println("Output from Server .... \n"); 
    while ((output = br.readLine()) != null) { 
     System.out.println(output); 
     out.write(output+"\n"); 
    } 
    br.close(); 
    out.close(); 
    os.close(); 
    conn.disconnect(); 

私が作成したばかりのtest.pdfファイルを開こうとすると、すべて白であるが適切なページ数で問題が発生する。私は、テキストエディタでファイルを開き、ファイルの先頭と末尾を分析する場合、私は、次の文字を見つけました:

%PDF-1.5 
%µµµµ 
1 0 obj 
[...] 
startxref 
1484122 
%%EOF 

良いPDFファイルのようです。

RESTサーバーから受信したファイルとは何か関係がありますか?

答えて

1

質問に答える前に:私はあなたにむしろshadeにそれを再実装することをお勧めします。

あなた自身のサービスを実装するときにエンコードの問題に直面していると思います。 BufferedReaderは、着信データを文字データに変換します。文字列でデータを読み込まず、バイナリとして扱います。 の代わりに、ライタークラスはストリームクラスを使用します。これは、メタデータが文字で表されているように正しく扱われますが、実際のデータはバイナリ情報なので不正です。

InputStream in = conn.getInputStream(); 
OutputStream out = new FileOutputStream("C:/temp/test.pdf"); 
byte[] buffer = new byte[1024]; 
int len; 
while ((len = in.read(buffer)) != -1) { 
    out.write(buffer, 0, len); 
}