Saya memiliki klien layanan web berbasis Java yang terhubung ke layanan web Java (diimplementasikan pada kerangka kerja Axis1).
Saya mendapatkan pengecualian berikut dalam file log saya:
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.ws.axis.security.WSDoAllReceiver.invoke(WSDoAllReceiver.java:114)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:198)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
Jawaban:
Ini sering disebabkan oleh spasi putih sebelum deklarasi XML, tetapi bisa berupa teks apa saja , seperti tanda hubung atau karakter apa pun. Saya katakan sering disebabkan oleh ruang putih karena orang menganggap ruang putih selalu diabaikan, tapi bukan itu masalahnya.
Hal lain yang sering terjadi adalah UTF-8 BOM (byte urutan mark), yang adalah diperbolehkan sebelum deklarasi XML dapat diperlakukan sebagai spasi jika dokumen tersebut diserahkan sebagai aliran karakter ke parser XML bukan sebagai aliran byte .
Hal yang sama dapat terjadi jika file skema (.xsd) digunakan untuk memvalidasi file xml dan salah satu file skema memiliki BOM UTF-8 .
sumber
Document document = documentBuilder.parse(new InputSource(new StringReader(xml)))
keDocument document = documentBuilder.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("UTF-8"))))
Sebenarnya selain Yuriy Zubarev's Post
Saat Anda meneruskan file xml yang tidak ada ke parser. Misalnya kamu lulus
ketika hanya file C: /temp/abc.xml ada di sistem file Anda
Dalam kedua kasus itu
atau
Semua memberikan pesan kesalahan yang sama.
Bug sangat mengecewakan, karena mengikuti jejaknya
tidak mengatakan apa-apa tentang fakta 'nama file tidak benar' atau 'file seperti itu tidak ada'. Dalam kasus saya, saya memiliki file xml yang benar-benar benar dan harus menghabiskan 2 hari untuk menentukan masalah sebenarnya.
sumber
Coba tambahkan spasi antara
encoding="UTF-8"
string di prolog dan terminating?>
. Dalam XML prolog menunjuk elemen pembatas tanda tanya-braket ini pada awal dokumen (sementara prolog tag dalam stackoverflow mengacu pada bahasa pemrograman).Ditambahkan: Apakah tanda hubung di depan bagian prolog Anda dari dokumen? Itu akan menjadi kesalahan di sana, memiliki data di depan prolog
-<?xml version="1.0" encoding="UTF-8"?>
,.sumber
<?xml ver...
bit.Saya memiliki masalah yang sama (dan menyelesaikannya) ketika mencoba mengurai dokumen XML dengan freemarker.
Saya tidak punya spasi sebelum header file XML.
Masalah terjadi ketika dan hanya ketika penyandian file dan atribut penyandian XML berbeda.(mis. File UTF-8 dengan atribut UTF-16 di header).
Jadi saya punya dua cara untuk menyelesaikan masalah:
sumber
Ini berarti XML salah format atau badan respons bukan dokumen XML sama sekali.
sumber
Hanya menghabiskan waktu 4 jam untuk melacak masalah serupa di WSDL. Ternyata WSDL menggunakan XSD yang mengimpor XSD namespace lain. XSD yang diimpor ini berisi yang berikut:
Perhatikan
include
elemen kosong ! Ini adalah akar kesengsaraan saya. Saya kira ini adalah variasi pada file Egor yang tidak menemukan masalah di atas.+1 hingga pelaporan kesalahan mengecewakan.
sumber
Dalam kasus saya, menghapus atribut 'encoding = "UTF-8"' semuanya berfungsi.
Sepertinya masalah pengodean karakter, mungkin karena file Anda tidak benar-benar dalam UTF-8.
sumber
Jawaban saya mungkin tidak akan membantu Anda, tetapi umumnya membantu masalah ini.
Ketika Anda melihat pengecualian semacam ini, Anda harus mencoba membuka file xml Anda di Hex Editor dan kadang-kadang Anda dapat melihat byte tambahan di awal file yang tidak ditampilkan oleh editor teks.
Hapus mereka dan xml Anda akan diuraikan.
sumber
Terkadang itu kodenya, bukan XML
Kode berikut,
juga akan menghasilkan kesalahan ini,
karena berusaha mengurai string literal,
"file.xml"
(bukan isifile.xml
file) dan gagal karena"file.xml"
sebagai string XML tidak terbentuk dengan baik.Perbaiki: Hapus
StringReader()
:Demikian pula, masalah buffer kotor dapat meninggalkan sisa sampah di depan XML yang sebenarnya. Jika Anda telah memeriksa XML Anda dengan saksama dan masih mendapatkan kesalahan ini, catat konten yang sebenarnya dikirimkan ke parser; kadang-kadang apa yang sebenarnya (dicoba untuk diuraikan) mengejutkan.
sumber
applicaionContext.xml
jalur dalam kode, dan tidak memeriksa dalam kode sedang mencari kesalahan hanya dalam file XMLPertama bersihkan proyek, kemudian bangun kembali proyek. Saya juga menghadapi masalah yang sama. Semuanya baik-baik saja setelah ini.
sumber
Jika semuanya gagal, buka file dalam biner untuk memastikan tidak ada karakter lucu [3 karakter tidak dapat dicetak di awal file yang mengidentifikasi file sebagai utf-8] di awal file. Kami melakukan ini dan menemukan beberapa. jadi kami mengonversi file dari utf-8 ke ascii dan berhasil.
sumber
Untuk masalah yang sama, saya telah menghapus baris berikut,
Ini bekerja dengan baik. Tidak begitu yakin mengapa UTF-8 memberi masalah. Untuk membuat saya kaget, itu berfungsi dengan baik untuk UTF-8 juga.
Saya menggunakan Windows-7 32 bit dan Netbeans IDE dengan Java * jdk1.6.0_13 *. Tidak tahu cara kerjanya.
sumber
Seperti yang telah ditunjukkan oleh Mike Sokolov, salah satu alasan yang mungkin adalah adanya beberapa karakter (seperti spasi) sebelum tag.
Jika input XML Anda sedang dibaca sebagai String (sebagai lawan dari array byte) maka Anda dapat menggunakan ganti string input Anda dengan kode di bawah ini untuk memastikan bahwa semua karakter 'tidak perlu' sebelum tag xml dihapus.
Anda harus yakin bahwa input xml dimulai dengan tag xml.
sumber
Dalam kasus saya web.xml dalam aplikasi saya memiliki ruang ekstra bahkan setelah saya menghapus tidak bekerja saya harus mengembalikan chages dan perbaikannya dan ya saya sedang bermain dengan logging.properties dan web.xml di kucing jantan saya tetapi bahkan setelah saya mengembalikan kesalahan terus ditampilkan jadi ini memperbaikinya)).
Untuk lebih spesifik saya coba lakukan menambahkan org.apache.catalina.filters.ExpiresFilter.level = FINE stack over flow sesuatu tentang logging.properties
sumber
Saya mengikuti instruksi yang ditemukan di sini dan saya mendapatkan kesalahan yang sama.
Saya mencoba beberapa hal untuk menyelesaikannya (yaitu mengubah pengkodean, mengetik file XML daripada menyalin-menempelnya dll) di Notepad dan XML Notepad tetapi tidak ada yang berhasil.
Masalahnya terpecahkan ketika saya mengedit dan menyimpan file XML saya di Notepad ++ (penyandian -> utf-8 tanpa BOM)
sumber
Untuk semua yang mendapatkan kesalahan ini: PERINGATAN: Catalina.start menggunakan conf / server.xml: Konten tidak diperbolehkan dalam prolog.
Tidak terlalu informatif .. tetapi sebenarnya ini berarti ada sampah di file conf / server.xml Anda.
Saya telah melihat kesalahan ini dalam file XML lainnya .. kesalahan ini dapat disebabkan oleh membuat perubahan dengan editor teks yang memperkenalkan sampah.
Cara Anda dapat memverifikasi apakah Anda memiliki sampah di file tersebut dengan membukanya dengan "Editor HEX" Jika Anda melihat karakter apa pun sebelum string ini
seperti ini akan menjadi sampah
itu adalah masalah Anda .... Solusinya adalah menggunakan Editor HEX yang baik .. Salah satu yang akan memungkinkan Anda untuk menyimpan file dengan berbagai jenis pengkodean ..
Kemudian simpan saja sebagai UTF-8. Beberapa sistem yang menggunakan file XML mungkin perlu disimpan sebagai UTF NO BOM Yang berarti dengan "NO Byte Order Mark"
Semoga ini bisa membantu seseorang di luar sana !!
sumber
Bagi saya, Build-> Clean memperbaiki semuanya!
sumber
Untuk memperbaiki masalah BOM pada sistem Unix / Linux:
Periksa apakah ada karakter BOM yang tidak diinginkan:
hexdump -C myfile.xml | more
Karakter BOM yang tidak diinginkan akan muncul di awal file sebagai...<?xml>
Atau, lakukan
file myfile.xml
. File dengan karakter BOM akan muncul sebagai:myfile.xml: XML 1.0 document text, UTF-8 Unicode (with BOM) text
Perbaiki satu file dengan:
tail -c +4 myfile.xml > temp.xml && mv temp.xml myfile.xml
Ulangi 1 atau 2 untuk memeriksa apakah file telah disanitasi. Mungkin juga masuk akal untuk dilakukan
view myfile.xml
untuk memeriksa konten yang sudah ada.Berikut skrip bash untuk membersihkan seluruh folder file XML:
sumber
Hanya pemikiran tambahan yang satu ini untuk masa depan. Mendapatkan bug ini bisa menjadi kasus bahwa seseorang cukup menekan tombol hapus atau beberapa kunci lain secara acak ketika mereka memiliki jendela XML sebagai tampilan aktif dan tidak memperhatikan. Ini telah terjadi pada saya sebelumnya dengan file struts.xml di aplikasi web saya. Siku canggung ...
sumber
Saya juga mendapatkan hal yang sama
XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,2] Message: Reference is not allowed in prolog.
, ketika aplikasi saya membuat respons XML untuk panggilan layanan Web RestFull. Saat membuat format XML, String saya mengganti & lt dan & gt dengan <dan> kemudian kesalahannya hilang, dan saya mendapatkan respons yang tepat. Tidak yakin cara kerjanya tetapi berhasil.
sampel :
sumber
Saya memiliki masalah yang sama.
Pertama saya mengunduh file XML ke desktop lokal dan saya dapatkan
Content is not allowed in prolog
selama mengimpor file ke server portal. Bahkan file secara visual terlihat bagus untuk saya tetapi entah bagaimana itu rusak.Jadi saya mengunduh ulang file yang sama dan mencoba yang sama dan berhasil.
sumber
Kami memiliki masalah yang sama baru-baru ini dan ternyata merupakan kasus URL yang buruk dan akibatnya respons HTTP standar 403 (yang jelas bukan XML yang valid yang dicari klien). Saya akan berbagi detail jika seseorang dalam konteks yang sama mengalami masalah ini:
Ini adalah aplikasi web berbasis Spring di mana kacang "JaxWsPortProxyFactoryBean" dikonfigurasi untuk mengekspos proxy untuk port jarak jauh.
"END_POINT_BASE_URL" adalah variabel lingkungan yang dikonfigurasi dalam "setenv.sh" dari instance Tomcat yang meng-host aplikasi web. Konten file adalah seperti ini:
Yang hilang ";" setelah setiap baris menyebabkan URL salah dan dengan demikian respons yang buruk. Artinya, alih-alih "BusinessAppServices / OurService? Wsdl" URL memiliki CR sebelum "/". "Monitor TCP / IP" cukup praktis saat memecahkan masalah.
sumber
Dalam kasus saya, saya mendapatkan kesalahan ini karena API yang saya gunakan dapat mengembalikan data dalam format XML atau JSON. Ketika saya mengujinya menggunakan browser, itu default ke format XML, tetapi ketika saya memanggil panggilan yang sama dari aplikasi Java, API mengembalikan respons diformat JSON, yang secara alami memicu kesalahan parsing.
sumber
Bahkan saya pernah menghadapi masalah serupa. Alasannya adalah beberapa karakter sampah di awal file.
Perbaiki: Cukup buka file dalam editor teks (diuji pada teks Sublime) hapus indentasi jika ada dalam file dan salin tempelkan semua konten file dalam file baru dan simpan. Itu dia!. Ketika saya menjalankan file baru itu berjalan tanpa kesalahan parsing.
sumber
Saya mengambil kode Dineshkumar dan dimodifikasi untuk memvalidasi file XML saya dengan benar:
sumber
Setel dokumen Anda menjadi seperti ini:
sumber
Saya memiliki masalah yang sama dengan musim semi
dan dengan kode pra-proses.
Mayby seseorang akan memerlukan alasan: BytesMessage #readBytes - membaca byte .. dan saya lupa bahwa membaca adalah operasi satu arah. Anda tidak dapat membaca dua kali.
sumber
Coba dengan BOMInputStream di apache.commons.io:
sumber
Saya mengalami masalah yang sama saat mem-parsing
info.plist
file di mac saya. Namun, masalah diperbaiki menggunakan perintah berikut yang mengubah file menjadi XML.Semoga itu bisa membantu seseorang.
sumber
Saya memiliki masalah yang sama dengan beberapa file XML, saya menyelesaikan membaca file dengan encoding ANSI (Windows-1252) dan menulis file dengan encoding UTF-8 dengan skrip kecil dengan Python. Saya mencoba menggunakan Notepad ++ tetapi saya tidak berhasil:
sumber