org.xml.sax.SAXPudeException: Nội dung không được phép trong prolog


161

Tôi có một máy khách dịch vụ web dựa trên Java được kết nối với dịch vụ web Java (được triển khai trên khung công tác Axis1).

Tôi nhận được ngoại lệ sau trong tệp nhật ký của mình:

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)

11
Sẽ rất hữu ích nếu bạn cho chúng tôi xem XML mà bạn đang cố phân tích. (Tôi chỉ mong đợi một vài dòng đầu tiên sẽ làm.)
Stephen C

Cảm ơn Stephen, tôi đang cố gắng truy xuất Yêu cầu XML từ khung AXIS và dán vào đây. Vì vậy, sự hiểu biết chung về lỗi trên là XML không được hình thành rõ ràng.
ag112

Tôi gặp vấn đề này vì tôi đã cố gắng chuyển đổi tên chuỗi của tệp xml chứ không phải tệp xml dưới dạng chuỗi! : P
Gaʀʀʏ

Câu trả lời:


242

Điều này thường được gây ra bởi một khoảng trắng trước khi khai báo XML, nhưng nó có thể là bất kỳ văn bản nào , như dấu gạch ngang hoặc bất kỳ ký tự nào. Tôi nói thường gây ra bởi không gian trắng bởi vì mọi người cho rằng không gian trắng luôn luôn không thể biết được, nhưng đó không phải là trường hợp ở đây.


Một điều khác thường xảy ra là BOM UTF-8 (dấu thứ tự byte), được phép trước khi khai báo XML có thể được coi là khoảng trắng nếu tài liệu được truyền dưới dạng luồng ký tự cho trình phân tích cú pháp XML chứ không phải là luồng byte .

Điều tương tự có thể xảy ra nếu các tệp lược đồ (.xsd) được sử dụng để xác thực tệp xml và một trong các tệp lược đồ có BOM UTF-8 .


17
Đối với tất cả mọi người như tôi, những người đấu tranh để hiểu phải làm gì với John Humphreys - đề xuất của w00te: đổi Document document = documentBuilder.parse(new InputSource(new StringReader(xml)))thànhDocument document = documentBuilder.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("UTF-8"))))
RealMan

32

Trên thực tế, ngoài bài viết của Yuriy Zubarev

Khi bạn chuyển một tệp xml không tồn tại cho trình phân tích cú pháp. Ví dụ bạn vượt qua

new File("C:/temp/abc")

khi chỉ tồn tại tệp C: /temp/abc.xml trên hệ thống tệp của bạn

Trong cả hai trường hợp

builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
document = builder.parse(new File("C:/temp/abc"));

hoặc là

DOMParser parser = new DOMParser();
parser.parse("file:C:/temp/abc");

Tất cả đưa ra cùng một thông báo lỗi.

Lỗi rất đáng thất vọng, vì dấu vết sau đây

javax.servlet.ServletException
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
...
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
... 40 more

không nói bất cứ điều gì về thực tế 'tên tệp không chính xác' hoặc 'tệp đó không tồn tại'. Trong trường hợp của tôi, tôi đã hoàn toàn đúng tệp xml và phải mất 2 ngày để xác định vấn đề thực sự.


Tương tự với việc cố phân tích một thư mục thay vì tên tệp, FWIW.
rogerdpack

... @Egor đây là lý do tại sao mọi người ghét XML. Mất 2 ngày làm việc vì một thất bại ngu ngốc như vậy ..
Gewure

Hoàn toàn đồng ý @Gewure :) Đó là một số bài đăng cổ từ năm 2012 và tôi thậm chí đã quên nó, nhưng sự thật
Egor

1
Điều này cũng xảy ra, khi bạn có một đường dẫn chính xác, nhưng với các ký hiệu đặc biệt, như: C: \ # MyFolder \ My.XML Tệp tồn tại, nhưng "#" cũng gây ra sự cố cho trình phân tích cú pháp XML ... cũng như Java M $ Windows, không có vấn đề gì với tên thư mục này .... Hành vi thông báo ngoại lệ rất tệ ....
Alex

26

