SophiaFramework 4.0 − WSDL / SOAP / XML 搭載 −
TCP ソケットを扱う SFXTCPSocket ( SSL 対応 ) やファイルを扱う SFXFile など、ネットワークとファイルのクラスについて、BREW API を意識せずに、 ストリームを使って抽象的にプログラミングできるようになりました。
また、XML パーサーである SFXXMLDOMParser と SFXXMLSAXParser や、SOAP 通信の SFXSOAPParser などの XML ミドルウェアを搭載し、モバイル Web2.0 に対応しました。 BREW では、世界初となる WSDL 機能 SFXSOAPServiceProxy ( HTTPS 対応 ) が利用可能になりました。
プレスリリース(2006/8/8) : BREWアプリ開発環境SophiaFrameworkを4.0にバージョンアップ
SophiaFramework 4.0 新着情報
2006/12/15、SophiaFramework 4.0.4 リリース
GETAPPINSTANCE() 関数を使用する BREW エクステンションも利用可能になりました。…
2006/11/10、SophiaFramework 4.0.3 リリース
UTF-8、EUC-JP、Shift_JIS などのエンコーディングと文字コード変換をサポートするクラスを追加しました。 リングバッファサイズを意識せずに読み書きできるようにストリームを機能拡張しました。…
2006/10/06、SophiaFramework 4.0.2 リリース
SOAP 通信 と WSDL 関連クラスが HTTPS に対応し、セキュアな Web サービスが実現可能となりました。
SophiaFramework 4.0.2 リリースノート /
SophiaFramework XML for BREW
2006/10/06、HTTPS対応 セキュア Web サービスなど、サンプルコード公開
HTTPS 対応 セキュア Web サービス、UDP ソケット通信プログラミング、POP3 / SMTP メール送受信処理のサンプルコードを公開しました。
2006/09/29、SSL ソケット通信プログラミング、サンプルコード公開
SSL 処理をシンプルに記述できる SSL ソケットクラス のサンプルコードを公開しました。
※ SSL : Secure Socket Layer の略。情報を暗号化して送受信するためのインターネットプロトコル。
2006/08/08、SophiaFramework を 4.0 にバージョンアップ
世界で初めて、Web サービスへの WSDL でのアクセスを可能にする XML ミドルウェアを搭載しました。
SophiaFramework 4.0 新機能解説
SophiaFramework 3.0 では、ネットワークやファイルの操作で BREW API に依存せざるを得ない場合がありました。
例えば、ファイルの削除やリネーム、ディレクトリの列挙、ホスト名から IP アドレスへの変換は、 C++ ラッパー経由で明示的に BREW API にアクセスしなければいけませんでした。
SophiaFramework 4.0 では、ネットワークやファイルの操作に関して、 BREW API を意識することなく、ストリームを使ってデバイス非依存の抽象的なプログラミングが可能になりました。
さらに DOM / SAX をサポートする XML パーサー、SOAP RPC を含む SOAP 通信、WSDL のサポートなど、 Web サービス にアクセスする BREW アプリを開発するのに必要な XML 関連のクラスがラインナップされました。
SophiaFramework 4.0 : 主な変更点
- 59 個の新しいクラスの追加
- 総コード量 127951 行中、新しいクラスは 37958 行(C++ 言語)
- RVCTB 用メイクファイル自動生成ツールの追加
新しいクラス
- SFXStorage (旧 SFUStream)
- SFXMemory (旧 SFUMemoryStream)
- SFXSource (旧 SFUSourceStream)
- SFXFile (旧 SFUFileStream)
- SFXDirectory
- SFXPath
- SFXTCPSocket (旧 SFUNetworkStream)
- SFXUDPSocket (旧 SFUNetworkStream)
- SFXInetAddress (旧 SFUHostResolver)
- SFXSocketAddress (旧 SFUIPEndpoint)
- SFXInputStream
- SFXOutputStream
- SFXStreamWriter
- SFXStreamReader
- SFXBinaryStream (旧 SFUStream)
- SFXBinaryStreamWriter (旧 SFUStream)
- SFXBinaryStreamReader (旧 SFUStream)
- SFXStringStream
- SFXAnsiStringStreamWriter
- SFXAnsiStringStreamReader
- SFXWideStringStreamWriter
- SFXWideStringStreamReader
- SFXCallback
- SFXTask
- SFXTimer
- SFXHTTPConnection (旧 SFUHttpConnection)
- SFXSMTP (旧 SFUSmtp)
- SFXSMTPSender (旧 SFUSmtpSender)
- SFXPOP3 (旧 SFUPop3)
- SFXPOP3Receiver (旧 SFUPop3Receiver)
- SFXMailField (旧 SFUMailField)
- SFXMailMessage (旧 SFUMailMessage)
- SFXMailUtility (旧 SFUMailUtil, SFUBase64, SFUQuotedPrintable)
- SFXDTDGrammer
- SFXSchemaGrammer
- SFXSOAPParser
- SFXSOAPRPC
- SFXSOAPServiceProxy
- SFXSOAPWriter
- SFXXMLAttribute
- SFXXMLCDATASection
- SFXXMLComment
- SFXXMLDefaultHandler
- SFXXMLDocument
- SFXXMLDocumentFragment
- SFXXMLDocumentType
- SFXXMLDOMParser
- SFXXMLElement
- SFXXMLEntity
- SFXXMLEntityReference
- SFXXMLGrammer
- SFXXMLNode
- SFXXMLNotation
- SFXXMLProcessingInstruction
- SFXXMLReader
- SFXXMLSAXParser
- SFXXMLScanner
- SFXXMLText
- SFXXSDDOMParser
新しいクラスの効用
SFXStorage
SFXFile, SFXTCPSocket クラスなどのストレージクラスを表すインターフェースクラスです。
SFXMemory
メモリに対してのデータ読み書き機能を提供します。
SFXSource
SFBSource クラスを SFXStorage クラスに対応させるラップクラスです。SFBSource からのデータ読み込み機能を提供します。
SFXFile
ファイルに対してのデータ読み書き機能やファイルの生成・削除・リネームなどの機能を提供します。
SophiaFramework 4.0 サンプルコード
SFXPath path("/sample.txt");
SFXFile file;
SFXAnsiStringStreamWriter writer;
SFXDate date(0);
// ファイル作成日の取得
SFXFile::GetCreateDate(path, &date);
// 日時の書式出力
TRACE("create = %s", date.Format("YYYY/MM/DD hh:mm:ss (Wek)").GetCString());
// ファイルの削除
SFXFile::Remove(path);
// ファイルの新規作成と書き込み
file.OpenReadWrite(path);
file.GetStreamWriter(1024, &writer);
writer << "sophiaframework";
writer.Flush();
file.Close();
SophiaFramework 3.0 サンプルコード
SFXAnsiString path("/sample.txt");
SFBFileMgrSmp fileMgr;
SFUFileStream file;
AEEFileInfo info = {0};
SFXDate date(0);
// SFBFileMgr インスタンスの作成
fileMgr = SFBFileMgr::NewInstance();
// ファイル作成日の取得
fileMgr->GetInfo(path, &info);
// SFXDate 形式に変換
date.Set(info.dwCreationDate + SFXHelper::lacaltimeoffset(null));
// 日時の書式出力
TRACE("create = %s", date.Format("YYYY/MM/DD hh:mm:ss (Wek)").GetCString());
// ファイルの削除
fileMgr->Remove(path);
// ファイルの新規作成と書き込み
file.Open(path, _OFM_READWRITE);
file << "sophiaframework";
file.Flush();
file.Close();
SFXDirectory
ディレクトリの生成・削除・リネームやイテレータを用いたディレクトリ内のファイルの列挙機能などを提供します。
SophiaFramework 4.0 サンプルコード
SFXPath path("/user/admin/apps/");
SFXDirectory::Enumerator en;
// "/user/admin/" が存在する場合に限り apps ディレクトリ作成
SFXDirectory::Create(path, false);
// ディレクトリイテレータの取得
SFXDirectory::GetDirectoryEnumerator(SFXPath::HomeDirectoryPath(), &en);
// イテレータを用いたディレクトリの列挙
while (en.HasNext()) {
path = en.GetNext();
TRACE("dir = %s", path.Get().GetCString());
}
// ファイルイテレータの取得
SFXDirectory::GetFileEnumerator(SFXPath::HomeDirectoryPath(), &en);
// イテレータを用いたファイルの列挙
while (en.HasNext()) {
path = en.GetNext();
TRACE("file = %s", path.Get().GetCString());
}
// ディレクトリを再帰的に強制削除
SFXDirectory::Remove(path, true);
SophiaFramework 3.0 サンプルコード
SFXAnsiString path("/user/admin/apps/");
SFBFileMgrSmp fileMgr;
FileInfo info = {0};
// SFBFileMgr インスタンスの作成
fileMgr = SFBFileMgr::NewInstance();
// "/user/admin/" が存在する場合に限り apps ディレクトリ作成
if (fileMgr->Test("/user/admin/")) {
fileMgr->MkDir(path);
}
// ディレクトリの列挙
fileMgr->EnumInit("/", true);
while (fileMgr->EnumNext(&info)) {
TRACE("dir = %s", info.szName);
}
// ファイルの列挙
fileMgr->EnumInit("/", false);
while (fileMgr->EnumNext(&info)) {
TRACE("dir = %s", info.szName);
}
// ディレクトリを再帰的に強制削除
//
// SFBFileMgr クラスではディレクトリの再起的な
// 強制削除を行うことはできません。
// そのために、数十行の再帰関数を独自に記述する必要があります。
SFXPath
ファイルパスを扱うクラスです。複雑な文字列処理をしなくても、ファイル名や拡張子の変更、親ディレクトリの取得などが行えます。
SophiaFramework 4.0 サンプルコード
SFXPath path;
SFXPath temp;
// 絶対パスの取得
path.Set("/user/admin/log.txt");
TRACE("path = %s", path.GetAbsolute().GetCString());
// 親ディレクトリの取得
temp = path.GetParentPath();
TRACE("parent = %s", temp.GetAbsolute().GetCString());
// 拡張子が ".txt" かどうか調べて ".html" に変更
if (path.GetExtension("txt")) {
path.SetExtension("html");
TRACE("path = %s", path.GetAbsolute().GetCString());
}
// 複雑なパスの設定
path.Set("/user/admin/log/../../guest/./log.txt");
TRACE("path = %s", path.GetAbsolute().GetCString());
// 複雑なパスを正規化
temp = path.NormalizePath();
TRACE("normalize = %s", temp.GetAbsolute().GetCString());
SFXTCPSocket
TCP ソケットに対してのデータの読み書き機能を提供します。また、サーバソケット機能にも対応しています。(利用できるかどうかは実機に依存)
SophiaFramework 4.0 サンプルコード
// クラス変数
SFXTCPSocket _socket;
SFXAnsiStringStreamWriter _writer;
SFXAnsiStringStreamReader _reader;
CHelloWorld::CHelloWorld(Void) static_throws
{
SFXSocketAddress host("www.s-cradle.com:80");
// ソケットをオープン
_socket.Open();
// www.s-cradle.com:80 に接続
// ホスト名は自動的に解決される
_socket.Connect(host, CALLBACK_FUNCTION(OnConnect));
return;
}
CALLBACK_IMPLEMENT_SFXTCPSOCKET(CHelloWorld, OnConnect, error)
{
// SFXAnsiStringStreamWriter をリングバッファ 1024 バイトで取得
_socket.GetStreamWriter(1024, &_writer);
// リングバッファにデータを書き込む
_writer << "GET / HTTP/1.0\r\n";
// データを送信
_writer.Flush(CALLBACK_FUNCTION(OnFlush));
return;
}
CALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMWRITER(CHelloWorld, OnFlush, error)
{
// 送信が終わったので SFXAnsiStringStreamWriter を解放
_writer.Release();
// SFXAnsiStringStreamReader をリングバッファ 1024 バイトで取得
_socket.GetStreamReader(1024, &_reader);
// データを受信
_reader.Fetch(CALLBACK_FUNCTION(OnFetch));
return;
}
CALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMREADER(CHelloWorld, OnFetch, error)
{
SFXAnsiString str;
// リングバッファからデータを読み込む
_reader >> str;
// 応答を表示
TRACE("%s", str.GetCString());
// 受信が終わったので SFXAnsiStringStreamReader を解放
_reader.Release();
// ソケットをクローズ
_socket.Close();
return;
}
SophiaFramework 3.0 サンプルコード
// クラス変数
SFUNetworkStream _net;
SFXAnsiString _str;
CHelloWorld::CHelloWorld(Void) static_throws
{
SFUIPEndpoint host("216.239.39.99:80");
// 216.239.39.99:80 に接続
//
// SFUNetworkStream クラスはホスト名の解決を行わないので
// ホスト名で指定するときは、SFBNetMgr クラスを使用して
// 独自にホスト名を解決しておかなければならない。
_socket.Open(endpoint, AEE_SOCK_STREAM, OnNotifyEntry, this);
return;
}
Void CHelloWorld::OnNotifyEntry(SFUNetworkStream::NotifyEnum notify, VoidPtr data, SFCError error)
{
static_cast<CHelloWorldPtr>(data)->OnNotify(notify, error);
}
Void CHelloWorld::OnNotify(SFUNetworkStream::NotifyEnum notify, SFCError error)
{
SFXAnsiString temp;
SInt32 length;
switch (notify) {
case SFUNetworkStream::NOTIFY_CONNECT:
// データを書き込む
_net << "GET / HTTP/1.0\r\n";
// データを送信
_net.Flush();
break;
case SFUNetworkStream::NOTIFY_WRITE:
// データを受信
_net.Fetch();
break;
case SFUNetworkStream::NOTIFY_READ:
// 受信データが存在すればクラス変数に代入
if ((length = _net->Available()) > 0) {
temp.SetLength(length);
_net->Get(temp.GetBuffer(), length);
_str << temp;
}
// さらに受信可能なデータが存在するか確認
if (_net->IsFetchable()) {
// データを受信
_net->Fetch();
}
// 通信が終了したか確認
else if (_net->IsEOS()) {
// 応答を表示
TRACE("%s", _str.GetCString());
// クローズ
_net.Close();
}
break;
}
}
SFXUDPSocket
UDP ソケットに対してのデータを読み書きする機能を提供します。
SFXInetAddress
ホスト名や IP アドレスを扱うクラスです。このクラスを利用するとホスト名から IP アドレスを取得することが可能です。一つのホストに対して複数個の IP アドレスにも対応しています。
SophiaFramework 4.0 サンプルコード → SFXSocketAddress を参照
SFXSocketAddress
ホスト名や IP アドレスに加えてポート番号を扱うクラスです。このクラスを利用するとホスト名から IP アドレスを取得することが可能です。一つのホストに対して複数個の IP アドレスにも対応しています。
SophiaFramework 4.0 サンプルコード
// SFXTCPSocket を使う場合、ホスト解決は自動で行われるので、
// 以下のコードを書く必要はありません。
// クラス変数
SFXSocketAddress _socket;
CHelloWorld::CHelloWorld(Void) static_throws
{
// ホストを設定
_socket.Set("www.s-cradle.com:8080");
// 解決済みの IP アドレスの個数を取得
TRACE("ip count = %d", _socket.GetCount());
// ホストを表示
TRACE(" host = %s", _socket.Get().GetCString());
// ホスト名から IP アドレスを解決
_socket.Resolve(CALLBACK_FUNCTION(OnResolve));
return;
}
CALLBACK_IMPLEMENT_SFXSOCKETADDRESS(CHelloWorld, OnResolve, error)
{
// 解決済みの IP アドレスの個数を取得
TRACE("ip count = %d", _socket.GetCount());
// ホストを表示
TRACE("host = %s:%d", _socket.GetIP(0).GetCString(), _socket.GetPort());
return;
}
SFXInputStream
読み込みストリームを表すインタフェースクラスです。
SFXOutputStream
書き込みストリームを表すインタフェースクラスです。
SFXStreamWriter
ストレージクラスに対してデータを書き込む機能を提供します。 このクラスを利用するとデータの書き込みを任意のサイズのリングバッファを用いてバッファリングできます。 また、任意のサイズでのデータの出力や、特定のバイナリ列を検出してデータを出力できます。
SophiaFramework 4.0 サンプルコード → SFXTCPSocket を参照
SFXStreamReader
ストレージクラスに対してデータを読み込む機能を提供します。 このクラスを利用するとデータの読み込みを任意のサイズのリングバッファを用いてバッファリングできます。 また、任意のサイズでのデータの取得や、特定のバイナリ列を検出してデータを取得できます。
SophiaFramework 4.0 サンプルコード → SFXTCPSocket を参照
SFXBinaryStream
バイナリストリームを表す抽象クラスです。
SFXBinaryStreamWriter
ストレージクラスに対してバイナリデータを書き込む機能を提供します。 このクラスを利用するとデータをエンディアン変換しながら書き込めます。
SophiaFramework 4.0 サンプルコード
SFXFile file;
SFXBinaryStreamWriter writer;
UInt16 index(10);
// ファイルをオープン
file.OpenReadWrite(SFXPath("/sample.txt"));
// SFXBinaryStreamWriter をリングバッファ 1024 バイトで取得
file.GetStreamWriter(1024, &writer);
// リングバッファにデータを書き込む
writer << index << "abc";
// ファイルへデータを書き出し
writer.Flush();
SFXBinaryStreamReader
ストレージクラスに対してバイナリデータを読み込む機能を提供します。 このクラスを利用するとデータをエンディアン変換しながら読み込めます。
SophiaFramework 4.0 サンプルコード
SFXFile file;
SFXBinaryStreamReader reader;
UInt16 index;
SFXAnsiString str;
// ファイルをオープン
file.OpenReadOnly(SFXPath("/sample.txt"));
// SFXBinaryStreamReader をリングバッファ 1024 バイトで取得
file.GetStreamReader(1024, &reader);
// ファイルからデータを読み込み
reader.Fetch();
// リングバッファからデータを読み込む
reader >> index >> str;
// データを表示
TRACE("index = %d", index);
TRACE("str = %s", str.GetCString());
SFXStringStream
文字列ストリームを表す抽象クラスです。
SFXAnsiStringStreamWriter
ストレージクラスに対して文字列データを書き込む機能を提供します。 このクラスを利用するとデータを文字列化しながら書き込めます。
SophiaFramework 4.0 サンプルコード → SFXTCPSocket を参照
SFXAnsiStringStreamReader
ストレージクラスに対して文字列データを読み込む機能を提供します。 このクラスを利用すると文字列からデータを読み込めます。
SophiaFramework 4.0 サンプルコード → SFXTCPSocket を参照
SFXWideStringStreamWriter
ストレージクラスに対して文字列データを書き込む機能を提供します。 このクラスを利用するとデータを文字列化しながら書き込めます。
SFXWideStringStreamReader
ストレージクラスに対して文字列データを読み込む機能を提供します。 このクラスを利用すると文字列からデータを読み込めます。
SFXCallback
AEECallback 構造体を利用するコールバック処理が扱えます。 AEECallback 構造体を用いる場合の初期化処理や煩雑な処理が不要です。
SFXTask
ISHELL_Resume() 関数を用いた擬似スレッド処理が扱えます。
SophiaFramework 4.0 サンプルコード
// クラス変数
SFXTask _task;
CHelloWorld::CHelloWorld(Void) static_throws
{
// コールバック関数を登録
_task.Set(CALLBACK_FUNCTION(OnSchedule));
// システムに登録
_task.Schedule();
return;
}
CALLBACK_IMPLEMENT_SFXTASK(CHelloWorld, OnSchedule)
{
TRACE("...OnSchedule...");
// システムに登録
// この関数は何度でも呼び出される
_task.Schedule();
return;
}
SFXTimer
ISHELL_Timer() 関数を用いたタイマー処理が簡単に扱えます。
SophiaFramework 4.0 サンプルコード
// クラス変数
SFXTimer _timer;
CHelloWorld::CHelloWorld(Void) static_throws
{
// コールバック関数を登録
_timer.Set(CALLBACK_FUNCTION(OnSchedule));
// 3000ms のタイマーを登録
_timer.Schedule(3000);
return;
}
CALLBACK_IMPLEMENT_SFXTIMER(CHelloWorld, OnSchedule)
{
TRACE("...OnSchedule...");
// 3000ms のタイマーを登録
// この関数は何度でも呼び出される
_timer.Schedule(3000);
return;
}
SFXHTTPConnection
BREW インターフェースの IWEB を利用して HTTP 通信を行うクラスです。 IWEB 操作時に保持しなければならない各種リソースや文字列データの管理を自動的に行います。 ユーザエージェントやプロキシサーバの設定にも対応しました。
SophiaFramework 4.0 サンプルコード
// クラス変数
SFXHTTPConnection _http;
SFXAnsiStringStreamReader _reader;
CHelloWorld::CHelloWorld(Void) static_throws
{
// オープン
_http.Open();
// User-Agent フィールドを設定
_http.SetUserAgent("SophiaFramework 4.0");
// サイトに接続
_http.Connect("http://www.s-cradle.com/index.html", CALLBACK_FUNCTION(OnConnect));
return;
}
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(CHelloWorld, OnConnect, error)
{
SFXPropertyConstPtr header;
SInt16 i;
// リザルトコードを取得
TRACE("result = %d", _http.GetResultCode());
// Content-Length フィールドを取得
TRACE("length = %d", _http.GetLength());
// Date フィールドを取得
TRACE("date = %s", _http.GetDate().Format("YYYY/MM/DD hh:mm:ss (Wek)").GetCString());
// 受信された全てのヘッダをダンプして表示
TRACE("---header dump---");
header = &_http.GetResponseHeader();
for (i = 0; i < header->GetSize(); ++i) {
TRACE("%s: %s", header->GetKey(i).GetCString(), header->GetValue(i).GetCString());
}
TRACE("---header dump---");
// SFXAnsiStringStreamReader をリングバッファ 1024 バイトで取得
_http.GetStreamReader(1024, &_reader);
// ボディ部分のデータを受信
_reader.Fetch(CALLBACK_FUNCTION(OnFetch));
return;
}
CALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMREADER(CHelloWorld, OnFetch, error)
{
SFXAnsiString str;
// リングバッファから受信データを読み込む
_reader >> str;
TRACE("%s", str.GetCString());
// 受信が完了したので解放
// 注:リングバッファのサイズ以上のボディデータが存在する場合は、
// 更に Fetch() 関数で受信できる。
_reader.Release();
// クローズ
_http.Close();
return;
}
メールクラス全般
エラー処理が強化され、適切なエラー値を返すようになりました。
SFXSMTP、SFXPOP3
SFXTCPSocket の設計に沿った API に変更され、使いやすくなりました。 内部処理の効率も改善されています。
SFXSMTPSender、SFXPOP3Receiver
API の体系を見直し、簡潔にコードを記述できるようにしました。 SFXMailMessage クラスを認識するようになり、いくつかの設定が自動化されました。 前バージョンに比べコード量が半分になります。
SophiaFramework 4.0 サンプルコード
// クラス変数
SFXSMTPSender _sender;
SFXMailMessage message;
// From アドレスを設定
message.SetFrom("fromaddress@example.com");
// To アドレスを設定
message.AddTo("toaddress1@example.com");
message.AddTo("toaddress2@example.com");
// タイトルを設定
message.SetSubject("Mail Subject");
// 本文を設定
message.SetBody("Mail test\r\nThis mail is sent by SFUSmtp_sender.\r\n");
// 送信用メールサーバとポート番号を指定 (ドメインは自動解決)
_sender.SetServer(SFXSocketAddress("smtpserver.example.com:25"));
// メールを送信
_sender.SendMessage(&message, CALLBACK_FUNCTION(CallbackFunction));
SophiaFramework 3.0 サンプルコード
// クラス変数
SFUSmtpSender _sender;
SFUMailMessage message;
SFXAnsiString fromAddress("fromaddress@example.com");
SFXAnsiString toAddress1("toaddress1@example.com");
SFXAnsiString toAddress2("toaddress2@example.com");
// SFUMailMessage のインスタンスを構築
//
// From アドレスを設定
message.SetFrom(fromAddress);
// To アドレスを設定
message.AddTo(toAddress1);
message.AddTo(toAddress2);
// タイトルを設定
message.SetSubject("Mail Subject");
// 本文を設定
message.SetBody("Mail test\r\nThis mail is sent by SFUSmtpSender.\r\n");
// SFUSmtpSender の設定を行う
//
// SFUSmtpSender をオープン
_sender.Open(CallbackFunction, this);
// 送信用メールサーバとポート番号を指定 (ドメイン指定不可)
_sender.SetServer(SFUIPEndpoint("127.0.0.1:25"));
// 自分自身のアドレスを取得して設定
SFBNetMgrSmp netmgr = SFBNetMgr::NewInstance();
SFUIPEndpoint endpoint(netmgr->GetMyIPAddr());
_sender.SetHostName(endpoint.ToString());
// From アドレスを設定
_sender.SetFrom("<" + fromAddress + ">");
// To アドレスを設定
_sender.AddTo("<" + toAddress1 + ">");
_sender.AddTo("<" + toAddress2 + ">");
// メールメッセージ (ヘッダと本文) を設定
_sender.SetMessage(message.Write());
// メールを送信
_sender.Send();
SFXMailUtility
ShiftJIS と JIS の変換関数、Base64、QuotedPrintable、MD5 のエンコード、デコード関数が SFXAnsiString、SFXBuffer を直接扱うようになりました。
to フィールドに並んだ複数のメールアドレスを解析して取得する関数 ParseMailboxList が 追加されました。
SFXDTDGrammer
スキーマ言語の一つである DTD を表すクラスです。
SFXSchemaGrammer
スキーマ言語の一つである XML スキーマを表すクラスです。
SFXSOAPParser
SOAP メッセージ本体の解析クラスです。このクラスを利用すると、メッセージのエンベロープ、ヘッダ、 ボディ、フォルトなどの SOAP メッセージの基本要素を取得できます。
SFXSOAPRPC
RPC で SOAP メッセージを送受信するクラスです。SOAP メッセージ交換の詳細なプロトコルを記述する必要はなく、 数行のコーディングで SOAP 通信ができます。
SFXSOAPServiceProxy
SFXSOAPServiceProxyは、WSDL(Web Services Description Language) を解釈して実行します。 Web サービスの名前、ポート名、呼び出す機能とパラメータを入力するだけで、Web サービスが呼び出せます。 WSDL の詳細を記述する必要はなく、数行のコーディングで Web サービスにアクセスできます。
SophiaFramework 4.0 サンプルコード
// クラス変数
SFXSOAPServiceProxy _wsdl;
// サーバからの返答を受け取るための通知コールバックメソッドを設定
_wsdl.SetNotifyHandler(OnResultSHP, this);
// Web サービス記述言語 WSDL を設定
if (_wsdl.SetWSDLDocument("weatherbycity2.xml") == SFERR_NO_ERROR) {
// Web サービスの名前を設定
_wsdl.SetServiveName("WeatherByCity");
// Web サービスのポート名を設定
_wsdl.SetPortName("WeatherByCitySoap");
// 呼び出す Web サービスとその機能 (メソッド) を指定
_wsdl.SetMethodName("GetWeatherByCity");
// 指定されたパラメータの値を設定
//
// Web サービスのユーザプロパティを設定
_wsdl.SetParameterValue("UserID",
SFXBuffer(SFXAnsiString("sophia@s-cradle.com")));
_wsdl.SetParameterValue("Password",
SFXBuffer(SFXAnsiString("*******")));
// Web サービスのパラメータを設定
_wsdl.SetParameterValue("CityName",
SFXBuffer(SFXAnsiString("Washington")));
_wsdl.SetParameterValue("StateAbbreviationORCountryName",
SFXBuffer(SFXAnsiString("PA")));
// Web サービスを呼び出す
_wsdl.Invoke();
}
SFXSOAPWriter
SOAP メッセージ本体の作成クラスです。このクラスを利用すると、メッセージのエンベロープ、ヘッダ、 ボディ、フォルトなどの SOAP メッセージの基本要素を構築できます。
SFXXMLDOMParser
DOM 方式で XML 文章を解析するためのクラスです。
このクラスは、XML 文書を「DOM ツリー」と呼ばれるツリー構造として扱います。 DOM ツリーは SFXXMLNode クラスのインスタンスとして表現され、 クラスのメンバ関数で子ノードに対する処理を行います。
SFXXSDDOMParser
DOM 方式でスキーマ付き XML 文章を解析するためのクラスです。
SFXXMLSAXParser
SAX 方式で XML 文章を解析するためのクラスです。
SFXXMLDefaultHandler
SAX パーサのためのイベントを通知するハンドラを実装するためのクラスです。
このクラスを継承したクラスを実装し、SAX パーサに登録することで、XML 文章解析時に イベントが通知されるようになります。
SFXXMLGrammer
DTD や XML スキーマなどのスキーマ言語を表す抽象クラスです。
SFXXMLAttribute
Attr (属性) ノードを表すクラスです。ノードの名前や値、各種要素を取得・設定します。
SFXXMLCDATASection
CDATASection ノードを表すクラスです。ノードの名前や値、各種要素を取得・設定します。
SFXXMLComment
Comment ノードを表すクラスです。ノードの名前や値、各種要素を取得・設定します。
SFXXMLDocument
Document ノードを表すクラスです。ノードの名前や値、各種要素を取得・設定します。
SFXXMLDocumentFragment
DocumentFragment ノードを表すクラスです。ノードの名前や値、各種要素を取得・設定します。
SFXXMLDocumentType
DocumentType ノードを表すクラスです。ノードの名前や値、各種要素を取得・設定します。
SFXXMLElement
Element ノードを表すクラスです。ノードの名前や値、各種要素を取得・設定します。
SFXXMLEntity
Entity ノードを表すクラスです。ノードの名前や値、各種要素を取得・設定します。
SFXXMLEntityReference
Entity Reference ノードを表すクラスです。ノードの名前や値、各種要素を取得・設定します。
SFXXMLNode
DOM の各種ノードを表す抽象クラスです。ノードの名前や値、各種要素を取得・設定します。
SFXXMLNotation
Notation ノードを表すクラスです。ノードの名前や値、各種要素を取得・設定します。
SFXXMLProcessingInstruction
Processing Instruction ノードを表すクラスです。ノードの名前や値、各種要素を取得・設定します。
SFXXMLText
Text ノードを表すクラスです。ノードの名前や値、各種要素を取得・設定します。













