7月 7th, 2017
ぬるぽ!!
こんにちは。システム開発部の”さいちゅう”です 😆
ここ2週間ぐらい仕事でこのタイトルの言葉を何回頭の中を廻ったかわかりません。そう叫びたくなるときもありますが心の中で叫んでいます。
まず何で「ぬるぽ!!」って叫びたくなったかといいますと単純に今やっているのがSOAP/HTTP通信でREQUESTを投げてRESPONSEが返って来るという処理なのですが、REQUESTを投げてRESPONSEがnullで返って来るという状態が2週間ぐらい続いてました 😐
原因は掴めぬまま1週間と3日たった頃にあるサイトにたどり着きました。
http://www.techscore.com/tech/XML/XML_Schema/Schema9/9_2.html
原因としては
elementFormDefault=unqualified
がデフォルトで設定されているのですが、各エレメントに接頭辞がついていることが原因でした。
WSDLファイルをJAX-WSで自動生成したソースが下記のように設定されている状況。
“package-info.java”
@javax.xml.bind.annotation.XmlSchema(namespace = “http://www.blog.hr-next.co.jp/”)
package http://www.blog.hr-next.co.jp/
“hrn.xml”
<hrn:Response xmlns:hrn=”http://hr-next.co.jp/” xmlns:hrn-blog=”http://www.blog.hr-next.co.jp/”>
<hrn:Result>
<hrn:name>saicyu</hrn:name>
</hrn:Result>
<hrn-blog:status>
<hrn-blog:name>nullP</hrn-blog:name>
</hrn-blog:status>
</hrn:Response>
上記のように接頭辞をつけてはいけませーんというときはこのhrn-blogの接頭辞をはずさなければならないのですが、使っているAPIはXmlObjectとXmlCursorというXMLファイルを操作するAPIには私が見る限り削除するというAPIがなく二通りの手段で削除して何とか完成に至りました・・・。
1.XmlObjectを文字列かしてPatternとMatcherで除去する。
String hrnString = hrn.toString();
String removeString = “hrn-blog” + “:”;
Pattern hrnPattern = Pattern.compile(hrnString);
Matcher hrnMatcher = hrnPattern.matcher(hrnString);
if (hrnMatcher.find()){
// マッチした部分を除去する
hrnString = hrnMatcher.replaceAll(“”);
}
// XmlObjectに戻す
XmlObject newBody = XmlObject.Factory.parse(hrnString);
2.Valueを取得し新たにエレメントを作成し追加する。
XmlCursor hrnCursor = hrn.newCursor();
XmlCursor newCursor = null;
// newCursorにはBodyの初期設定を行う。省略
// 要素文繰り返す
while(hrnCursor.hasNextToken()){
String name = “”;
// nameの値を取得する
if(hrnCursor.toChild(new QName(“http://www.blog.hr-next.co.jp/”, “name”, “hrn-blog”))){
name = hrnCursor.getTextValue();
hrnCursor.toParent();
}
newCursor.beginElement(“status”);
newCursor.insertElement(“name”, name);
newCursor.toNextToken();
}
hrnCursor.toNextToken();
XmlCursor.copyXmlやXmlCursor.copyXmlContentsは状況によってはきれいにコピーできるのですが接頭辞がついてきてしまうのでなかなか上手くいく場合とそうでない場合がありました。
結果思ったのは2のほうは結構ごり押しで作ったなと少し思いつつ今日もさいちゅうは元気です 😆
(ワードプレスのソースコードが設定欲しいなぁと実感しました 😳 プラグイン入れてくれないかなぁ)
後日談・・。もっと簡単な方法がありました。また機会がありましたら載せます。
=============================================
ヒューマンリレーションネクストでは、
未経験や新卒の方を積極的に採用しております。
「やりがい」のある環境で仲間と共に成長しながら働きませんか?
営業職(ITコンサルタント)
ITエンジニア(システム開発、インフラ)
http://hr-next.co.jp/index.php/recruit/250-2010-07-21-05-05-01.html
新卒の方はこちら【マイナビ2017】
https://job.mynavi.jp/17/pc/search/corp200795/outline.html
【リクナビ2017】はこちら
https://job.rikunabi.com/2017/company/top/m844110027/
==============================================