Hãy thử thêm khoảng trắng giữa encoding="UTF-8"chuỗi trong prolog và terminating?> . Trong XML, prolog chỉ định phần tử được phân cách bằng dấu chấm hỏi này ở phần đầu của tài liệu (trong khi phần prolog trong stackoverflow đề cập đến ngôn ngữ lập trình).

Đã thêm: Có phải dấu gạch ngang trước phần prolog của bạn trong tài liệu không? Đó sẽ là lỗi ở đó, có dữ liệu ở phía trước của prolog , -<?xml version="1.0" encoding="UTF-8"?>.


1
+1. Tôi đã thấy rằng một số trình phân tích cú pháp XML không có ngoại lệ này ngay cả khi prolog XML chứa khoảng trắng - vì vậy tôi nghĩ rằng nó chắc chắn đáng để kiểm tra rằng không có gì có trước <?xml ver...bit.

11

Tôi đã có cùng một vấn đề (và đã giải quyết nó) trong khi cố gắng phân tích một tài liệu XML bằng freemarker.

Tôi không có khoảng trắng trước tiêu đề của tệp XML.

Sự cố xảy ra khi và chỉ khi mã hóa tệp và thuộc tính mã hóa XML khác nhau.(ví dụ: tệp UTF-8 với thuộc tính UTF-16 trong tiêu đề).

Vì vậy, tôi đã có hai cách để giải quyết vấn đề:

  1. thay đổi mã hóa của chính tập tin
  2. thay đổi tiêu đề UTF-16 thành UTF-8

1
Tôi đoán rằng nói chung bất kỳ trường hợp nào trình phân tích cú pháp nhận được thông tin mâu thuẫn về mã hóa ký tự có thể gây ra vấn đề này.
Raedwald

9

Điều đó có nghĩa là XML không đúng định dạng hoặc phần thân phản hồi hoàn toàn không phải là tài liệu XML.


Tôi đã kiểm tra và có vẻ như XML được hình thành tốt. Dưới đây là ảnh chụp nhanh: - <? Xml version = "1.0" mã hóa = "UTF-8"?> <Soapenv: Phong bì xmlns: Soapenv = " schemas.xmlsoap.org/soap/en phong " xmlns: xsd = " w3.org/ 2001 / XMLSCHEMA "xmlns: xsi =" w3.org/2001/XMLSchema-instance "> <soapenv: Tiêu đề> <wsse: an ninh xmlns: wsse =" docs.oasis-open.org/wss/2004/01/... " Soapenv: mustUnderstand = "1"> .... </ wsse: Bảo mật> </ Soapenv: Header> <Soapenv: Body> .XX .. </ Soapenv: Body> </ Soapenv: Phong bì>
ag112

1
Có, nếu có một dấu gạch ngang ở phía trước, nó sẽ phá vỡ XML.
Yuriy Zubarev

7

Chỉ mất 4 giờ để theo dõi một vấn đề tương tự trong WSDL. Hóa ra WSDL đã sử dụng XSD để nhập XSD không gian tên khác. XSD đã nhập này chứa các mục sau:

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.xyz.com/Services/CommonTypes" elementFormDefault="qualified"
    xmlns="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:CommonTypes="http://www.xyz.com/Services/CommonTypes">

 <include schemaLocation=""></include>  
    <complexType name="RequestType">
        <....

Lưu ý includeyếu tố trống ! Đây là gốc rễ của tai ương của tôi. Tôi đoán đây là một biến thể của tập tin Egor không tìm thấy vấn đề ở trên.

+1 để báo cáo lỗi đáng thất vọng.


4

Trong trường hợp của tôi, việc loại bỏ hoàn toàn thuộc tính 'mã hóa = "UTF-8"'.

Có vẻ như sự cố mã hóa bộ ký tự, có thể do tệp của bạn không thực sự ở UTF-8.


4

Câu trả lời của tôi sẽ không giúp bạn, nhưng nó giúp cho vấn đề này nói chung.

Khi bạn thấy loại ngoại lệ này, bạn nên thử mở tệp xml của mình trong bất kỳ Trình soạn thảo Hex nào và đôi khi bạn có thể thấy các byte bổ sung ở đầu tệp mà trình soạn thảo văn bản không hiển thị.

