tohokuaikiのチラシの裏

技術的ネタとか。

2014-01-01から1年間の記事一覧

SaxonでDTDチェックする

本来はこういう使い方はしないんだろうけど、SaxonをDTDバリデータとして使ってみる。Saxonは8.7. // 対象となるXML String xml = "<xsl:stylesheet version=\"2.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"></xsl:stylesheet>"; try { StreamSource xslSource = …

XSLTのoutput要素では変数を使えないが、result-documentでは変数を使える件

Saxon-bの9あたりで。XSLTを <xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" doctype-system="{$dtd_path}"/> って書くと、 ってまんまでちゃうのに、 <xsl:template match="/"> </xsl:template></xsl:output>

SaxonでJavaのAPIを通してパラメータを渡す方法

Javaのコード内の変数をXSLスタイルシートに渡す方法を調べた。参考ページ パラメータを使った値の受渡し Saxon 9.2 / Java / XSLT: setting transformer parameters using setParameters() - Stack Overflow Java側の設定 TransformerのsetParameterメソッ…

Confluenceプラグインのコード内でpageManagerとかbandanaManagerとかを取得する方法

各種Manager系Objectが取れないと話にならないですよねーってことで。 Servletプラグイン編 servletプラグインの場合は、コンストラクタに書く。 書いておいて当たればSpringの方で適当にInjectionしてくれる。 public class HogehogeServlet extends HttpSe…

ConfluenceのPlugin作成で一時データを取っておきたいときの方法 - ContentPropertyManagerとBandanaManager

Confluenceでデータを取っておきたい方法について。2つある。ContentPropertyManagerとBandanaManager。*1 参考ページ Persistence in Confluence - Atlassian Developers Developing a Confluence Plugin « Luminis Software Development基本的にどちらも、…

dom4jでバリデーションを効かせたくないのでいろいろやった結果

いちいちhttpでDTD取ってこられると大変なので、ローカルに置いたものでValidationしてほしいわけで。ところがDOCTYPEの書き換えをしようとする際にもこのDTDバリデーションをしてしまってては意味がないわけでして。 dom4jのDocumentみると dom4j - Frequen…

MySQLでsubstring(from_unixtime(created_at), 1, 10)したらハマった話

MySQL5.1で。なんか、以前は大丈夫だったんだけど…的な。 SELECT substring( now( ) , 1, 10 ) ってやると、323031342d30362d3330 とか出る。なんだろう?と思ってたら型変換しないとダメっぽい。 SELECT cast(substring(now(), 1, 10) as date) みたいにす…

Confluenceのプラグイン作成でファイル添付周りのコードを書く際に参考になりそうなところのメモ

