Page tree

Contents


はじめに

このページでは、Windows環境にインストールしたConfluenceでよく発生するトラブルについて、解決方法を説明します。Linux版Confluenceのトラブルについては、こちらのページをご確認ください。

ファイル名に全角のアルファベット、ローマ数字を含むファイルを添付できない

データベースにPostgreSQLを使用するように設定したConfluenceで、ファイル名に以下の全角文字を含むファイルを添付しようとすると、エラー画面が表示されたり、添付したファイルが表示されなくなることがあります。

全角アルファベット大文字ABCDEFGHIJKLMNOPQRSTUVWXYZ
全角ローマ数字ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ

再現手順

Confluenceで任意のページを開き、右上の「ツール」から「添付ファイル」を選択します。

ファイル名に全角アルファベット大文字、ローマ数字を含むファイルを添付します。

エラーの画面が表示されて、ファイルを添付できません。↓こちらの画面はInternet Explorerを使ったときの例です。

ファイルを添付する手順によっては、エラー画面が表示されずファイルが添付されないだけのこともあります。

原因

この現象は、PostgreSQLを使用するように設定されたConfluenceでのみ発生します(MySQLでは現象は発生していません。Oracle、SQL Serverでは未確認です)。

Confluenceの添付ファイル機能は、ファイル名の大文字・小文字を区別しないように設計されています。具体的には、アップロードされたファイルを保存するときに、ファイル名の大文字を小文字に変換しています。
しかし、Confluence側がファイルを保存するときのファイル名変換ルールとデータベースがファイル名を保存するときの変換ルールが異なっているため、保存したファイルの情報を正しく読み取れなくなることがあります。
このためエラー画面が表示されたり、ファイルが添付されないなどの不具合が発生します。

ご参考

この現象は、CONF-20722 「NPE - when attaching a file that the filename contains full-width alphabet character using PostgreSQ」としてAtlassianに報告済みです。
Confluence ver.6.7.2で解決されています。

対策

ご注意ください

Confluence ver.6.7.2以降の場合は、不具合が発生しないため、以下の操作は行わないでください。

Confluenceとデータベースでファイル名の大文字・小文字変換ルールを揃えることで、添付ファイルの情報を正しく取得できるようにします。

手順1 データベースの言語設定を確認

最初にデフォルトの言語設定を確認します。「スタート」メニューの「すべてのプログラム」から「PostgreSQL x.x」→「pgAdmin III」と選択します。

pgAdmin IIIの画面が開いたら、「PostgreSQL x.x(localhost:5432)」→「データベース」→「conf_db」の順に選択します。途中、管理者パスワードを要求されたら、PostgreSQLインストール時に指定したパスワードを入力してください。

conf_db」を選択したら、ツールバーの「任意のSQLクエリーを実行」ボタンをクリックします。

Queryウィンドウが開くので、左上の「SQLエディタ」に「SELECT * FROM pg_language;」と入力します。入力できたら、ツールバーの「クエリーの実行」ボタンをクリックします。画面下側の「出力ビュー」 にSQLの実行結果が表示されます。
出力ビューに「plpgsql」が存在しないときは、「手順2 plpgsqlの追加」を行なってください。
存在しているときは、「手順3 rs_lower関数の作成」に進みます。

手順2 plpgsqlの作成

添付ファイル confluence_patch_A.sql を適当なフォルダにダウンロードします。ツールバーの「ファイルを開く」ボタンからダウンロードしたファイルを開き、「クエリーを実行」ボタンをクリックします。
実行後、画面下側の「メッセージ」に実行結果が表示されます。以下の画面のように、「……結果なしでうまく帰りました。」と表示されることを確認します。 

plpgsql」が登録されているか確認します。左上の「SQLエディタ」に「SELECT * FROM pg_language;」と入力し、ツールバーの「クエリーの実行」ボタンをクリックします。画面下側の「出力ビュー」 にSQLの実行結果が表示されるので、「plpgsql」の行が含まれていることを確認してください。


手順3 rs_lower関数の作成

次に、PostgreSQLのlower関数の置き換えを行います。
添付ファイル confluence_patch_B.sql を適当なフォルダにダウンロードします。ツールバーの「ファイルを開く」ボタンからダウンロードしたファイルを開き、「クエリーを実行」ボタンをクリックしてください。
実行後、画面下側の「メッセージ」に実行結果が表示されます。以下の画面のように、「……結果なしでうまく帰りました。」と表示されることを確認します。
これで、データベースに置き換え対象となるrs_lower関数が作成されました。 

手順4-A  lower関数のマッピングを編集(Confluence 5.10.x ~ Confluence 6.7.1)

ご注意ください

Conflunece 5.9.x以前をご利用の場合は、手順4-Bを実行してください。

続いて、lower関数をrs_lower関数に置き換えるための設定を行います。

エクスプローラで C:\Atlassian\Confluence\confluence\WEB-INF\lib を開き、 confluence-6.4.x.jar を適当な作業用フォルダにコピーします。