Xóa chúng và xml của bạn sẽ được phân tích cú pháp.


4

Đôi khi, đó là mã chứ không phải XML

Các mã sau đây,

Document doc = dBuilder.parse(new InputSource(new StringReader("file.xml")));

cũng sẽ dẫn đến lỗi này,

[Lỗi nghiêm trọng]: 1: 1: Nội dung không được phép trong prolog.org.xml.sax.SAXPudeException; sốSố: 1; số cột: 1; Nội dung không được phép trong prolog.

bởi vì nó đang cố phân tích chuỗi ký tự, "file.xml"(không phải nội dung của file.xmltệp) và không thành công vì "file.xml"chuỗi không phải là XML được định dạng tốt.

Khắc phục: Xóa StringReader():

Document doc = dBuilder.parse(new InputSource("file.xml"));

Tương tự, các vấn đề bộ đệm bẩn có thể để lại rác dư trước XML thực tế. Nếu bạn đã kiểm tra cẩn thận XML của mình và vẫn gặp lỗi này, hãy ghi lại nội dung chính xác được chuyển đến trình phân tích cú pháp; đôi khi những gì thực sự được (cố gắng) được phân tích cú pháp là đáng ngạc nhiên.


1
Giải pháp này được hướng dẫn theo đúng đường dẫn vì tôi quên thêm applicaionContext.xmlđường dẫn trong mã và không kiểm tra mã đang tìm lỗi trong tệp XML
Mrinmoy

3

Dự án sạch đầu tiên, sau đó xây dựng lại dự án. Tôi cũng đã đối mặt với vấn đề tương tự. Mọi thứ đều ổn sau đó.


2

Nếu vẫn thất bại, hãy mở tệp ở dạng nhị phân để đảm bảo không có ký tự vui [3 ký tự không in được ở đầu tệp xác định tệp là utf-8] ở đầu tệp. Chúng tôi đã làm điều này và tìm thấy một số. vì vậy chúng tôi đã chuyển đổi tệp từ utf-8 sang ascii và nó đã hoạt động.


2

Đối với các vấn đề tương tự, tôi đã loại bỏ các dòng sau,

  File file = new File("c:\\file.xml");
  InputStream inputStream= new FileInputStream(file);
  Reader reader = new InputStreamReader(inputStream,"UTF-8");
  InputSource is = new InputSource(reader);
  is.setEncoding("UTF-8");

Nó đang hoạt động tốt. Không chắc chắn tại sao UTF-8 gây ra vấn đề. Để giữ cho tôi bị sốc, nó cũng hoạt động tốt cho UTF-8.

Đang sử dụng Windows-7 32 bit và Netbeans IDE với Java * jdk1.6.0_13 *. Không biết làm thế nào nó hoạt động.


2

Như Mike Sokolov đã chỉ ra, một trong những lý do có thể là sự hiện diện của một số nhân vật (chẳng hạn như khoảng trắng) trước thẻ.

Nếu XML đầu vào của bạn đang được đọc dưới dạng Chuỗi (trái ngược với mảng byte) thì bạn có thể sử dụng thay thế chuỗi đầu vào của mình bằng mã dưới đây để đảm bảo rằng tất cả các ký tự 'không cần thiết' trước khi thẻ xml bị xóa.

inputXML=inputXML.substring(inputXML.indexOf("<?xml"));

Bạn cần chắc chắn rằng xml đầu vào bắt đầu bằng thẻ xml.


2

Trong trường hợp của tôi, web.xml trong ứng dụng của tôi có thêm dung lượng ngay cả sau khi tôi xóa không hoạt động, tôi phải hoàn nguyên các chage và các bản sửa lỗi của nó và vâng tôi đã chơi với log.properiesweb.xml trong tomcat của tôi nhưng ngay cả sau khi tôi hoàn nguyên lỗi tiếp tục hiển thị vì vậy điều này đã sửa nó)).

không gian thêm

Để cụ thể, tôi đã cố gắng thêm org.apache.cirthina.filters.ExpiresFilter.level = FINE chồng lên dòng chảy một cái gì đó về log.properies


1

