2010-12-31 38 views
42

Tôi đang cố gắng gọi một dịch vụ web nhưng phải đối mặt với một hành vi lạ. chúng tôi có một dịch vụ web chạy trên máy chủ của tôi nhưng mã không mở cho chúng tôi nên không thể thấy những gì đang xảy ra phía sau bức tường Chủ sở hữu dịch vụ đã tiếp xúc với giao diện người dùng thử nghiệm dựa trên web, nhập dữ liệu vào hộp văn bản và hiển thị đáp ứng với hộp đầu vào thử nghiệm purpose.This đang đầu vào theo định dạng dưới đây đề cậpNội dung không được phép trong Prolog SAXParserException

<CONTENT> 
<CONTENTID></CONTENTID> 
<DOCUMENTID>DRI2</DOCUMENTID> 
<LOCALECODE>en_US</LOCALECODE> 
<LATEST_VERSION>false</LATEST_VERSION> 
<INCREASEVIEWCOUNT>false</INCREASEVIEWCOUNT> 
<ACTIVITY_TYPE></ACTIVITY_TYPE> 
</CONTENT> 

của nó làm việc tốt trên giao diện người dùng này nhưng khi tôi đang cố gắng để gọi dịch vụ web này thông qua mã java của tôi nó bị kết nối như cũng được ủy quyền bởi dịch vụ nhưng khi tôi cố gắng gọi phương thức trên, nó cho tôi thông báo lỗi dưới đây

AxisFault 
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException 
faultSubcode: 
faultString: org.xml.sax.SAXParseException: Content is not allowed in prolog. 
faultActor: 
faultNode: 
faultDetail: 
{http://xml.apache.org/axis/}stackTrace: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 org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) 
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) 
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.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62) 
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206) 
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) 
at com.inquira.imwows.generated.ContentServicesSoapBindingStub.getContentRecord(ContentServicesSoapBindingStub.java:262) 
at com.inquira.prep.GetWebService.getcontentRecord(GetWebService.java:87) 
at com.inquira.prep.TestWs.main(TestWs.java:13) 

{http://xml.apache.org/axis/}hostname:umeshawasthi 

org.xml.sax.SAXParseException: Content is not allowed in prolog. 
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101) 
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:701) 
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435) 
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62) 
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206) 
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) 
at com.inquira.imwows.generated.ContentServicesSoapBindingStub.getContentRecord(ContentServicesSoapBindingStub.java:262) 
at com.inquira.prep.GetWebService.getcontentRecord(GetWebService.java:87) 
at com.inquira.prep.TestWs.main(TestWs.java:13) 
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 org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) 
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) 
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227) 
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696) 
... 11 more 

dưới đây là đoạn code để tạo ra XML yêu cầu

inputXml.append("<CONTENT>"); 
    inputXml.append("<CONTENTID>").append("</CONTENTID>"); 
    inputXml.append("<DOCUMENTID>").append("DRI2").append("</DOCUMENTID>"); 
    inputXml.append("<LOCALECODE>").append("en_US").append("</LOCALECODE>"); 
    inputXml.append("<LATEST_VERSION>").append("false").append("</LATEST_VERSION>"); 
    inputXml.append("<INCREASEVIEWCOUNT>").append("false").append("</INCREASEVIEWCOUNT>"); 
    inputXml.append("<ACTIVITY_TYPE>").append("</ACTIVITY_TYPE>"); 
    inputXml.append("</CONTENT>"); 

và XML được tạo ra như sau

<CONTENT><CONTENTID></CONTENTID><DOCUMENTID>DRI2</DOCUMENTID><LOCALECODE>en_US</LOCALECODE><LATEST_VERSION>false</LATEST_VERSION><INCREASEVIEWCOUNT>false</INCREASEVIEWCOUNT><ACTIVITY_TYPE></ACTIVITY_TYPE></CONTENT> 

tôi thậm chí đã làm thời gian của chuỗi một cái gì đó tạo ra như dưới đây

inputXml.toString().trim().replaceFirst("^([\\W]+)<","<"); 

nhưng không thể tìm ra những gì đang xảy ra, một điều tôi chắc chắn có một số vấn đề trong XML đầu vào là tìm kiếm làm việc của nó trên UI trang thử nghiệm cho cùng một XML

bất kỳ trợ giúp nào về vấn đề này được đánh giá cao

+0

tôi nhận được loại thông báo lỗi khi lưu file XML như UTF-8 với BOM. Bạn làm cách nào để khởi tạo đối tượng inputXML? – weltraumpirat

+8

Hãy thử thêm mã này ở đầu «' –

+1

@ Org.life.java: Tôi cũng đã thử làm việc này không có gì: ( –

Trả lời

59

Lỗi này có thể liên quan đến dấu thứ tự byte (BOM) trước nội dung XML thực tế. Bạn cần phải phân tích cú pháp chuỗi trả về và loại bỏ BOM, vì vậy SAXParser có thể xử lý tài liệu chính xác.

Bạn sẽ tìm thấy giải pháp khả thi here.

+3

Tôi đã kiểm tra xem "BOM" này đã tồn tại chưa bằng cách xem tệp của tôi trong Trình chỉnh sửa Hex. 'ef bb bf' đã đánh dấu đầu tiên 3 byte –

+3

ok nhưng isnT có một cách để làm điều này với bộ phân tích SAX? Chúng ta phải loại bỏ BOM mình, trước khi ăn SAX (xử lý)? –

3

chỉ cần xóa nó, dán tệp xml của bạn vào notepad, bạn sẽ thấy ký tự thừa trước thẻ đầu tiên. Xóa nó & dán lại vào tệp của bạn - bof

2

Lỗi này có thể đến nếu có lỗi xác thực trong tệp wsdl hoặc xsd của bạn. Ví dụ, tôi cũng có cùng một vấn đề trong khi chạy wsdl2java để chuyển đổi tệp wsdl của tôi để tạo ứng dụng khách. Trong một trong số xsd của tôi, nó được định nghĩa là bên dưới

<xs:import schemaLocation="" namespace="http://MultiChoice.PaymentService/DataContracts" /> 

Trường hợp lược đồ là trống. Bằng cách cung cấp dữ liệu thích hợp trong schemaLocation, tôi đã giải quyết được vấn đề của mình.

<xs:import schemaLocation="multichoice.paymentservice.DataContracts.xsd" namespace="http://MultiChoice.PaymentService/DataContracts" /> 
0

Tôi gặp phải vấn đề tương tự. Ứng dụng của chúng tôi chạy trên bốn máy chủ ứng dụng và do vị trí lược đồ không hợp lệ được đề cập trên một trong các dịch vụ web WSDL, các chủ đề treo được tạo trên các máy chủ. Các appliucations đã xuống thường xuyên. Sau khi sửa vị trí lược đồ, vấn đề đã được giải quyết.

2

Kiểm tra XML. Nó không phải là một xml hợp lệ.

Prolog là dòng đầu tiên có thông tin phiên bản xml. Không được để bao gồm trong xml của bạn.

Lỗi này được ném khi trình phân tích cú pháp đọc thẻ không hợp lệ ở đầu tài liệu. Thông thường, nơi prolog cư trú.

ví dụ:

  1. Root /> < tài liệu >
  2. gốc < tài liệu >
+0

Không phải là Prolog một ngôn ngữ lập trình? OK, tôi chỉ như vậy hoàn toàn hiểu lầm rằng "Nội dung là không được cho phép trong Prolog "tin nhắn! – user2394284

Các vấn đề liên quan