Java

DOCOMOの日本語・半角英数字が混じったメール

まいど、
もりぞーです。

DOCOMOの携帯から日本語と半角英数字が混じった場合、
Subjectが面白いことに。

@原文
ドコモの携帯からSubjectに以下を記述
Baaaaあああああ.aaa な@かgjajd ajやねやたlthm..


@PCで受信したメールのソース(DOCOMOからPCへ送った)
Subject: Baaaa=?iso-2022-jp?B?GyRCJCIkIiQiJCIkIhsoQg==?=.aaa
=?iso-2022-jp?B?GyRCJEobKEI=?=@=?iso-2022-jp?B?GyRCJCsbKEI=?=gjajd
aj=?iso-2022-jp?B?GyRCJGQkTSRkJD8bKEI=?=lthm..


JavaMailで普通にgetSubjectを実行すると・・

Baaaa=?iso-2022-jp?B?GyRCJCIkIiQiJCIkIhsoQg==?=.aaa な@=?iso-2022-jp?B?GyRCJCsbKEI=?=gjajd aj=?iso-2022-jp?B?GyRCJGQkTSRkJD8bKEI=?=lthm..


わけがわかりません。
どうやら複数行あった場合、最後の行だけ正しく変換する模様。

至急どうにかするコードを書いてくれってことで、適当に書いてみた。