Tôi đã làm theo các hướng dẫn được tìm thấy ở đây và tôi đã nhận được cùng một lỗi.

Tôi đã thử một vài thứ để giải quyết nó (tức là thay đổi mã hóa, gõ tệp XML chứ không phải sao chép nó dán) trong Notepad và Notepad Notepad nhưng không có gì hiệu quả.

Vấn đề đã được giải quyết khi tôi chỉnh sửa và lưu tệp XML của mình trong Notepad ++ (mã hóa -> utf-8 mà không có BOM)


1

Đối với tất cả những người gặp phải lỗi này: CẢNH BÁO: Catalina.start bằng conf / server.xml: Nội dung không được phép trong prolog.

Không có nhiều thông tin .. nhưng điều này thực sự có nghĩa là có rác trong tệp conf / server.xml của bạn.

Tôi đã thấy lỗi chính xác này trong các tệp XML khác .. lỗi này có thể được gây ra bằng cách thực hiện các thay đổi với trình soạn thảo văn bản giới thiệu rác.

Cách bạn có thể xác minh xem mình có rác trong tệp hay không là mở tệp bằng "Trình chỉnh sửa HEX" Nếu bạn thấy bất kỳ ký tự nào trước chuỗi này

     "<?xml version="1.0" encoding="UTF-8"?>"

như thế này sẽ là rác

     "‰ŠŒ<?xml version="1.0" encoding="UTF-8"?>"

đó là vấn đề của bạn .... Giải pháp là sử dụng Trình chỉnh sửa HEX tốt .. Một giải pháp sẽ cho phép bạn lưu các tệp với các loại mã hóa khác nhau ..

Sau đó, chỉ cần lưu nó dưới dạng UTF-8. Một số hệ thống sử dụng tệp XML có thể cần được lưu dưới dạng UTF NO BOM, có nghĩa là với "Dấu thứ tự NO Byte"

Hy vọng điều này sẽ giúp ai đó ngoài kia !!


1

Đối với tôi, một Build-> Clean đã sửa mọi thứ!


1

Để khắc phục sự cố BOM trên các hệ thống Unix / Linux:

  1. Kiểm tra xem có ký tự BOM không mong muốn không: hexdump -C myfile.xml | more Một ký tự BOM không mong muốn sẽ xuất hiện ở đầu tệp dưới dạng...<?xml>

  2. Cách khác, làm file myfile.xml. Một tệp có ký tự BOM sẽ xuất hiện dưới dạng:myfile.xml: XML 1.0 document text, UTF-8 Unicode (with BOM) text

  3. Sửa một tệp với: tail -c +4 myfile.xml > temp.xml && mv temp.xml myfile.xml

  4. Lặp lại 1 hoặc 2 để kiểm tra tệp đã được khử trùng. Có lẽ cũng hợp lý để làm view myfile.xmlđể kiểm tra nội dung đã ở lại.

Đây là tập lệnh bash để vệ sinh toàn bộ thư mục tệp XML:

#!/usr/bin/env bash

# This script is to sanitise XML files to remove any BOM characters

has_bom() { head -c3 "$1" | LC_ALL=C grep -qe '\xef\xbb\xbf'; }

for filename in *.xml ; do
  if has_bom ${filename}; then
    tail -c +4 ${filename} > temp.xml
    mv temp.xml ${filename}
  fi
done

0

Chỉ cần một suy nghĩ bổ sung về điều này cho tương lai. Gặp lỗi này có thể là trường hợp người ta chỉ cần nhấn phím xóa hoặc một số khóa khác một cách ngẫu nhiên khi họ có cửa sổ XML là màn hình hoạt động và không chú ý. Điều này đã xảy ra với tôi trước đây với tệp struts.xml trong ứng dụng web của tôi. Khuỷu tay vụng về ...


Tôi chắc chắn rằng tôi không nhấn bất kỳ phím nào
Mad-D

0

Tôi cũng bị như vậy

XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,2] Message: Reference is not allowed in prolog.

, khi ứng dụng của tôi đang tạo phản hồi XML cho lệnh gọi RestFull Webservice. Trong khi tạo Chuỗi định dạng XML, tôi đã thay thế & lt và & gt bằng <và> sau đó lỗi đã tắt và tôi đã nhận được phản hồi thích hợp. Không chắc nó hoạt động như thế nào nhưng nó hoạt động.

