テクニカルノート

x-Servlet(クロスサーブレット)


FAQ

x-Servlet Q&Aへの質問に関して

Q&Aに質問する際に必要な情報について教えて欲しい。

下記の情報をお送り下さい。

  • 発生した現象の内容
  • 現象発生時の設定ファイル
    xproxy.properties
    xservlet.license
    conf/contentsRule.xml
    conf/contentsRuleDefault.xml
    conf/maxClientOver.xml
    conf/staticUA.xml
    conf/UAGroupSetting.xml
    conf/pictgram.xml
  • 現象発生時のログファイル
    logs/access.log
    logs/debug.log
    logs/error.log
    logs/UAdownload.log
    logs/ukterm.log
    logs/xInfo.log

デフォルト設定では"debug.log"が出力されませんので、可能であれば"debug.log"が出力されるように設定を変更し、x-Servlet再起動を行ってから再度情報を取得して下さい。なお、"debug.log"の設定に関しましては、マニュアルの「log4j.properties」をご参照ください。

絵文字に関して

絵文字変換表が欲しい

絵文字の著作権の関係上、絵文字変換表を弊社から提出する事ができません。代わりに全てのiモード対応絵文字を含むコンテンツをCD-ROMの/xproxy/html/pictogram以下に用意しましたのでこのコンテンツをx-Servletを経由してご覧いただくことで対応を確認いただければと思います。

絵文字変換のパターンを変更したい

pictogram.xmlで設定可能です。

起動に関して

『Entrance:Cannot assign requested address.』と言うエラーが表示されてx-Servletが起動しない
他のアプリケーションが指定のポートを使用している可能性があります。xproxy.propertiesのxproxyPortを確認して下さい。なお、"netstat -an"コマンドにより使用しているポートを確認することが可能です。
『There is too many ContentsRule registration.』と言うエラーが表示されてx-Servletが起動しない
x-Servletのライセンスによって、x-Servletから接続できるドメイン数(元コンテンツサーバ数)の制限があります。contentsuRule.xmlに設定したドメイン数(元コンテンツサーバ数)がライセンスで制限されているドメイン数以内かご確認ください。
『LicenseManager:IP missmatch.Licensed IP(192.168.0.128) != machine IP(127.0.0.1)』と言うエラーが表示されてx-Servletが起動しない
x-Servletのライセンスファイルに登録されているIPアドレスと、x-Servletがサーバから取得したIPアドレス(x-Servletが動作しているサーバのIPアドレス)が違っているために起動が失敗している可能性があります。ライセンスファイルに登録されているIPアドレスとxproxy.propertiesのxproxyHostをご確認ください。 x-Servletがサーバから取得したIPアドレスは"hostname"コマンドにて取得したホスト名に対して、"ping -a ホスト名"を実行することにより確認することができます。
『'InternalImageConverter' isn't found. Use 'NullImageConverter' instead.』と言うメッセージが表示される
画像変換モジュール(xproxy_image_221.jar)がx-Servletインストールディレクトリ(xproxy.jarが存在するディレクトリ)にインストールされていない可能性があります。画像変換機能を使用されない場合は、問題ありません。詳細は、x-Servletマニュアルの「画像変換機能」をご参照くだい。
UNIX系OSにて、root以外のユーザ(一般ユーザ)でstart.shを起動するとerror.logファイルにメッセージ『Entrance:Cannot assign requested address.(192.168.0.128:80)』が出力されx-Servletが起動しない
通常UNIX系OSにおいて1024より小さいポート番号を使用するには管理者権限が必要です。管理者権限をもっているユーザーで実行するか1024以上のポート番号を使用してください。

端末画面表示エラーに関して

