2009-06-08 23 views
8

Necesito analizar datos xml desde el string bufer o string ..i do código de la siguiente manera. aquí en la línea document doc =db.parse(eventXml) ..es lanza excepción-- plesae encuentra por debajo de código y excepción .plese ayudarmeExcepción: No hay protocolo al leer XML

Código

eventXml = strBuffer.toString(); 
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 

Document doc = db.parse(eventXml); 

Excepción

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

Considerar reformular. – Joset

+0

jrharshath: Aunque estoy de acuerdo contigo, tu actitud no pertenece aquí. – araisbec

Respuesta

20

está invocando

Document doc = db.parse(eventXml); 

con eventXml aparentemente siendo una cadena de datos XML.

Sin embargo, el método DocumentBuilder.parse(String) espera un URI a carga el XML de. Es por eso que obtienes una excepción MalformedURLException: Java intenta usar tu XML como un URI.

Desea DocumentBuilder.parse (InputSource) o DocumentBuilder.parse (InputStream). El InputStream se puede crear a partir de su String/StringBuffer usando, p. Ej.

new InputSource(new StringReader(xmlString)) 

(no probado).

+0

+1 Probado y funciona. StringBufferInputStream está en desuso. –

28

parse() no toma el XML real como parámetro, sino que lleva la URL a un documento.

Debe utilizar
DocumentBuilder.parse(new StringBufferInputStream(eventXml));

+0

(+1) ... como está claramente escrito en JavaDoc para DocumentBuilder # parse. Si aún tiene dudas, busque "DocumentBuilder" en Google y siga el primer enlace. –

+0

Excelente ..... :) menos de un minuto –

+7

'StringBufferInputStream' está [en desuso] (http://docs.oracle.com/javase/7/docs/api/java/io/StringBufferInputStream.html). Hay una solución mejor: http://stackoverflow.com/a/1706533/1851290 –

1

que han publicado tanto contenido, pero nada de lo que puede ayudar a cualquier lector a ver lo que estaba tratando de hacer. Si su problema es solo que el análisis XML le está dando un problema, entonces verifique que su XML esté bien formado.

0

Este fragmento debería funcionar.

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

En lugar de db.parse(eventXml), probar:

Document doc = db.parse(new InputSource(new StringReader(eventXml))); 
Cuestiones relacionadas