mẫu :

String body = "<ns:addNumbersResponse xmlns:ns=\"http://java.duke.org\"><ns:return>"
            +sum
            +"</ns:return></ns:addNumbersResponse>";

0

Tôi gặp vấn đề tương tự.

Đầu tiên tôi tải tệp XML về máy tính để bàn cục bộ và tôi đã nhận được Content is not allowed in prologtrong quá trình nhập tệp vào máy chủ cổng thông tin. Ngay cả tập tin trực quan cũng có vẻ tốt với tôi nhưng bằng cách nào đó nó đã bị hỏng.

Vì vậy, tôi tải lại cùng một tệp và thử tương tự và nó đã hoạt động.


0

Gần đây chúng tôi đã gặp vấn đề tương tự và hóa ra đó là trường hợp của một URL xấu và do đó là một phản hồi HTTP 403 tiêu chuẩn (rõ ràng không phải là XML hợp lệ mà khách hàng đang tìm kiếm). Tôi sẽ chia sẻ chi tiết trong trường hợp ai đó trong cùng bối cảnh gặp phải vấn đề này:

Đây là một ứng dụng web dựa trên Spring trong đó bean "JaxWsPortProxyFactoryBean" được cấu hình để hiển thị proxy cho một cổng từ xa.

<bean id="ourPortJaxProxyService"
    class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean"
    p:serviceInterface="com.amir.OurServiceSoapPortWs"
    p:wsdlDocumentUrl="${END_POINT_BASE_URL}/OurService?wsdl"
    p:namespaceUri="http://amir.com/jaxws" p:serviceName="OurService"
    p:portName="OurSoapPort" />

"END_POINT_BASE_URL" là một biến môi trường được định cấu hình trong "setenv.sh" của phiên bản Tomcat lưu trữ ứng dụng web. Nội dung của tập tin là như thế này:

export END_POINT_BASE_URL="http://localhost:9001/BusinessAppServices"
#export END_POINT_BASE_URL="http://localhost:8765/BusinessAppServices"

Mất tích ";" sau mỗi dòng gây ra URL không đúng định dạng và do đó phản hồi xấu. Đó là, thay vì "BusinessAppService / OurService? Wsdl", URL đã có CR trước "/". "Màn hình TCP / IP" khá tiện dụng trong khi khắc phục sự cố.


0

Trong trường hợp của tôi, tôi đã gặp lỗi này vì API tôi đã sử dụng có thể trả về dữ liệu theo định dạng XML hoặc ở định dạng JSON. Khi tôi kiểm tra nó bằng trình duyệt, nó mặc định là định dạng XML, nhưng khi tôi gọi cùng một cuộc gọi từ một ứng dụng Java, API đã trả về phản hồi được định dạng JSON, điều đó tự nhiên gây ra lỗi phân tích cú pháp.


0

Ngay cả tôi đã phải đối mặt với một vấn đề tương tự. Lý do là một số ký tự rác ở đầu tập tin.

Khắc phục: Chỉ cần mở tệp trong trình soạn thảo văn bản (đã thử nghiệm trên văn bản Sublime) xóa mọi vết lõm nếu có trong tệp và sao chép dán tất cả nội dung của tệp vào tệp mới và lưu tệp. Đó là nó!. Khi tôi chạy tệp mới, nó chạy mà không có lỗi phân tích cú pháp.


0

Tôi đã lấy mã của Dineshkumar và sửa đổi để Xác thực chính xác tệp XML của mình:

import org.apache.log4j.Logger;

