Javaメソッドを使用してdbから以下のxmlを取得しようとしていますが、エラーが発生しています
XMLの解析に使用されるコード
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource(new ByteArrayInputStream(cond.getBytes()));
Document doc = db.parse(is);
Element elem = doc.getDocumentElement();
// here we expect a series of <data><name>N</name><value>V</value></data>
NodeList nodes = elem.getElementsByTagName("data");
TableID jobId = new TableID(_processInstanceId);
Job myJob = Job.queryByID(_clientContext, jobId, true);
if (nodes.getLength() == 0) {
log(Level.DEBUG, "No data found on condition XML");
}
for (int i = 0; i < nodes.getLength(); i++) {
// loop through the <data> in the XML
Element dataTags = (Element) nodes.item(i);
String name = getChildTagValue(dataTags, "name");
String value = getChildTagValue(dataTags, "value");
log(Level.INFO, "UserData/Value=" + name + "/" + value);
myJob.setBulkUserData(name, value);
}
myJob.save();
データ
<ContactDetails>307896043</ContactDetails>
<ContactName>307896043</ContactName>
<Preferred_Completion_Date>
</Preferred_Completion_Date>
<service_address>A-End Address: 1ST HELIERST HELIERJT2 3XP832THE CABLES 1 POONHA LANEST HELIER JE JT2 3XP</service_address>
<ServiceOrderId>315473043</ServiceOrderId>
<ServiceOrderTypeId>50</ServiceOrderTypeId>
<CustDesiredDate>2013-03-20T18:12:04</CustDesiredDate>
<OrderId>307896043</OrderId>
<CreateWho>csmuser</CreateWho>
<AccountInternalId>20100333</AccountInternalId>
<ServiceInternalId>20766093</ServiceInternalId>
<ServiceInternalIdResets>0</ServiceInternalIdResets>
<Primary_Offer_Name action='del'>MyMobile Blue £44.99 [12 month term]</Primary_Offer_Name>
<Disc_Reason action='del'>8</Disc_Reason>
<Sup_Offer action='del'>80000257</Sup_Offer>
<Service_Type action='del'>A-01-00</Service_Type>
<Priority action='del'>4</Priority>
<Account_Number action='del'>0</Account_Number>
<Offer action='del'>80000257</Offer>
<msisdn action='del'>447797142520</msisdn>
<imsi action='del'>234503184</imsi>
<sim action='del'>5535</sim>
<ocb9_ARM action='del'>false</ocb9_ARM>
<port_in_required action='del'>
</port_in_required>
<ocb9_mob action='del'>none</ocb9_mob>
<ocb9_mob_BB action='del'>
</ocb9_mob_BB>
<ocb9_LandLine action='del'>
</ocb9_LandLine>
<ocb9_LandLine_BB action='del'>
</ocb9_LandLine_BB>
<Contact_2>
</Contact_2>
<Acc_middle_name>
</Acc_middle_name>
<MarketCode>7</MarketCode>
<Acc_last_name>Port_OUT</Acc_last_name>
<Contact_1>
</Contact_1>
<Acc_first_name>.</Acc_first_name>
<EmaiId>
</EmaiId>
エラー
org.Apache.xerces.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
いくつかのスレッドで読んだのは、xmlのいくつかの特殊文字のためです。この問題を修正するには?
この問題を修正するには?
正しい文字エンコードを使用してデータを読み取ります。エラーメッセージは、データをUTF-8として読み取ろうとしていることを意味します(意図的に、または<?xml version="1.0" encoding="somethingelse"?>
を指定しないXMLファイルのデフォルトエンコーディングであるため)、実際には次のような異なるエンコーディングになっていますISO-8859-1またはWindows-1252。
これを行う方法についてアドバイスできるようにするには、XMLの読み取りに現在使用しているコードを確認する必要があります。
試してください:
InputStream inputStream= // Your InputStream from your database.
Reader reader = new InputStreamReader(inputStream,"UTF-8");
InputSource is = new InputSource(reader);
is.setEncoding("UTF-8");
saxParser.parse(is, handler);
UTF-8以外の場合は、エンコード部分を適切なものに変更してください。
Xmlを文字列として取得し、xml.getBytes()を使用してこのエラーを取得していました。 xml.getBytes(Charset.forName( "UTF-8"))に変更するとうまくいきました。
私はこの問題を抱えていましたが、ファイルはUTF-8で、UTF-8でエンコードされていない文字が何らかの形で入っていただけです。問題を解決するために、このスレッドに記載されていること、つまりファイルを検証しました: ファイルが有効なUTF-8であるかどうかを確認する方法?
基本的にコマンドを実行します:
$ iconv -f UTF-8 your_file -o/dev/null
また、UTF-8でエンコードされていないものがある場合は、行番号と行番号が提供されるため、見つけることができます。
文字エンコードの原則を理解している私のような人 Joelの記事も読んでください これは面白い とにかく間違った文字を含む およびそれでもできないheck(スポイラーアラート、私はMacユーザーです)を把握したら、ローカルリポジトリを削除して再度クローンを作成するだけで解決できます。
私のコードベースは前回正常に実行されてから変更されていないため、ビルドシステムがそれについて文句を言わなかったという事実を考えると、UTFエラーを持っていることは意味がありませんでした... IntelliJ Ideaおよび実行中のすべて(Java/Tomcat/Hibernate)
私のMacは、何もなかったふりをして素晴らしい仕事をし、いつものように仕事を続けましたが、基盤となるファイルシステムは何とか破損したままでした。これを理解しようとして一日を無駄にしました。私はそれが誰かを助けることを願っています。
同じ問題がありました。私の問題は、WebLogicサーバーのstatWeblogic.cmdファイルのJava_OPTIONの下に「-Dfile.encoding = UTF8」引数がないことでした。
Antビルドが原因でこの問題に遭遇しました。
そのAntビルドはファイルを受け取り、filterchain expandproperties
それに。このファイルフィルタリング中に、Windowsマシンの暗黙的なデフォルトの非UTF-8文字エンコーディングを使用して、フィルタリングされたファイルを生成しました。したがって、その文字セット以外の文字は正しくマッピングできませんでした。
1つの解決策は、AntにUTF-8用の明示的な環境変数を提供することでした。 Cygwinでは、Antを起動する前に:export ANT_OPTS="-Dfile.encoding=UTF-8"
。
XMHTLページにいくつかの特殊文字を含むコメント行があるJSFアプリケーションでも同じ問題が発生しました。 Eclipseで以前のバージョンを比較したとき、コメントがありました。
//Some � special characters found
それらの文字を削除し、ページを正常にロードしました。ほとんどはXMLファイルに関連しているので、実際のバージョンと比較してください。
私は同じ問題に遭遇し、XMLファイルの長い調査の後、問題を見つけました:«
»
のようなエスケープされていない文字はほとんどありませんでした。