AttachmentManagerかと思いきや、それを単純に使っただけではどうもよろしくない。 どうよろしくないかというと、 public static void attachFile(AttachmentManager am, ContentEntityObject page, String temp_file_path, String fileName, String comment…

Confluenceのプラグイン作成における国際化

設置するファイル 言語ファイルは、I18N Architecture - Confluence Development - Atlassian Developer Documentationにあるように各ロケールごとに作成する。 サンプルとして、 /com/atlassian/confluence/core/ConfluenceActionSupport_.properties /com/…

XSLのブロガーtmakitaさんのXSL記事を一覧で

XSLについて調べてると半分くらいの確率でtmakitaのブログ - Yahoo!ブログに出会う。で、ものすごく参考になることも書いてあるのだけど、Yahoo!ブログがいかんせんものすごく読みづらく、過去記事のリスト表示さえ満足にしてくれないので*1、下記に一覧した…

XSLTの疑問とその回答(1)

XSLについて色々と習ったことを一覧で。 applly-templatesでテンプレートが競合する場合 テンプレートの適用には、優先順位がある。 優先順位が最終的に決められないとエラーになる。 優先順位は、テンプレートの記述順ではない 優先順位を決めるには、より…

Confluenceのプラグイン作成で自前のInterceptorを使うようにする

ConfluenceのXWorkによるプラグイン作成における値チェック(Validator)の方法が少なくてガッカリした - tohokuaikiのチラシの裏とか書いたけど、自前のInterceptorを追加できればいいわけで。 で、この記事がピッタリ参考になった。 Can we expand intercept…

JavaでZIPファイルの一覧を取得しようとしたら日本語ファイル名が文字化けしたので悩んだ件

原因 java.util.zip.ZipFileは、ZIPファイルのファイル名がUTF-8であるとして処理される。そこで、 Javaのマニアじゃない入門の「ZipFileクラスを使う」を使ったら日本語がダメになってしまった。*1 対策 java.util.zip.ZipFileではなく、org.apache.tools.z…

Confluenceのプラグイン作成で使えそうな環境変数の取得

気が付き次第ここに追加する。 Confluenceのデータディレクトリからのパス confluence-project/confluence-core/confluence/src/java/com/atlassian/confluence/util/ConfluenceHomeGlobalConstants.java に記載されている。 package com.atlassian.confluen…

ConfluenceのプラグインでXWork/WebWork2の仕組みを使ったときのボタンによるAction先の制御

ConfluenceのバンドルしてるXWorkでは、サブミットボタンの名称によるAction先の変更はできないようだ。なんとなく、 <input type="submit" name="Top_Action" value="トップへ"/> とすると、Top_Actionに関連付けられたActionになるのかなと思いきや、そうではない。実際には、2方向しか移動ができないみたい。 進む …

ConfluenceのXWorkによるプラグイン作成における値チェック(Validator)の方法が少なくてガッカリした

基本的な使い方 atlassian-plugin.xml にて、インターセプターでActionに対してvalidatingStackにしておく。 <package name="jpages" extends="default" namespace="/pages"> <default-interceptor-ref name="validatingStack"/> </default-interceptor-ref></package>

Confluenceのプラグイン作成で、ページベースの画面を作る

タイトルだけだとなんのこっちゃって感じですが。。。 一番わかりやすいのは、Wordのインポート機能のページかと思います。ページを表示しているときに右上の「Tools」からプルダウンで出てくるやつ。 これって、左側のページメニューやスペースへのアクセス…

Confluenceのプラグイン作成におけるCSRF対策

ConfluenceのプラグインでXWork/WebWork2の仕組みを使ってプログラムを書く(3) - tohokuaikiのチラシの裏でもちらっと書いたけど、トークン、あるいはチケットといわれるものの埋め込みですね。参考資料はこちら。CSRF対策なんだからActionクラス使うよねっ…

Confluenceのプラグイン作成 XWork/WebWork2でセッションを使う

Actionクラスの中でHTTPセッションを使いたい場合。PHPで言えば、$_SESSION Confluenceはログイン基本なので、Actionクラスの中ではデフォルトでセッションが始まっている。COOKIE名がJSESSIONIDというやつ。これは匿名ユーザーにももちろん張られている。な…

ConfluenceのプラグインでXWork/WebWork2の仕組みを使ってプログラムを書く(3)

実際に、Actionを定義して書いてみる。 参考にするもの 参考にするのは、Confluence自体のソースコード。 ソースコードは下記からダウンロードできる。*1 https://my.atlassian.com/download/source/confluence たとえば スケジュールされたのJob一覧を見るA…

ConfluenceのVelocityテンプレートで使えるカスタムタグについて

ConfluenceのVelocityテンプレートは、Sitemeshというデコレータによりパワーアップされているらしい。ちなみに、SiteMeshはOpenSymphonyというJavaの結構すごい大規模なプロジェクトの1つだったのだが全体としてのOpenSymphonyは既に4年くらい前に終了し、…

Struts2について読む記事

CodeZine Struts 2入門(1)~基本形で理解する仕組みと構造~ (1/4):CodeZine Struts 2入門(1)~基本形で理解する仕組みと構造~ (2/4):CodeZine Struts 2入門(1)~基本形で理解する仕組みと構造~ (3/4):CodeZine Struts 2入門(1)~基本形…

Confluenceのプラグインで、Confluenceの各種情報を取得したりする方法

ServletやXWorkのActionからConfluenceのページ情報やスペース情報などを取得したい場合には、各種Managerを使う。このあたりの方法が、Accessing Confluence Components from Plugin Modules - Confluence Development - Atlassian Developer Documentation…

ConfluenceのプラグインでXWork/WebWork2の仕組みを使ってComplex Parametersを使う時の注意点

前回ConfluenceのプラグインでXWork/WebWork2の仕組みを使ってプログラムを書く(1) - tohokuaikiのチラシの裏の続き。もう少し細かい設定については、XWork Plugin Complex Parameters and Security - Confluence Development - Atlassian Developer Documen…

ConfluenceのプラグインでXWork/WebWork2の仕組みを使ってプログラムを書く

純粋に情報を表示させるだけの目的であれば、servletプラグインだけで十分だがフォームを使ってデータの入出力をさせる場合はWebフレームワークを使わないといろいろと面倒で仕方がない。Confluence(というかAtlassianApplication群?)では、XWork/WebWork…

Confluenceのプラグインでフォームを含む管理画面を作ること(1)

フォームを扱う場合、一般的にはフレームワークを使うと楽なので生では使いたくないのですが、Confluenceのプラグインでもそのような方法があるみたい。 Creating an Admin Configuration Form - Documentation - Atlassian Developer Documentation のチュ…

Confluenceプラグインでcomponent-importを忘れてはまった件

もー、ホントに下らない件ではまってしまった。。。自分も、Confluenceのプラグインを作ってみる(7) Atlassian Templateを使ってみる - tohokuaikiのチラシの裏で書いてるのに、理解してなかったからはまってしまった。おさらい。UnsatisfiedDependencyExcep…

ConfluenceのPlugin作成でテンプレートを使う際の種類分け

Confluenceのプラグインを作ってみるメモ(5) Servletを使えるようにする - tohokuaikiのチラシの裏 の続きHTMLテンプレートのメタタグでなどと指定すると、テンプレートの周りを変えることができる。 参照ページ: https://developer.atlassian.com/display/…

ConfluenceのXHTML(保存形式)のマクロの保存形式の変更におけるマニアックな話

自分用メモConfluenceは4から5になった際に*1マクロの保存形式にからタグを使うようになった。保存形式って、ページのツール>保存形式を見るで見られるやつ。 Confluence4 <ac:macro ac:name="include"><ac:default-parameter>ページタイトル</ac:default-parameter></ac:macro> Confluence5 <ac:structured-macro ac:name="include"><ac:parameter ac:name=""><ac:link></ac:link></ac:parameter></ac:structured-macro>

ConfluenceにおけるJavaScriptテンプレートについて

soyを使ったClosureTemplateが導入される前、JavaScript純粋なテンプレートとしてAJS.template()メソッドがある。参考ページ:Template | AUI Documentation テンプレートの設定 テンプレートのHTMLは<script type="text/x-template">を使う。 <script type="text/x-template" title="template-title"> <div id="foo"> ここに適当なHTMLテンプレートを記述 テンプ</div>…