public class Myclass{

private static final Logger LOGGER = Logger.getLogger(Myclass.class);

/**
 * Validate XML file against Schemas XSD in pathEsquema directory
 * @param pathEsquema directory that contains XSD Schemas to validate
 * @param pathFileXML XML file to validate
 * @throws BusinessException if it throws any Exception
 */
public static void validarXML(String pathEsquema, String pathFileXML) 
	throws BusinessException{	
	String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
	String nameFileXSD = "file.xsd";
	String MY_SCHEMA1 = pathEsquema+nameFileXSD);
	ParserErrorHandler parserErrorHandler;
	try{
		SchemaFactory schemaFactory = SchemaFactory.newInstance(W3C_XML_SCHEMA);
		
		Source [] source = { 
			new StreamSource(new File(MY_SCHEMA1))
			};
		Schema schemaGrammar = schemaFactory.newSchema(source);

		Validator schemaValidator = schemaGrammar.newValidator();
		schemaValidator.setErrorHandler(
			parserErrorHandler= new ParserErrorHandler());
		
		/** validate xml instance against the grammar. */
		File file = new File(pathFileXML);
		InputStream isS= new FileInputStream(file);
		Reader reader = new InputStreamReader(isS,"UTF-8");
		schemaValidator.validate(new StreamSource(reader));
		
		if(parserErrorHandler.getErrorHandler().isEmpty()&& 
			parserErrorHandler.getFatalErrorHandler().isEmpty()){
			if(!parserErrorHandler.getWarningHandler().isEmpty()){
				LOGGER.info(
				String.format("WARNING validate XML:[%s] Descripcion:[%s]",
					pathFileXML,parserErrorHandler.getWarningHandler()));
			}else{
				LOGGER.info(
				String.format("OK validate  XML:[%s]",
					pathFileXML));
			}
		}else{
			throw new BusinessException(
				String.format("Error validate  XML:[%s], FatalError:[%s], Error:[%s]",
				pathFileXML,
				parserErrorHandler.getFatalErrorHandler(),
				parserErrorHandler.getErrorHandler()));
		}		
	}
	catch(SAXParseException e){
		throw new BusinessException(String.format("Error validate XML:[%s], SAXParseException:[%s]",
			pathFileXML,e.getMessage()),e);
	}
	catch (SAXException e){
		throw new BusinessException(String.format("Error validate XML:[%s], SAXException:[%s]",
			pathFileXML,e.getMessage()),e);
	}
	catch (IOException e) {
		throw new BusinessException(String.format("Error validate XML:[%s], 
			IOException:[%s]",pathFileXML,e.getMessage()),e);
	}
	
}

}


0

Đặt tài liệu của bạn thành dạng như thế này:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    %children%
</root>

0

Tôi đã có cùng một vấn đề với mùa xuân

MarshallingMessageConverter

và bằng mã tiền xử lý.

Có thể ai đó sẽ cần lý do: BytesMessage #readBytes - đọc byte .. và tôi quên rằng đọc là hoạt động một hướng. Bạn không thể đọc hai lần.


0

Hãy thử với BOMInputStream trong apache.commons.io:

public static <T> T getContent(Class<T> instance, SchemaType schemaType, InputStream stream) throws JAXBException, SAXException, IOException {

    JAXBContext context = JAXBContext.newInstance(instance);
    Unmarshaller unmarshaller = context.createUnmarshaller();
    Reader reader = new InputStreamReader(new BOMInputStream(stream), "UTF-8");

    JAXBElement<T> entry = unmarshaller.unmarshal(new StreamSource(reader), instance);

    return entry.getValue();
}

0

Tôi đã có cùng một vấn đề trong khi phân tích info.plisttệp trong máy mac của tôi. Tuy nhiên, sự cố đã được khắc phục bằng cách sử dụng lệnh sau đây để biến tệp thành XML.

plutil -convert xml1 info.plist

Hy vọng rằng sẽ giúp được ai đó.


0

Tôi gặp vấn đề tương tự với một số tệp XML, tôi đã giải quyết việc đọc tệp bằng mã hóa ANSI (Windows-1252) và viết một tệp có mã hóa UTF-8 bằng một tập lệnh nhỏ bằng Python. Tôi đã thử sử dụng Notepad ++ nhưng không thành công:

import os
import sys

path = os.path.dirname(__file__)

file_name = 'my_input_file.xml'

if __name__ == "__main__":
    with open(os.path.join(path, './' + file_name), 'r', encoding='cp1252') as f1:
        lines = f1.read()
        f2 = open(os.path.join(path, './' + 'my_output_file.xml'), 'w', encoding='utf-8')
        f2.write(lines)
        f2.close()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.