2009-06-08 5 views
8

Je dois analyser les données XML à partir d'un string bufer ou d'une chaîne ..i code comme suit. ici sur la ligne document doc =db.parse(eventXml) ..il lance exception-- plesae trouverez ci-dessous le code et l'exception .plese me aiderException: Pas de protocole lors de la lecture du code XML

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) 
    > 
. 
+1

Tenir compte reformulant. – Joset

+0

jrharshath: Bien que je sois d'accord avec vous, votre attitude n'appartient pas ici. – araisbec

Répondre

20

Vous invoquez

Document doc = db.parse(eventXml); 

avec eventXml étant apparemment une chaîne de données XML.

Toutefois, la méthode DocumentBuilder.parse(String) s'attend à ce qu'un URI à charge le code XML à partir de. C'est pourquoi vous obtenez une erreur MalformedURLException: Java essaie d'utiliser votre XML en tant qu'URI.

Vous souhaitez DocumentBuilder.parse (InputSource) ou DocumentBuilder.parse (InputStream). Le InputStream peut être créé à partir de votre String/StringBuffer en utilisant par ex.

new InputSource(new StringReader(xmlString)) 

(non testé).

+0

+1 Testé et cela fonctionne. StringBufferInputStream est obsolète. –

28

parse() ne prend pas XML réel en tant que paramètre, à la place il prend URL à un document.

Vous devez utiliser
DocumentBuilder.parse(new StringBufferInputStream(eventXml));

+0

(+1) .. comme clairement écrit dans l'analyse JavaDoc for DocumentBuilder #. En cas de doute, recherchez "DocumentBuilder" dans Google et suivez le premier lien. –

+0

Superbe ..... :) pris moins d'une minute –

+7

'StringBufferInputStream' est [obsolète] (http://docs.oracle.com/javase/7/docs/api/java/io/StringBufferInputStream.html). Il existe une meilleure solution: http://stackoverflow.com/a/1706533/1851290 –

1

vous avez posté tellement de contenu, mais rien qui peut aider à tout lecteur de voir ce que vous essayez de faire. Si votre problème est juste que l'analyse XML vous pose un problème, vérifiez que votre XML est bien formé.

0

Cet extrait devrait fonctionner.

private String updateMyXML(String orderXML) { 
    javax.xml.parsers.DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
    InputSource inputSource = new InputSource(new StringReader(orderXML)); 
} 
6

Au lieu de db.parse(eventXml), essayez:

Document doc = db.parse(new InputSource(new StringReader(eventXml))); 
Questions connexes