Oracle® Fusion Middleware Oracle WebLogic Server XMLのプログラミング 11g リリース1 (10.3.5) B55533-03 |
|
前 |
次 |
以下の節では、XMLデータを処理するJ2EEアプリケーションを開発するための特定のXMLプログラミング手法について説明します。
一般的なJ2EEアプリケーションでは、クライアント・アプリケーションは、XMLデータを処理するサーブレットまたはJSPにXMLデータを送信します。次に、サーブレットまたはJSPは、そのデータをJMS宛先やEJBなどの別のJ2EEコンポーネントに送信するか、または処理した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の開発』を参照してください。
WebLogic Serverは、JMSアプリケーションでXMLドキュメントを処理するために一部のJava Message Service (JMS)クラスに対して次の拡張を提供しています。
weblogic.jms.extensions.WLSession
。JMSクラスjavax.jms.Session
を拡張します。
weblogic.jms.extensions.WLQueueSession
。JMSクラスjavax.jms.QueueSession
を拡張します。
weblogic.jms.extensions.WLTopicSession
。JMSクラスjavax.jms.TopicSession
を拡張します。
weblogic.jms.extensions.XMLMessage
。JMSクラスjavax.jms.TextMessage
を拡張します。
より一般的な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のプログラミング』を参照してください。
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をサーブレットに渡します。