/**
* docomoSubjectDecoder
* DOCOMOから送信されるメールのSubject文字化けを元に戻す。
* @param String subject
* @return String newSubject
*/
public static String docomoSubjectDecoder(String nativeSubject){

//抽出用マッチングパターン
String ISO_2022_PATTERN = "\\Q=?iso-2022-jp?\\E(.*?)\\Q=?=\\E";

try{
//抽出作業
ArrayList codeList = new ArrayList();
Pattern pattern = Pattern.compile(ISO_2022_PATTERN,Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(nativeSubject);
while(matcher.find()){
codeList.add(matcher.group());
}
//抽出したものを置換
for(int i=0;i nativeSubject = nativeSubject.replaceAll("\\Q"+(String)codeList.get(i)+"\\E",MimeUtility.decodeWord((String)codeList.get(i)));
}

}catch (Exception e) {
//エラー
// TODO: handle exception
}
return nativeSubject;
}


@使い方(噛ませるだけ)
Message[] messages = folder.getMessages();
String subject = messages[i].getSubject();
String subjectAfter = docomoSubjectDecoder(messages[i].getSubject());


即席・・・。
とりあえず変換されてないのを抽出して
変換かけて戻してるだけ。
いいのかしら・・これで・・

ぺんぎん
もりぞー 17:17 | コメント(0) | トラックバック(0) | Java

確認君

前にSOAPで使ったみえみえ君のソース。
即席です。

俗に言う確認君のPostとGetの中身も見える君。

package jp.ds.servlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* HeaderMIEMIE
* @author t-morioka
*/
public class HeaderServlet extends HttpServlet {

private static Log log = LogFactory.getLog(HeaderServlet.class);

/**
* Post
*
*/
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {

try {

//キャッシュ
StringBuilder buf = new StringBuilder();
buf.append("--HeaderStart-----------------\n");
buf.append("--POST------------------------\n");

Enumeration headers = arg0.getHeaderNames();
ArrayList headerList = new ArrayList();
for (Enumeration e = headers ; e.hasMoreElements() ;) {
String key = (String)e.nextElement();
String value = arg0.getHeader(key);

//ヘッダー出力
buf.append(key+":"+value+"\n");
}
buf.append("\n--HeaderEnd-----------------\n");
buf.append("--DataStart-----------------\n");

BufferedReader reqReader = arg0.getReader();

String line;
while ((line = reqReader.readLine()) != null) {
buf.append(line);
buf.append("\n");
}
buf.append("\n--DataEnd-----------------\n");

//レスポンスへ返送
ServletOutputStream sOutStream = arg1.getOutputStream();
log.info(buf.toString());
sOutStream.println(buf.toString());
sOutStream.close();

} catch (Exception e) {
log.error(e);
System.out.println(e);
}


}


/**
* Get
*
*/
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {

try {

//キャッシュ
StringBuilder buf = new StringBuilder();
buf.append("--HeaderStart-----------------\n");
buf.append("--GET-------------------------\n");

Enumeration headers = arg0.getHeaderNames();
ArrayList headerList = new ArrayList();
for (Enumeration e = headers ; e.hasMoreElements() ;) {
String key = (String)e.nextElement();
String value = arg0.getHeader(key);

//ヘッダー出力
buf.append(key+":"+value+"\n");
}
//System.out.println("--------------------------------------");
buf.append("--HeaderEnd-----------------\n");
buf.append("--DataStart-----------------\n");

BufferedReader reqReader = arg0.getReader();

String line;
while ((line = reqReader.readLine()) != null) {
buf.append(line);
buf.append("\n");
}
buf.append("\n--DataEnd-----------------\n");

//レスポンスへ返送
ServletOutputStream sOutStream = arg1.getOutputStream();
//HTMLのURLを変換(たんなるリプレイス)作りこみ必要
log.info(buf.toString());
sOutStream.println(buf.toString());
sOutStream.close();

} catch (Exception e) {
log.error(e);
System.out.println(e);
}


}

}

もりぞー 14:59 | コメント(0) | トラックバック(0) | Java

SOAPとJava

まいど、
もりぞーです。

とあるSOAP連携があり、
色々ダメだったのでそのお話を書きます。

①AXIS使ってみた
どうやら
ApacheプロジェクトのAXISがいいらしいとのことで
使ってみた。

が!!

どうも細かい設定ができない。
(ヘッダーのある部分を書き換えたり・・とか)
SOAP連携対応してますとかよくあるが、
結局は送信先に合わせる形になるので、
規格から微妙にずれた送信先だったりすると
APIとか普通にマッチしない。
SAAJ1.2を使ってみたが、
どうもたいした設定ができないため、
SAAJ1.3にしてみたが、
こちらも同様だった・・・。
それも2006年で開発終わってる!!
よくみるとどうやらAXIS2ってのがあり、
そちらに引き継がれてるぽい。

②AXIS使ってみた
色々機能が拡充されていて便利そうだが、
サンプルと情報がすくなくて使うのをやめた。

③結局フルスクラッチ
結局POSTデータをゼロからフルスクラッチすること
にした。相手がどんな仕様であろうと対応可能で
あり、やり取りのデータインターセプトも楽。
SOAP連携でAPI使うのは結構微妙かもしれない。

というわけで、
SOAP連携をやる場合には
API使ってみて微妙に対応無理であれば、
即フルスクラッチに切り替えるほうがよいかと
思いますわ・・・。(とりあえずJavaでは)
ぺんぎん
もりぞー 12:15 | コメント(0) | トラックバック(0) | Java

JDK 6.0ってどうなの?

JDK6.0がリリースされて結構経つが、
なかなか実業務等で使ってる話をあまり聞かない。
Sunのページを除くとすでにUpdate1になっていた。

現在社内で主流のバージョンは1.5.0_xとなっており
1.6.0を試す強者はまだ現れていない。

一般的に業務系(富士通とかIBMとかそのへん)で主流
なのは未だに1.3や1.4のことが多く、1.5での実装は
あまり多くない。1.5になるのは当分先なような気がする。

現在のJDKでも結構満足しているのですが、
JVMが更なる高速化になっているならば早々に乗り換えを
考えたいと思っています。
@BLOGではJVMのパフォーマンスがかなりのキモとなるの
で結構必死です。

来月あたり手を出してみることにします。ぺんぎん
もりぞー 17:38 | コメント(0) | トラックバック(0) | Java
最近の記事
Admageという名…
02/13 14:36
(続)2月から広告が…
02/13 12:15
(続)2月から広告が…
02/10 17:29
2月から広告が表示さ…
02/07 18:46
(続)Cent5.x…
01/31 14:59
(続)Cent5.x…
01/29 18:01
Cent5.xでGl…
01/29 17:19
勉強会
08/13 18:44
Class A
07/29 20:50
8.8.8.8
06/25 15:19
マイナーな技術
06/25 14:36
工数見積
06/20 14:06
次世代機のCPU
06/19 13:04
Surface Pr…
06/17 09:44
Nexus10(続き…
06/17 09:33
最近のコメント
最近のトラックバック
Yahoo!ボットチェッカー
Googleボットチェッカー
MSNボットチェッカー

ディマージシェア技術ブログ