カテゴリー別アーカイブ: Java

CDATAセクションの取り扱いについて(javax.xml.parsers.DocumentBuilderFactory)

| コメントをどうぞ

CDATAセクションの内容の取得方法がjavax.xml.parsers.DocumentBuilderFactoryに対する設定で違ってくる。
その違いのメモ。

使用したXMLドキュメントは以下の通り。

<?xml version="1.0" encoding="UTF-8"?>
<languages>
    <language name="C">
        <![CDATA[
            #include stdin.h
            int main void(0) {
                printf("Hello, world!");
                return 0;
            }
        ]]>
    </language>
</languages>

上記XMLドキュメントに対し、以下のコードでlanguageノードの内容を確認した。

${true|false}:「true」か「false」を指定する。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setCoalescing(${true|false});

Document doc = factory.newDocumentBuilder().parse(new File(FILE_PATH));
Element root = doc.getDocumentElement();

NodeList languages = root.getElementsByTagName("language");
for (int i = 0, iLen = languages.getLength(); i != iLen; i++) {

    NodeList children = languages.item(i).getChildNodes();
    for (int j = 0, jLen = children.getLength(); j != jLen; j++) {
        Node child = children.item(j);
        System.out.println("node name = " + child.getNodeName());
        System.out.println("node value = " + child.getNodeValue());
        System.out.println();
    }
}

続きを読む

Tomcat の PUTメソッドが息をしていない問題

| コメントをどうぞ

あけましておめでとうございます。
本年も有為無為に関わらず書き散らかしていく所存にございます。
生暖かい眼差しでお付き合いいただければと思います。
どうぞよろしくお願いいたします。
DiceK Mikamiです。

さて突然なのですが、アプリケーションサーバにTomcatを利用していると、たまにとんでもない大穴にはまったりします。
今回はそんなお話です。
続きを読む

JAXBによるRSSフィードの作成の略解

| コメントをどうぞ

javax.xml.bind.JAXBを使用したRSSフィードの作成方法です。

今回の期待値は次の通りです。

<rss version="バージョン">
    <channel>
        <title> タイトル </title>
        <description> 説明 </description>
        <link> URL </link>

        <item>
            <title> 記事タイトル </title>
            <description> 記事本文 </description>
        </item>
    </channel>
</rss>

続きを読む

java.util.Scannerクラスで構文解析を行ってみた。

| コメントをどうぞ

とある作業でREST APIを作成していたのですが、リクエストからいくつかの条件を受けてDBの値を検索するような仕組みが必要となりました。
ごく単純に実装するのであれば、以下の例のような感じで実装すれば良いかと思います。

例: ユーザーを名前で検索するような場合のエンドポイントとパラメータの場合
GET http://www.example.com/user?name=xxxx

・・・が。

しかし、上記の例では名前の完全一致で検索する場合はよいですが、

  • 前方一致、中間一致、後方一致についてはどうする?
  • 検索の条件値がnullや空文字列の場合は?
  • 複数の条件を ANDまたはOR条件で結合する場合は?
    などなど、アプリケーションでの要求仕様によりますがいかにも汎用性がありません。

そこでもっと汎用性を持たせたるためにGoogle AppsのAPIよろしく、

type=user and name like '%abc%' or name like '%def%'

というようなクエリ文字列をリクエストパラメータとして利用することにしました。

ただ、このような場合、送信されてきたクエリ文字列を解析し、検索対象パラメータ、演算子および検索対象値を正確に抽出する必要があります。
Javaの場合、高度な解析が必要なのであればBNFで構文を定義し、JavaCCにより解析プログラムを作成することになるのでしょうが、今回はより簡易的に実装を行うためjava.util.Scannerクラスを利用した実装例を紹介します。

続きを読む

AWS RDS上のOracle XML DBに複数のxmlデータを投入する

| コメントをどうぞ

前記事 AWS RDS上のOracle XML DBにxmlデータを投入し、参照する の投入のサンプルアプリを改造し、複数のxmlデータを投入するツールを作成した。これでxmlデータを投入し、後日クエリーの検証を行います。
続きを読む