ORACLE JAPAN Server Release 6.1

 

  |  

  WebLogic Server ホーム   |     Web サービス   |   前へ   |   次へ   |   目次   |   索引   |   PDF 版

WSDL ファイルを使用しない Web サービスの呼び出し

 

この付録では、WebLogic Web サービスを呼び出すときに WSDL ファイルを使用しない動的クライアント アプリケーションの例を示します。この例では特に、メッセージ スタイル Web サービスを呼び出して、データを WebLogic Server に送信します。

Web サービスの WSDL を使用しない動的クライアント アプリケーションは、すべてにおいて動的です。これは Web サービスのインタフェース、または戻り値およびパラメータの JavaBean インタフェースのいずれか、あるいは Web サービスを構成するメソッドの数およびシグネチャが不明でも Web サービスを呼び出すことができることによります。

この例では、Web サービスの呼び出しに URL http://www.myHost.com:7001/msg/sendMsg を使用します。この例では Web サービスの WSDL を使用しない動的クライアント アプリケーションを示しているので、前述の URL は Web サービスの WSDL ではなく、Web サービス自体を表します。

例の後の手順では、このクライアントを作成するために実行する基本手順の一部として、例に関連する節について説明します。

import java.util.Properties;
import java.net.URL;
import javax.naming.Context;
import javax.naming.InitialContext;

import weblogic.soap.WebServiceProxy;
import weblogic.soap.SoapMethod;
import weblogic.soap.SoapType;
import weblogic.soap.codec.CodecFactory;
import weblogic.soap.codec.SoapEncodingCodec;
import weblogic.soap.codec.LiteralCodec;

public class ProducerClient{

public static void main( String[] arg ) throws Exception{

CodecFactory factory = CodecFactory.newInstance();
factory.register( new SoapEncodingCodec() );
factory.register( new LiteralCodec() );

WebServiceProxy proxy = WebServiceProxy.createService(
new URL( "http://www.myHost.com:7001/msg/sendMsg" ) );
proxy.setCodecFactory( factory );
proxy.setVerbose( true );

SoapType param = new SoapType( "message", String.class );
proxy.addMethod( "send", null, new SoapType[]{ param } );
SoapMethod method = proxy.getMethod( "send" );

String toSend = arg.length == 0 ? "No arg to send" : arg[0];
Object result = method.invoke( new Object[]{ toSend } );
}
}

データを WebLogic Server に送信するメッセージ スタイル WebLogic Web サービスの呼び出しに WSDL を使用しない動的 Java クライアントを作成するには、次の手順に従ってください。

  1. WebLogic Web サービスをホストする WebLogic Server から、Java クライアント JAR ファイルを取得します。

    この手順の詳細については、 Java クライアント JAR ファイルの Web サービス ホーム ページからのダウンロードを参照してください。

  2. クライアント コンピュータ上の CLASSPATH に、Java クライアント JAR ファイルを追加します。

  3. クライアント Java プログラムを作成します。次の手順では、Web サービス固有の Java コードについて説明します。

    1. クライアント アプリケーションの main メソッドで、エンコーディング スタイルのファクトリを作成し、WebLogic Server でサポートされる 2 つのスタイル(SOAP エンコーディング スタイルおよび Apache のリテラル XML エンコーディング スタイル)を登録します。

      CodecFactory factory = CodecFactory.newInstance();
      factory.register( new SoapEncodingCodec() );
      factory.register( new LiteralCodec() );

    2. 次の Java コードを追加して Web サービスへの接続を作成し、エンコーディング スタイル ファクトリを設定します。

      WebServiceProxy proxy = WebServiceProxy.createService(
      new URL( "http://www.myHost.com:7001/msg/sendMsg" ) );
      proxy.setCodecFactory( factory );
      proxy.setVerbose( true );

    3. 次の Java コードを追加して、Web サービスの send メソッドを動的に取得します。

      SoapType param = new SoapType( "message", String.class );
      proxy.addMethod( "send", null, new SoapType[]{ param } );
      SoapMethod method = proxy.getMethod( "send" );

    4. send メソッドを呼び出して、データを Web サービスに送信します。この例では、クライアント アプリケーションは単純に最初の引数を受け取って String として送信します。ユーザーが特定の引数を指定しない場合、クライアント アプリケーションでは文字列 No arg to send を送信します。

      String toSend = arg.length == 0 ? "No arg to send" : arg[0];
      Object result = method.invoke( new Object[]{ toSend } );

  4. 通常どおりにクライアント Java プログラムをコンパイルして実行します。

org.w3c.dom.Documentorg.w3c.dom.DocumentFragment、または org.w3c.dom.Element の各データ型をパラメータとして受け付ける send メソッドの使い方を、以下のさらに複雑な例で示します。この例では、send メソッドのこのような考え方に沿ってリテラル エンコーディングを設定する方法を示しています。

import java.util.Properties;

import java.net.URL;
import java.io.File;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import weblogic.apache.xml.serialize.OutputFormat;
import weblogic.apache.xml.serialize.XMLSerializer;

import weblogic.apache.xerces.dom.DocumentImpl;

import weblogic.soap.WebServiceProxy;
import weblogic.soap.SoapMethod;
import weblogic.soap.SoapType;

import weblogic.soap.codec.CodecFactory;
import weblogic.soap.codec.SoapEncodingCodec;
import weblogic.soap.codec.LiteralCodec;

public class ProducerClient{
public static void main(String[] args) throws Exception{
String url = "http://localhost:7001";
// 引数リストを解析する
if (args.length != 2) {
System.out.println("Usage: java examples.webservices.message.ProducerClient http://hostname:port ¥"message¥"");
return;
} else if (args.length == 2) {
url = args[0];
}

CodecFactory factory = CodecFactory.newInstance();
factory.register(new SoapEncodingCodec());
factory.register(new LiteralCodec());

URL newURL = new URL(url + "/msg/sendMsg");

WebServiceProxy proxy = WebServiceProxy.createService(newURL);
proxy.setCodecFactory(factory);
proxy.setVerbose(true);
SoapType param = new SoapType( "message", Document.class );
proxy.addMethod( "send", null, new SoapType[]{ param } );

SoapMethod method = proxy.getMethod("send");

// proxy を出力して、メソッド シグネチャが問題なさそうか確かめる
System.out.println("Proxy:"+proxy);

DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
// ファクトリから DocumentBuilder のインスタンスを取得する
DocumentBuilder db = dbf.newDocumentBuilder();
// ドキュメントを解析する
Document w3cDoc = db.parse(new File("/test/fdr_nodtd.xml"));

//Class parserClass = Class.forName("org.jdom.adapters.XercesDOMAdapter");
//DOMAdapter da = (DOMAdapter)parserClass.newInstance();
//Document w3cDoc = da.getDocument(new File("/test/fdr_nodtd.xml"),false);

// XML を出力して、ドキュメントが正常に読み込まれたかどうか確かめる
OutputFormat of = new OutputFormat();
of.setEncoding("UTF-8");
of.setLineWidth(40);
of.setIndent(4);
XMLSerializer xs = new XMLSerializer(System.out,of);
xs.serialize(w3cDoc);

System.out.println("Before Invoke");
Object result = method.invoke( new Object[]{w3cDoc} );
System.out.println("Done");
}
}

 

back to top previous page next page