ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server XMLのプログラミング
11gリリース1 (10.3.6)
B55533-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

7 XMLプログラミング手法

次の項では、XMLデータを処理するJava EEアプリケーションを開発するための特定のXMLプログラミング手法について説明します。

JavaクライアントとWebLogic Serverとの間でのXMLデータの転送

一般的なJava EEアプリケーションでは、クライアント・アプリケーションは、XMLデータを処理するサーブレットまたはJSPにXMLデータを送信します。次に、サーブレットまたはJSPは、そのデータをJMS宛先やEJBなどの別のJava EEコンポーネントに送信するか、または処理したXMLデータを別のXMLドキュメントの形でクライアントに返します。

JavaクライアントからWebLogic ServerにホストされたサーブレットまたはJSPにXMLデータを送信し、クライアントにデータが返されるようにするには、java.net.URLConnectionクラスを使用します。このクラスは、アプリケーションとURL (この場合は、サーブレットまたはJSPを呼び出すURL)の間の通信リンクを表します。URLConnectionクラスのインスタンスは、HTTP POSTメソッドを使用してXMLドキュメントを送信します。

WebLogic XMLサンプルから抜粋した次のJavaクライアント・プログラムは、プログラムとJSPの間でXMLデータを転送する方法を示しています。

import java.net.*;
import java.io.*;
import java.util.*;
public class Client {
  public static void main(String[] args) throws Exception {
    if (args.length < 2) {
      System.out.println("Usage:  java examples.xml.Client URL Filename");
    }
    else {
      try {
        URL url = new URL(args[0]);
        String document = args[1];
        FileReader fr = new FileReader(document);
        char[] buffer = new char[1024*10];
        int bytes_read = 0;
        if ((bytes_read = fr.read(buffer)) != -1)
          {
            URLConnection urlc = url.openConnection();
            urlc.setRequestProperty("Content-Type","text/xml");
            urlc.setDoOutput(true);
            urlc.setDoInput(true);
            PrintWriter pw = new PrintWriter(urlc.getOutputStream());
            // send xml to jsp
            pw.write(buffer, 0, bytes_read);
            pw.close();
            BufferedReader in = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
            String inputLine;
            while ((inputLine = in.readLine()) != null)
                      System.out.println(inputLine);
            in.close();
            }              
          }
          catch (Exception e) {
          e.printStackTrace();
          }
       }
    }
}

この例では、引数リストからのURLを使用してJSPへのURL接続をオープンし、その接続から出力ストリームを取得し、引数リストに指定されたXMLドキュメントを出力ストリームに出力して、XMLデータをJSPに送信する方法を示しています。次に、URLConnectionクラスのgetInputStream()メソッドを使用して、JSAPがクライアント・アプリケーションに返すXMLデータを読み取る方法の例を示します。

サンプルJSPから抜粋した次のコード・セグメントでは、JSPがクライアント・アプリケーションからXMLデータを受信し、XMLドキュメントを解析して、XMLデータを返す方法を示しています。

BufferedReader br = new BufferedReader(request.getReader());
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
DocumentBuilder db = fact.newDocumentBuilder();
Document doc = db.parse(new InputSource(br));
...
PrintWriter responseWriter = response.getWriter();
responseWriter.println("<?xml version='1.0'?>");

...

WebLogicサーブレットとJSPのプログラミングの詳細は、『Oracle WebLogic Server Webアプリケーション、サーブレット、JSPの開発』を参照してください。

JMSアプリケーションでのXMLドキュメントの処理

WebLogic Serverは、JMSアプリケーションでXMLドキュメントを処理するために一部のJava Message Service (JMS)クラスに対して次の拡張を提供しています。

より一般的なTextMessageクラスではなく、XMLMessageクラスを使用して、JMSアプリケーションでXMLドキュメントを送受信する場合、XML固有のメッセージ・セレクタを使用して不要なメッセージをフィルタ処理できます。特に、JMS_BEA_SELECTメソッドを使用すると、XMLドキュメントのXMLフラグメントを検索するためのXPath問合せを指定できます。問合せの結果に基づいて、メッセージ・コンシューマがメッセージを受信しないよう決定することもあります。これにより、ネットワーク・トラフィックを軽減し、JMSアプリケーションのパフォーマンスを向上させることができます。

XMLMessageクラスを使用してJMSアプリケーションにXMLメッセージを含めるには、WLQueueSessionオブジェクトまたはWLTopicSessionオブジェクトのいずれかを作成する必要があります。どちらのオブジェクトを作成するかは、JMS Connectionを作成した後に、汎用オブジェクトQueueSessionまたはTopicSessionではなく、JMSキューまたはトピックを使用するかどうかによります。次に、WLSessionインタフェースのcreateXMLMessage()メソッドを使用してXMLMessageオブジェクトを作成します。

JMSアプリケーションでのXMLMessageオブジェクトの使用方法については、『Oracle WebLogic Server JMSのプログラミング』を参照してください。

HTTPインタフェースを持たない外部エンティティへのアクセス

WebLogic Serverは、外部リポジトリにある外部エンティティに、エンティティを返すURLなどのHTTPインタフェースがある限り、その外部エンティティを自動的に取得およびキャッシュできます。XMLレジストリで外部エンティティを構成する際の詳細は、「外部エンティティの構成タスク」を参照してください。

HTTPインタフェースを持たないリポジトリに格納されている外部エンティティにアクセスする場合は、インタフェースを作成する必要があります。たとえば、システムID、パブリックID、DTDのテキストの列を持つデータベース表にXMLドキュメント用のDTDを格納しているとします。WebLogic XMLアプリケーションから外部エンティティとしてDTDにアクセスする場合、JDBCを使用してデータベースのDTDにアクセスするサーブレットを作成できます。

URLでサーブレットを呼び出すので、ここで外部エンティティに対するHTTPインタフェースを持っていることになります。XMLレジストリでエンティティ・レジストリ・エントリを作成する場合、外部エンティティの場所としてサーブレットを呼び出すURLを指定します。WebLogic Serverは、この外部エンティティへの参照を含むXMLドキュメントを解析しているときにサーブレットを呼び出し、サーブレットがデータベースの問合せに内部で使用するパブリックIDおよびシステムIDをサーブレットに渡します。