端末画面に"Session expired"と表示される
tracker.historySizeの値を超えてブラウザバックを行った状態でそのページのリンクをクリックした場合に発生します。 xproxy.propertiesのtracker.historySizeの値をサイトの構成に合わせて調節してください。注意事項としてtracker.historySizeの値を増やすとx-Servletの動作に必要なメモリ量が比例して増えます。(tracker.historySizeを2倍にするとメモリ量も2倍必要です。)起動時のメモリ量はtracker.historySizeのデフォルト値に合わせてありますので、必要であれば起動時のパラメータ-Xmxの値も変更してください。
端末画面に"Server changed.Please redo from the start."と表示される
二重化機能を使用するためにxproxy.propertiesでserverIDを指定したが、端末から送られてきたリクエストURIがxproxy.propertiesで指定したserverIDではなかった場合に発生します。負荷分散のためx-Servletを2台使用していると仮定した場合、各xproxy.propertiesのserverIDとrequestExchanger.serverIDPrefixとrequestExchanger.serverIDSuffixにそれぞれ異なる文字を定義してください。
端末画面に"Rule not found"と表示される
端末から送られたリクエストURIがcontensRule.xmlので指定した条件に一致せず、適用できるコンテンツルールが存在しなかった場合に発生します。リクエストURIがcontentsRule.xmlで記述されているルールのいずれかにマッチしているかどうかを確認したうえで適切なコンテンツルールを記述してください。
端末画面に"Server configuration Imperfection(https proxy)"と表示される
x-Servletと元コンテンツサーバ間でSSL通信を行う構成にも関わらず、xproxy.propertiesのhttpsProxyHostの値が設定されていない場合に起こります。x-Servletと元コンテンツサーバ間でSSL通信を行う場合、httpsProxyHostにSSL暗号化をするホスト名を、httpsProxyPortにSSL暗号化をするホスト名のポート番号を必ず指定するようにしてください。
端末画面に"Request format unexpected"と表示される
端末からのリクエストがHTTPリクエストの仕様に従っていないことが考えられます。リクエストがHTTPリクエストの仕様に従っているかご確認ください。x-Servletのdebug.logを解析することで問題を特定できる可能性があります。x-Servletのdebug.logの設定につきましては、x-Servletマニュアルの「log4j.properties」をご参照ください。
端末画面に"Illegal domain"と表示される
<form>タグのaction属性がcontentsRule.xmlのとで記述されたサーバを指していないような場合(x-Servlet管轄下以外のホストを指している場合)に上記のようなエラーが発生します。 もしそのaction属性が記述ミスではなく意図しているものであるならば<form>タグにnosessionをつけることで問題が解決する可能性があります。ただしnosessionの利用は副作用があることもご理解の上ご利用ください。
端末画面に"License expired"と表示される
ライセンスの期限が切れています。ライセンス期限延長をご希望の場合は弊社の担当営業までご連絡ください。
端末画面に"Failed to get contents"と表示される
元コンテンツサーバがダウンしていたり、空のレスポンスを返している等のため、x-Servletが元コンテンツを取得できない場合に発生します。元コンテンツサーバに異常がないか確認してください。
端末画面に"Max client over"と表示される
x-Servletに対して同時接続可能なアクセス数(xproxy.propertiesのmaxClientLimitに指定した数)を超えてアクセスがあった場合に発生します。
Enterprise EditionであればmaxClientLimitのデフォルト値は50に設定されていますが、最大10000まで設定可能ですのでmaxClientLimitの値を上げてください。
Lite EditionではmaxClientLimitの値が5に固定されています。Lite Editionをご利用しているお客様で、このエラーが頻繁に発生しているようであればEnterprise Editionへのアップグレードをお勧めします。
端末画面に"Web Server Request Time-out"と表示される
contentsSocketTimeoutで指定している時間内に元コンテンツサーバからのレスポンスを受信できなかった場合に発生します。
xproxy.propertiesのcontentsSocketTimeoutの値を上げてください。ただし、大きな値にしてもx-Servletとしてはレスポンスを待っていても端末のほうのタイムアウト時間にかかってタイムアウトになってしまう可能性があります。
端末画面に何も表示されない
元コンテンツに不正な記述がないか、サーバから正常なレスポンスが返されているかをご確認ください。また、x-Srervletやサーバから出されるログなどを解析することで原因の特定につながると思われます。X-Servletのログについては別紙をご参照ください。X-Servletのdebug.logの設定につきましては、x-Servletマニュアルの「log4j.properties」をご参照ください。