作業用フォルダに confluence-6.4.x.jar を貼り付けたら、confluence-6.4.x.jar.zip に名前を変更します。
次にファイルを右クリックし、ポップアップメニューから「すべて展開」を選択します。

圧縮(ZIP形式)フォルダーの展開」ダイアログボックスが表示されたら「展開」ボタンをクリックします。

ファイルが解凍されたら、(作業フォルダ)\confluence-6.4.x.jar\com\atlassian\confluence\pages の AttachmentQueries.hbm.xml を適当なエディタで開きます。


 AttachmentQueries.hbm.xml のファイルの次の二箇所を変更します。

ファイルの前後は省略していますので、前後は省略していますので「lowerTitle」をキーに検索してください。

<query name="confluence.attachment_findByContentFileNameAndVersion"><![CDATA[
    from Attachment attachment
    left join fetch attachment.originalVersion as originalAttachment
    where attachment.containerContent.id = :contentId
    and ((originalAttachment is null and attachment.contentStatus = 'current') or originalAttachment.contentStatus = 'current')
    and rs_lower(attachment.lowerTitle) = :fileName     ※この行を編集します。
    and attachment.version = :version
]]></query>

<query name="confluence.attachment_findLatestByContentAndFileName"><![CDATA[
    from Attachment attachment
    left join fetch attachment.contentProperties
    where attachment.containerContent.id = :contentId
    and attachment.contentStatus = 'current'
    and rs_lower(attachment.lowerTitle) = :fileName     ※この行を編集します。
    and attachment.originalVersion is null
]]></query>

最後に、編集したファイルをConfluenceが参照できるように配置します。

編集したファイルをjarファイルに圧縮する必要はありません。
以下のように <Confluence インストールディレクトリ>\confluence\WEB-INF\classes\com\atlassian\confluence\pages ディレクトリを作成し、ファイルを配置することでConfluenceが参照するようになります。

手順4-B lower関数のマッピングを編集(Confluence 5.9.x以前)

ご注意ください

Confluence 5.10.x以降をご利用の場合は、手順4-Aを実行してください。

続いて、lower関数をrs_lower関数に置き換えるための設定を行います。

エクスプローラで C:\Atlassian\Confluence\confluence\WEB-INF\lib を開き、 confluence-4.3.x.jar を適当な作業用フォルダにコピーします。

作業用フォルダに confluence-4.3.x.jar を貼り付けたら、confluence-4.3.x.jar.zip に名前を変更します。
次にファイルを右クリックし、ポップアップメニューから「すべて展開」を選択します。

 

圧縮(ZIP形式)フォルダーの展開」ダイアログボックスが表示されたら「展開」ボタンをクリックします。

ファイルが解凍されたら、(作業フォルダ)\confluence-4.3.x.jar\com\atlassian\confluence\pages の Attachment.hbm.xml を適当なエディタで開きます。

Attachment.hbm.xmlファイルの次の二箇所を変更します。
ファイルの前後は省略していますので、該当部分を検索して変更してください。いずれも「lower」を「rs_lower」に変更します。

Confluence ver.5.7以降をご利用の場合

編集対象のファイルは、 confluence-x.x.x.jar/com/atlassian/confluence/pages/AttachmentQueries.hbm.xml です。
Attachment.hbm.xmlを AttachmentQueries.hbm.xml へ読み替えて、変更をお願いします。

<query name="confluence.attachment_findByContentFileNameAndVersion"><![CDATA[
    from Attachment attachment
    where attachment.content.id = :contentId
    and lower(attachment.fileName) = :fileName    (この行の lower を rs_lower に置換してください)
    and attachment.attachmentVersion = :version
]]></query>
<query name="confluence.attachment_findLatestByContentAndFileName"><![CDATA[
    from Attachment attachment
    where attachment.content.id = :contentId
    and lower(attachment.fileName) = :fileName    (この行の lower を rs_lower に置換してください)
    and attachment.originalVersion is null
]]></query>

最後に、編集したファイルをConfluenceが参照できるように配置します。

編集したファイルをjarファイルに圧縮する必要はありません。
以下のように  <Confluence インストールディレクトリ>\confluence\WEB-INF\classes\com\atlassian\confluence\pages ディレクトリを作成し、ファイルを配置することでConfluenceが参照するようになります。

手順5 設定内容の反映

設定の変更を有効にするために、Confluence を起動します。
Windowsのコントロールパネルから「システムとセキュリティ」→「管理ツール」→「サービス」を起動します。
サービスの一覧からAtlassian Confluence を選択し、すでに開始しているときはツールバーの再起動ボタンをクリックします。開始していないときは、ツールバーの起動ボタンをクリックします。

対応結果確認

再現手順と同様に、ファイル名に全角アルファベット大文字、ローマ数字を含むファイルを添付します。

エラーなどが発生せず、添付ファイルのリストにファイルが表示され、内容を参照できれば対応完了です。 


  • No labels

This page has no comments.