Pregunta

Estoy publicando lo siguiente en el servidor Solr:

<add>
    <doc>
        <field name="uniqueid">5453543</field>
        <field name="modifieddate">2008-12-03T15:49:00Z</field>
        <field name="title">My Record</field>
        <field name="description">Descirption 
        Details
</field>
        <field name="startdate">2009-01-21T15:26:05.680Z</field>
        <field name="enddate">2009-01-21T15:26:05.697Z</field>
        <field name="Telephone_number">11111 111 111(text phone)</field>
        <field name="Telephone_number">11111 111 111</field>
        <field name="Mobile_number">1111111111</field>
    </doc>
</add>

Estoy usando SolrNet para enviar los documentos aquí hay un extracto del código ( s es el xml anterior):

public string Post(string relativeUrl, string s) 
{
    var u = new UriBuilder(serverURL);
    u.Path += relativeUrl;
    var request = httpWebRequestFactory.Create(u.Uri);
    request.Method = HttpWebRequestMethod.POST;
    request.KeepAlive = false;
    if (Timeout > 0)
        request.Timeout = Timeout;
    request.ContentType = "text/xml; charset=utf-8";
    request.ContentLength = s.Length;
    request.ProtocolVersion = HttpVersion.Version10;
    try 
    {
        using (var postParams = request.GetRequestStream()) 
        {
            postParams.Write(xmlEncoding.GetBytes(s), 0, s.Length);
            using (var response = request.GetResponse()) 
            {
                using (var rStream = response.GetResponseStream()) 
                {
                    string r = xmlEncoding.GetString(ReadFully(rStream));
                    //Console.WriteLine(r);
                    return r;
                }
            }
        }
    } 
    catch (WebException e) 
    {
        throw new SolrConnectionException(e);
    }
}

Cuando llega la solicitud. GetResponse falló con este error:

  

base   {System.InvalidOperationException} =   {" El servidor remoto devolvió un error:   (500) Error interno del servidor. & Quot;}

Cuando busco apache en el servidor en los Registros, me da la siguiente razón:

  

Fin inesperado del bloque de entrada al final

Aquí está el seguimiento completo de la pila:

  

17 de septiembre de 2009 10:13:53 AM   org.apache.solr.common.SolrException   log GRAVE:   com.ctc.wstx.exc.WstxEOFException:   Fin inesperado del bloque de entrada al final   etiqueta en [row, col {unknown-source}]:   [26,1266] en   com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOB (StreamScanner.java:700)     a   com.ctc.wstx.sr.StreamScanner.loadMoreFromCurrent (StreamScanner.java:1054)     a   com.ctc.wstx.sr.StreamScanner.getNextCharFromCurrent (StreamScanner.java:811)     a   com.ctc.wstx.sr.BasicStreamReader.readEndElem (BasicStreamReader.java:3211)     a   com.ctc.wstx.sr.BasicStreamReader.nextFromTree (BasicStreamReader.java:2832)     a   com.ctc.wstx.sr.BasicStreamReader.next (BasicStreamReader.java:1019)     a   org.apache.solr.handler.XmlUpdateRequestHandler.processUpdate (XmlUpdateRequestHandler.java:148)     a   org.apache.solr.handler.XmlUpdateRequestHandler.handleRequestBody (XmlUpdateRequestHandler.java:123)     a   org.apache.solr.handler.RequestHandlerBase.handleRequest (RequestHandlerBase.java:131)     a   org.apache.solr.core.SolrCore.execute (SolrCore.java:1204)     a   org.apache.solr.servlet.SolrDispatchFilter.execute (SolrDispatchFilter.java:303)     a   org.apache.solr.servlet.SolrDispatchFilter.doFilter (SolrDispatchFilter.java:232)     a   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:235)     a   org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206)     a   org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:233)     a   org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:191)     a   org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:128)     a   org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102)     a   org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:109)     a   org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:293)     a   org.apache.coyote.http11.Http11AprProcessor.process (Http11AprProcessor.java:859)     a   org.apache.coyote.http11.Http11AprProtocol $ Http11ConnectionHandler.process (Http11AprProtocol.java:574)     a   org.apache.tomcat.util.net.AprEndpoint $ Worker.run (AprEndpoint.java:1527)     a   java.lang.Thread.run (Thread.java:619)

Tenga en cuenta que el servidor Solr se ejecuta en el siguiente sistema:

Microsoft Windows Server 2003 R2 Apache Tomcat 6

Finalmente, esta es mi pregunta:

El Xml que envío me parece bien ... ¿Alguien tiene alguna idea de por qué Solr está lanzando esta excepción?

Gracias

Dave

Editar respuesta es la siguiente:

public string Post(string relativeUrl, string s) 
{
    var u = new UriBuilder(serverURL);
    u.Path += relativeUrl;
    var request = httpWebRequestFactory.Create(u.Uri);
    request.Method = HttpWebRequestMethod.POST;
    request.KeepAlive = false;
    if (Timeout > 0)
        request.Timeout = Timeout;
    request.ContentType = "text/xml; charset=utf-8";
    request.ProtocolVersion = HttpVersion.Version10;
    try 
    {
        // Set the Content length after the size of the byte array has been calculated.
        byte[] data = xmlEncoding.GetBytes(s);
        request.ContentLength = s.Length;
        using (var postParams = request.GetRequestStream()) 
        {
            postParams.Write(data, 0, data.Length);
            using (var response = request.GetResponse()) 
            {
                using (var rStream = response.GetResponseStream()) 
                {
                    string r = xmlEncoding.GetString(ReadFully(rStream));
                    //Console.WriteLine(r);
                    return r;
                }
            }
        }
    } 
    catch (WebException e) 
    {
        throw new SolrConnectionException(e);
    }
}
¿Fue útil?

Solución

No estoy muy familiarizado con .Net o Solr o .Net puerto de Solr. Pero, aquí está mi suposición.

postParams.Write(xmlEncoding.GetBytes(s), 0, s.Length);

Hay dos posibles errores.

  1. Cuando obtenga bytes de String, debe especificar la codificación. Es posible que la codificación predeterminada sea diferente de UTF8, que ha configurado en el encabezado del tipo de contenido en respuesta.
  2. El tercer parámetro en Write () probablemente se refiere a la longitud de la matriz de bytes que obtuvo de GetBytes (). La matriz de bytes podría ser más larga que la longitud de la cadena.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top