同時接続クライアント数に関して

同時接続可能なクライアント数とはどのような意味ですか
x-Servletへの最大同時リクエスト数を意味します
x-Servlet起動後に『Use MaxClient=50』というメッセージが出力されるが、これは、50クライアントまでしか接続できないという意味か
『Use MaxClient=50』というメッセージは、同時接続可能なクライアント数が50クライアントであることを意味します。 同時接続可能なクライアント数の指定は、xproxy.propertiesのmaxClientLimitに指定し、ここで指定できる値はライセンスファイルで指定されている値以下である必要があります。(デフォルトでは50クライアントです)
同時接続可能なクライアント数(xproxy.propertiesのmaxClientLimitに指定した数)を超えてアクセスがあった場合どうなりますか。
maxClientLimitに設定された値を超えるようなアクセスが発生した場合は、
503 Service Unavailable
Max client over
を端末に返しますので、端末には『Max client over』が表示されます。なお、端末によっては端末固有のメッセージが表示される場合があります。
conf/maxClientOver.xmlを変更することにより"Max client over"を任意の文字列に変更することが可能です。

画像変換に関して

画像が表示されずerror.logに以下のようなエラーメッセージが出力されている
failed to decode. com/sun/media/jai/codec/ImageDecodeParam x-ServletからJAIのライブラリが参照できず画像変換に失敗している可能性があります。 JAIが正常にインストールされているかご確認ください。
画像変換機能では各端末のキャッシュサイズに応じた適切なファイルサイズへの変換が行われるか
<img>タグにx-Servlet独自の属性(qualityfix、sizefix、adaptive)を指定することにより、キャッシュサイズを考慮して画像変換を行います。
詳細はx-Servletマニュアルの「拡張機能」をご参照ください。
1つの画像にx-Servlet拡張機能の"adaptive"と"frameRatio"の両方の指定を行った場合どちらが優先されるのか。
"adaptive"と"frameRatio"を指定した場合、"frameRatio"で指定した大きさから画像変換を始め画像サイズ、品質の両方を調整端末のキャッシュサイズに収まるように調整します。
(frameRaito→adaptiveの順に処理する)

ML変換に関して

HDML/WAP2.0端末にて『istyle="4"』が『format="*M"』になってしまう
inputタグで『wmlformat』属性をご使用下さい。詳しくはマニュアル「ML変換ルール」のINPUTをご参照下さい。
プルダウンリストの項目にて未選択だと『未選択』が自動的に表示されてしまうが、『未選択』を表示さないための設定は
conf/contentsRule.xml又はconf/contentsRuleDefault.xmlの設定によって、selectタグで初期選択肢未選択時に、選択肢に表示する文字列を指定したり、非表示にすることが可能です。
詳細な設定方法については、x-Servletマニュアルの「contentsRule.xml」内の"notSelectedMessage"についての解説をご参照下さい。
x-Servletのページ分割処理によってFORMタグ内がページ分割されても問題ないのか
x-ServletはFORMのページ分割に対応しているため、FORMタグ内でページ分割が発生した場合も、セッションが引継がれFORM送信を行うことができます。詳細についてはx-Servletマニュアルの「FORM送信」をご参照ください。
元コンテンツ中にx-Servlet拡張機能の タグを設定してもページ分割されない
<x:separate>タグは記述した部分で必ずページ分割を発生させるタグではありません。
詳細についてx-Servletマニュアルの「拡張機能」をご参照ください。

端末情報に関して

