Java 例外:读取 XML 时没有协议
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/964311/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Exception: No protocol while reading XML
提问by
I need to parse xml data from string bufer or string ..i do code as follows.
here on the line document doc =db.parse(eventXml )
..it throws exception-- plesae find below code and exception .plese help me
我需要从字符串缓冲区或字符串解析 xml 数据..我做的代码如下。这里在线document doc =db.parse(eventXml )
..它抛出异常 - 请找到下面的代码和异常。请帮助我
Code
代码
eventXml = strBuffer.toString();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(eventXml );
Exception
例外
java.net.MalformedURLException: no protocol: <?xml version="1.0" encoding="UTF-8
" standalone="yes"?>%0A<EventInfo xmlns="http://www.telenet.be/oms/event">%0A
<TelenetEventInfo className="be.telenet.oms.events.OmsAsapJsrpNotifyEvent">%0A
<SimpleFields>%0A <SimpleField>%0A <FieldName>C
ompletion_Date_Time</FieldName>%0A <FieldValue>04/08/2009 08:34:0
1</FieldValue>%0A </SimpleField>%0A <SimpleField>%0A
<FieldName>Originator</FieldName>%0A <FieldValue>System
</FieldValue>%0A </SimpleField>%0A <SimpleField>%0A
<FieldName>Status</FieldName>%0A <FieldValue>S</FieldVal
ue>%0A </SimpleField>%0A <SimpleField>%0A <
FieldName>Workorder_ID</FieldName>%0A <FieldValue>I00054132231-09
8</FieldValue>%0A </SimpleField>%0A </SimpleFields>%0A
<ArrayData>%0A <ArrayNames>%0A <ArrayName>Parameters</
ArrayName>%0A <ArrayFieldEntry>%0A <ArraySubFi
eld>[0].Parameter_Name</ArraySubField>%0A <ArraySubFieldValue
>WARNING_TEXT</ArraySubFieldValue>%0A </ArrayFieldEntry>%0A
<ArrayFieldEntry>%0A <ArraySubField>[0].Parameter_v
alue</ArraySubField>%0A <ArraySubFieldValue>UnknownKeyExcepti
on-Retrieving a webURL%0A for an unknown loginid: a004301</Ar
raySubFieldValue>%0A </ArrayFieldEntry>%0A <ArrayF
ieldEntry>%0A <ArraySubField>[1].Parameter_Name</ArraySubFiel
d>%0A <ArraySubFieldValue>AGED</ArraySubFieldValue>%0A
</ArrayFieldEntry>%0A <ArrayFieldEntry>%0A
<ArraySubField>[1].Parameter_value</ArraySubField>%0A <
ArraySubFieldValue/>%0A </ArrayFieldEntry>%0A <Arr
ayFieldEntry>%0A <ArraySubField>[2].Parameter_Name</ArraySubF
ield>%0A <ArraySubFieldValue>OPERATION</ArraySubFieldValue>%0
A </ArrayFieldEntry>%0A <ArrayFieldEntry>%0A
<ArraySubField>[2].Parameter_value</ArraySubField>%0A
<ArraySubFieldValue>DEL</ArraySubFieldValue>%0A </ArrayFie
ldEntry>%0A <ArrayFieldEntry>%0A <ArraySubFiel
d>[3].Parameter_Name</ArraySubField>%0A <ArraySubFieldValue>S
USPEND</ArraySubFieldValue>%0A </ArrayFieldEntry>%0A
<ArrayFieldEntry>%0A <ArraySubField>[3].Parameter_value</A
rraySubField>%0A <ArraySubFieldValue/>%0A </Ar
rayFieldEntry>%0A </ArrayNames>%0A </ArrayData>%0A <eve
ntName>OMS::ASAP::JSRP::Notify</eventName>%0A <destination>OSB</destinati
on>%0A </TelenetEventInfo>%0A</EventInfo>%0A%0A
at java.net.URL.<init>(URL.java:537)
at java.net.URL.<init>(URL.java:434)
at java.net.URL.<init>(URL.java:383)
at weblogic.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityMan
ager.java:836)
at weblogic.apache.xerces.impl.XMLEntityManager.startDocumentEntity(XMLE
ntityManager.java:782)
at weblogic.apache.xerces.impl.XMLDocumentScannerImpl.setInputSource(XML
DocumentScannerImpl.java:260)
at weblogic.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguratio
n.java:499)
at weblogic.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguratio
n.java:581)
at weblogic.apache.xerces.parsers.XMLParser.parse(XMLParser.java:152)
at weblogic.apache.xerces.parsers.DOMParser.parse(DOMParser.java:257)
at weblogic.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilder
Impl.java:201)
at weblogic.xml.jaxp.RegistryDocumentBuilder.parse(RegistryDocumentBuild
er.java:149)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:124)
at Controller.getEvent_Xml(Controller.jpf:822)
at Controller.GetDetails(Controller.jpf:487)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.bea.wlw.netui.pageflow.FlowController.invokeActionMethod(FlowCont
roller.java:1512)
at com.bea.wlw.netui.pageflow.FlowController.getActionMethodForward(Flow
Controller.java:1447)
at com.bea.wlw.netui.pageflow.FlowController.internalExecute(FlowControl
ler.java:778)
at com.bea.wlw.netui.pageflow.PageFlowController.internalExecute(PageFlo
wController.java:211)
at com.bea.wlw.netui.pageflow.FlowController.execute(FlowController.java
:608)
at org.apache.struts.action.RequestProcessor.processActionPerform(Reques
tProcessor.java:484)
at com.bea.wlw.netui.pageflow.PageFlowRequestProcessor.processActionPerf
orm(PageFlowRequestProcessor.java:1504)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja
va:274)
at com.bea.wlw.netui.pageflow.PageFlowRequestProcessor.process(PageFlowR
equestProcessor.java:674)
at com.bea.wlw.netui.pageflow.AutoRegisterActionServlet.process(AutoRegi
sterActionServlet.java:527)
at com.bea.wlw.netui.pageflow.PageFlowActionServlet.process(PageFlowActi
onServlet.java:152)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
(ServletStubImpl.java:1072)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:6985)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
rvletContext.java:3892)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:2766)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
Closing down all connections...
<Jun 8, 2009 4:03:18 PM IST> <Error> <HTTP> <BEA-101019> <[ServletContext(id=312
55131,name=ECToolWeb,context-path=/ECToolWeb)] Servlet failed with IOException
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at weblogic.servlet.internal.PostInputStream.read(PostInputStream.java:1
70)
at weblogic.servlet.internal.ServletInputStreamImpl.read(ServletInputStr
eamImpl.java:180)
at weblogic.servlet.internal.ServletRequestImpl.mergePostParams(ServletR
equestImpl.java:1339)
at weblogic.servlet.internal.ServletRequestImpl.parseQueryParams(Servlet
RequestImpl.java:1206)
at weblogic.servlet.internal.ServletRequestImpl.getParameter(ServletRequ
estImpl.java:1409)
at weblogic.servlet.internal.ServletRequestImpl.getParameter(ServletRequ
estImpl.java:1395)
at com.bea.wlw.netui.pageflow.scoping.ScopedServletUtils.getScopedSessio
nAttrName(ScopedServletUtils.java:301)
at com.bea.wlw.netui.pageflow.PageFlowUtils.getCurrentActionResolver(Pag
eFlowUtils.java:496)
at com.bea.wlw.netui.pageflow.PageFlowUtils.getCurrentPageFlow(PageFlowU
tils.java:478)
at com.bea.wlw.netui.pageflow.PageFlowUtils.ensureCurrentPageFlow(PageFl
owUtils.java:454)
at com.bea.wlw.netui.pageflow.PageFlowJspFilter.doFilter(PageFlowJspFilt
er.java:193)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja
va:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:6987)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
rvletContext.java:3892)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:2766)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
--------------- nested within: ------------------
weblogic.utils.NestedRuntimeException: Cannot parse POST parameters of request:
'/ECToolWeb/DetailDisplay.jsp' - with nested exception:
[java.net.SocketTimeoutException: Read timed out]
at weblogic.servlet.internal.ServletRequestImpl.mergePostParams(ServletR
equestImpl.java:1364)
at weblogic.servlet.internal.ServletRequestImpl.parseQueryParams(Servlet
RequestImpl.java:1206)
at weblogic.servlet.internal.ServletRequestImpl.getParameter(ServletRequ
estImpl.java:1409)
at weblogic.servlet.internal.ServletRequestImpl.getParameter(ServletRequ
estImpl.java:1395)
at com.bea.wlw.netui.pageflow.scoping.ScopedServletUtils.getScopedSessio
nAttrName(ScopedServletUtils.java:301)
at com.bea.wlw.netui.pageflow.PageFlowUtils.getCurrentActionResolver(Pag
eFlowUtils.java:496)
at com.bea.wlw.netui.pageflow.PageFlowUtils.getCurrentPageFlow(PageFlowU
tils.java:478)
at com.bea.wlw.netui.pageflow.PageFlowUtils.ensureCurrentPageFlow(PageFl
owUtils.java:454)
at com.bea.wlw.netui.pageflow.PageFlowJspFilter.doFilter(PageFlowJspFilt
er.java:193)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja
va:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:6987)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
rvletContext.java:3892)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:2766)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
>
.
回答by sleske
You are invoking
你正在调用
Document doc = db.parse(eventXml);
with eventXml apparently being a string of XML data.
eventXml 显然是一串 XML 数据。
However, the method DocumentBuilder.parse(String)expects a URI to loadthe XML from. That's why you get a MalformedURLException: Java tries to use your XML as an URI.
但是,方法DocumentBuilder.parse(String)需要一个 URI 来加载XML。这就是为什么您会收到 MalformedURLException:Java 尝试使用您的 XML 作为 URI。
You want DocumentBuilder.parse(InputSource), or DocumentBuilder.parse(InputStream). The InputStream can be created from your String/StringBuffer using e.g.
您需要 DocumentBuilder.parse(InputSource) 或 DocumentBuilder.parse(InputStream)。InputStream 可以从你的 String/StringBuffer 使用例如创建
new InputSource(new StringReader(xmlString))
(untested).
(未经测试)。
回答by alamar
parse()
doesn't take actual XML as a parameter, instead it takes URL to a document.
parse()
不采用实际的 XML 作为参数,而是采用指向文档的 URL。
You should use DocumentBuilder.parse(new StringBufferInputStream(eventXml));
你应该使用 DocumentBuilder.parse(new StringBufferInputStream(eventXml));
回答by Khangharoth
You have posted so much content but nothing that can help any reader to see what you were trying to do. If your problem is just that XML parsing is giving you a problem then check that your XML is well-formed.
您发布了如此多的内容,但没有任何内容可以帮助任何读者了解您正在尝试做什么。如果您的问题只是 XML 解析给您带来了问题,那么请检查您的 XML 格式是否正确。
回答by kanaparthikiran
This snippet should work.
这个片段应该可以工作。
private String updateMyXML(String orderXML) {
javax.xml.parsers.DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
InputSource inputSource = new InputSource(new StringReader(orderXML));
}
回答by Shyam_coder
Instead of db.parse(eventXml)
, try:
而不是db.parse(eventXml)
,尝试:
Document doc = db.parse(new InputSource(new StringReader(eventXml)));