Apcoordinator ユーザーズガイド
目次 前ページ次ページ

第5部 Webサービスの開発> 第28章 SOAPサーバアプリケーションの開発

28.8 Apcoordinator以外のSOAPクライアントからのサービスの呼び出し

SOAPメッセージングAPIを利用することで、Apcoordinator以外のSOAPクライアントからサービスを呼び出すことが可能です。
SOAPメッセージングAPIを利用してApcoordinatorで作成したSOAPサーバアプリケーションを呼び出す場合には、次のスキルを有していることを推奨します。

■送信データについて

SOAP EnvelopeのBodyは下記のフォーマットで作成して下さい。
<soapenv:Body>
 <dispatch xmlns="urn:fujitsu-apcoordinator-soap">
  <verb>コマンド</verb>
  <root>
   <data>データ</data>
  </root>
 </dispatch>
</soapenv:Body>
(注)Body要素の名前空間接頭辞"soapenv"のURIには"http://schemas.xmlsoap.org/soap/envelope/"を指定してください。通常はSOAPライブラリが自動的に付けます。
注意
上記の例では見易さのために改行、インデントを挿入しています。SOAPメッセージングAPIを利用した場合、改行およびインデントは挿入されません。

■受信データについて

SOAPメッセージングAPIを利用して、Apcoordinatorで作成したSOAPサーバアプリケーションを呼び出した場合、返却されたXMLデータBeanのルート要素が<Body>直下に 挿入されて返却されます。
<soapenv:Body>
 <root>
  <data>データ</data>
 </root>
</soapenv:Body>
上記の例では、 <root>が返却されたXMLデータBeanのルート要素です。
また、nullが返却された場合や、XMLデータが設定されていないXMLデータBeanが返却された場合は、次のように返却されます。
SOAPサーバアプリケーションからnullが返却された場合
<soapenv:Body>
 <XmlDataBean_NULL/>
</soapenv:Body>
SOAPサーバアプリケーションからXMLデータが設定されていないXMLデータBeanが返却された場合
<soapenv:Body>
 <XmlDataBean_NODATA/>
</soapenv:Body>
注意
上記の例では見易さのために改行、インデントを挿入しています。SOAPメッセージングAPIを利用した場合、改行およびインデントは挿入されません。

■呼び出し例

ここでは、Interstageを利用してサービスを呼び出す場合の例を次に示します。
Apacheを利用してサービスを呼び出す場合は、Apache SOAPのマニュアルを参照してください。 また、Interstage SOAPのAPIの詳細は"Interstage Application Server SOAPサービス ユーザーズガイド"を参照してください。
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPPart;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPConnectionFactory;

...

public void send() throws SOAPException{
  // SOAPConnectionのインスタンスを生成します
  SOAPConnectionFactory connFactory = SOAPConnectionFactory.newInstance();
  SOAPConnection conn = connFactory.createConnection();
  
  // SOAPBodyを生成します
  MessageFactory mesgFactory = MessageFactory.newInstance();
  SOAPMessage message = mesgFactory.createMessage();
  SOAPPart part = message.getSOAPPart();
  SOAPEnvelope env = part.getEnvelope();
  SOAPBody body = env.getBody();
  
  // SOAPBodyに送信データを設定します
  Name bodyRoot = env.createName("dispatch",null,"urn:fujitsu-apcoordinator-soap");
  SOAPBodyElement elt = body.addBodyElement(bodyRoot);
  Name verb = env.createName("verb");
  Name xml = env.createName("root");
  Name data = env.createName("data");
  elt.addChildElement(verb).addTextNode("command");
  elt.addChildElement(xml).addChildElement(data).addTextNode("text");
  message.saveChanges();
  
  // メッセージを送信し、レスポンスを受信します。
  SOAPMessage resMessage = conn.call(message,"http://SoapHost/soap/servlet/WSContainer");
  conn.close();
}

目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2000-2005