Domanda

Sto pubblicando quanto segue sul server 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>

Sto utilizzando SolrNet per inviare i documenti qui un estratto del codice ( s è il precedente xml):

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);
    }
}

Quando arriva a request.GetResponse non è riuscito con questo errore:

  

di base   {System.InvalidOperationException} =   {" Il server remoto ha restituito un errore:   (500) Errore interno del server. & Quot;}

Quando cerco apache sul log nei log per questo mi dà il seguente motivo:

  

Fine imprevista del blocco di input alla fine

Ecco la traccia dello stack completo:

  

17 set 2009 10:13:53   org.apache.solr.common.SolrException   log SEVERE:   com.ctc.wstx.exc.WstxEOFException:   Fine imprevista del blocco di input alla fine   tag at [row, col {unknown-source}]:   [26,1266] a   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)

Si noti che il server Solr è in esecuzione sul seguente sistema:

Microsoft Windows Server 2003 R2 Apache Tomcat 6

Finalmente ecco la mia domanda:

L'XML che sto inviando mi sembra ok .. Qualcuno ha idee sul perché Solr stia lanciando questa eccezione?

Grazie

Dave

Modifica risposta è la seguente:

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);
    }
}
È stato utile?

Soluzione

Non ho molta familiarità con la porta .Net o Solr o .Net di Solr. Ma, ecco la mia ipotesi.

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

Esistono due possibili errori.

  1. Quando si ottengono byte da String, è necessario specificare la codifica. È possibile che la codifica predefinita sia diversa da UTF8, che hai impostato nell'intestazione del tipo di contenuto in risposta.
  2. Il terzo parametro in Write () si riferisce probabilmente alla lunghezza dell'array di byte ottenuto da GetBytes (). La matrice di byte potrebbe essere più lunga della lunghezza della stringa.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top