端末情報が更新されない
端末情報の更新には『useragent.x-servlet.com』の80番ポートにTCP接続ができるようにネットワークが設定されている必要があります。x-Servletがインストールされているサーバで下記のコマンドを実行し、接続できない旨のメッセージが出ない事を確認して下さい。
# telnet useragent.x-servlet.com 80
UADownload.logにメッセージ『Can't receive response.Check the network.』が出力される
端末情報の更新に失敗しています。
端末情報の更新には『useragent.x-servlet.com』の80番ポートにTCP接続ができるようにネットワークが設定されている必要があります。x-Servletがインストールされているサーバで下記のコマンドを実行し、接続できない旨のメッセージが出ない事を確認して下さい。
# telnet useragent.x-servlet.com 80
端末情報ファイルが更新されない
ネットワークから端末情報が正常にダウンロードできたとしても、この情報を端末情報ファイル(conf/useragent.xml)に書き出すことは行なっていません。そのため端末情報ファイルが更新されることはありません。何らかの理由で最新のuseragent.xmlが必要な場合、弊社営業までお問い合わせください。
端末情報取得のタイミングを知りたい
特に指定がない場合、端末情報はx-Servlet起動時と起動後24時間毎に取得されます。userAgent.update.timeで時刻を指定した場合はx-Servlet起動時と指定された時刻毎に端末情報を取得します。

ログに関して

ログローテーションのタイミング知りたい
UAdownload.log以外のログは日毎にローテーションが発生します。
正確には日付が変わってから最初にログを出力しようとしたタイミングでXXXX.logをXXXX.log.yyyyMMddという名前に変更した後、XXXX.logを新規作成しログの出力を継続します。
ログローテーションのタイミングは変更可能でしょうか
「日毎にローテーションする」という動作を変更することは出来ません。また、ファイルサイズを考慮したローテーションも行なえません。
ローテーションされたログはいつ削除されるのでしょうか
設定を行なわない場合x-Servletはローテーションしたファイルを削除しません。xproxy.propertiesのlogSurvivalDateの設定を行なうことで定期的に古いログファイルの削除を行なうことが可能です。

x-Servletのセッションに関して

10分以上経過して画面遷移を行うと、画面間で引継ぐべきセッション情報が保持されない
x-Servletのセッション持続時間はデフォルトでは10分となっていますので、x-Servletのセッション持続時間が満了した可能性があります。x-Servletのセッション持続時間を変更するには、xproxy.propertiesファイルのsessionTerm設定値をご変更下さい。
セッション持続時間が過ぎてアクセスがあった場合のエラーメッセージを変更したい
contentsRule.xmlのAttributeのhistoryOverMessageで変更可能です。

x-Servletの二重化に関して

x-Servletの二重化機能はどのようなサービスなのか
x-Servletを複数台のマシンで運用し、ロードバランサを用いて負荷分散をするための機能です。URLリライトによる二重化機能を使用しているため、レイヤー7に対応したロードバランサーが必要です。
また、フェイルオーバーやハートビート、セッションの引継ぎなどは行われません。
x-Servletの冗長化を行っていて片系に障害が発生した場合、障害の発生したサーバで処理していたセッションはエラーになるか
片系障害時には、障害サーバ上で保持していたx-Servletのセッション情報が失われますがエラーにはなりません。しかし、元コンテンツ側に想定外のパラメータが送信される可能性があります。

access.logに関して

access.logに『null null 500(null) 0 -null』と出力されているが、何を意味しているのか
クライアント⇔x-Servlet間でのTCPコネクションは確立したが、HTTPリクエストが送られてこない状態でTCPコネクションが切断されると上記のようなログが出力されます。
よくある例としてはTCPレベルでの死活監視を行っている場合があげられます。なお、特定IPからのログをaccess.logに出力したくない場合にはxproxy.propertiesのexceptionIpAddressesを設定して下さい。
access.logに[JHTML]、[VHTML]と出力されているが、どのような機種からアクセスされたものか
SoftBank向けHTML端末からリクエストがあった場合[JHTML]、SoftBank向けXHTML Basic端末からリクエストがあった場合[VHTML]と出力されます。

