문제

다음을 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>

사용 중입니다 Solrnet 여기에 문서를 보내려면 코드의 추출물이 있습니다 (S 위 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);
    }
}

request.getResponse 가이 오류로 실패했습니다.

base {system.invalidoperationException} = { "원격 서버에 오류가 반환되었습니다 : (500) 내부 서버 오류."}.

아파치 로그에서 서버를 보면 다음과 같은 이유가 있습니다.

입력 블록의 예기치 않은 끝

전체 스택 추적은 다음과 같습니다.

2009 년 9 월 17 일 오전 10:13:53 AM org.apache.solr.common.solrexception log 심각한 : com.ctc.wstx.exc.wstxeofexception : [row, col {unknown-source}에서 입력 블록의 예기치 않은 입력 끝 ] : [26,1266]에서 com.ctc.wstx.sr.streamscanner.throwunexpectedeob (streamscanner.java:700)에서 com.ctc.wstx.sr.streamscanner.load morefromcurrent (streamscanner.java:1054)에서 com.ctc. com.ctc.wstx.sr.basicstreamreader.readendelem (basictreamreader.java:3211)의 wstx.sr.streamscanner.getNextChromCurrent (streamScanner.java:811) at com.ctc.wstx.sr.basicstreamReader.nextfromtree (CASICTREACTREE : JAVA:3211). 2832)에서 com.ctc.wstx.sr.basicstreamreader.next (기본 스트림 리더 .java:1019)에서 org.apache.solr.xmlupdatequesthandler.processupdate (xmlupdaterequesthandler.java:148) at org.apache.solr.smllupdater.somhandler.somhandler.somhander.somhandler.somhandler.soghander.somhandler.soghander.somhandler.soghander. org.apache.solr.handler.requesthandlerbase.handlerequest (requesthandlerbase.java:131) at org.apache.solr.core.solrcore.execute (solrcore.java:1). 204) at org.apache.solr.servlet.solrdispatchfilter.execute (solrdispatchfilter.java:303) at org.apache.solr.servlet.solrdispatchfilter.dofilter (solrdispatchfilter.java:232) at Org.apichore.apication. .internaldofilter (ApplicationFilterchain.java:235) at org.apache.catalina.core.applicationfilterchain.dofilter (applicationfilterchain.java:206) at org.apache.catalina.core.core.standardwrappervalve.invoke (StandardWrapperValve.java:233). Apache.catalina.core.standardContextValve.invoke (org.apache.catalina.core.standardhostvalve.invoke (StandardHostvalve.java:128)의 org.apache.catalina.valves.errorreportvalve.invalve.invalve.invalve.invalve.invalve.invale. org.apache.catalina.core.standardenginevalve.invoke (StandardEngineValve.java:109) at org.apache.catalina.connector.coyoteadapter.service (coyoteadapter.java:293) at org.apache.coyote.htp11. .http11aprcessor.process (http11aprprocessor.java:859) at org.apache.coyote.http11.http11.http11aprprotocol $ http 11connectionhandler.process (http11aprprotocol.java:574) at org.apache.tomcat.util.net.aprendpoint $ worker.run (aprendpoint.java:1527) at java.lang.run (Thread.java:619)

Solr 서버가 다음 시스템에서 실행 중입니다.

Microsoft Windows Server 2003 R2 Apache Tomcat 6

마지막으로 여기에 내 질문이 있습니다.

내가 보내는 XML은 나에게 괜찮아 보인다 .. 왜 Solr 이이 예외를 던지는 지에 대한 아이디어가 있습니까?

감사

데이브

답변 편집은 다음과 같습니다.

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);
    }
}
도움이 되었습니까?

해결책

나는 .NET 또는 SOLR 또는 .NET PORT of Solr에 익숙하지 않습니다. 그러나 여기 내 추측이 있습니다.

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

두 가지 가능한 오류가 있습니다.

  1. 문자열에서 바이트를 얻을 때 인코딩을 지정해야합니다. 기본 인코딩이 UTF8과 다르고 응답으로 컨텐츠 유형 헤더에서 설정 한 경우입니다.
  2. write ()의 세 번째 매개 변수는 GetBytes ()에서 얻은 바이트 배열의 길이를 나타냅니다. 바이트 배열은 문자열 길이보다 길 수 있습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top