HTTPヘッダーに関して

x-Servletを経由すると元コンテンツサーバでHTTPのRefererヘッダーが取得できない
x-Servletは端末から送られてくるRefererヘッダーを削除しています。そのため端末から送信されてくるRefererヘッダーを元コンテンツサーバでRefererヘッダとして取得することは出来ません。しかし、端末から送信されてくるRefererヘッダを例えば『X-Xp-Referer』というヘッダとして元コンテンツサーバに伝達することは可能です。
その場合には
<Attribute name="appendReqHeader_1">X-Xp-Referer:%Referer%</Attribute>
というような、記述をcontentsRule.xmlの の末尾に追加してください。
システム側で携帯の個別端末識別情報を取得することができるか
x-Servletは、個別端末識別情報が取得できた場合、Webサーバにリクエストを送る際にそのHTTPリクエストヘッダに個別端末識別情報を付加しているので、HTTPリクエストヘッダから取得できます。
x-Servletマニュアルの「拡張機能」-"特殊HTTPリクエストヘッダ"の"X-Xp-Uid"を参照ください。

その他全般

FORMのaction属性でのHTTPからHTTPSへの遷移がうまくいかない
x-Servletでは<form>のaction属性によるHTTPからHTTPSへの遷移はできません。
x-Servletを用いた場合、<form>タグのaction属性が<form>タグが存在するページのURLに書き換えられてしまう関係でこのフォームデータは暗号化されること無く(HTTP)送信されてしまいます。
そのためフォーム通信を暗号化したい場合には、その<form>が存在するページ自体がHTTPSのページになっている必要があります。
JCE 1.2.1 の証明書期限切れによるx-Servletへの影響はないか
JCEの機能は評価版バージョンでファイルの暗号化に関する部分のみ使用しており、認証機能は使用しておりません。バグフィックスされている部分に関しても動作に影響を及ぼす部分はありません。
シミュレータを使用すると正しく表示されない
シミュレータは携帯ではないので x-Servlet では「シミュレータ向けの変換」には対応しておりません。ただし、シミュレータが特定の端末を名乗ってアクセスした場合は、その端末向けの変換を行います
http://www.test.co.jpにアクセスするとエラーが発生する
/;http://www.test.co.jp/のようにパスが指定されていないURLへアクセスするとエラーが発生する機種が存在します(PCブラウザ等であれば///を自動的に補正するようです)。
&#147;http://www.test.co.jp//のように///を付与してのアクセスを行って下さい。
error.logにメッセージが出てますが問題ないでしょうか
なにか問題があるためにerror.logにメッセージが出ているのですが、その問題はx-Servletが停止するような種類のものではありません。何か予想外の動作が発生した場合に原因究明の参考程度になるものとお考え下さい。
ページ内リンク(<a href="#TOP">等)が自ページのURLに変換される。
端末によってはページ内リンク(<a href="#TOP">等)が正常動作しない機種が存在します。そのため、x-Servletは<a href="#TOP">等の記述があった場合はリンクを自ページのURLに変換します。
L-modeには対応していますか
すべての動作検証をしていないため保証できませんが、L-modeは一律cHtml2.0で出力します。対応するL-modeのuserAgentをstaticUA.xmlに登録することで出力するcHTMLのバージョンをお客様で独自にカスタマイズすることもできます。
PDAには対応していますか
PDAは一部特定機種のみに対応しています。対応するPDAのuserAgentをstaticUA.xmlに登録することで、出力するcHTMLのバージョンをお客様で独自にカスタマイズすることもできます。
"OutOfMemoryError"が発生します
表示するコンテンツやアクセス頻度によっては、"OutOfMemoryError"を発生してしまう場合があります。この現象は以下の項目を変更することにより解消できる可能性があります。
xproxy.propertiesのsessionMaxCountの設定値
xproxy.propertiesのtracker.historySizeの設定値
start.batもしくはstart.shの"-Xmx"の設定値