2013-06-07 2 views
2

다른 서버에서 웹 서비스를 호출하는 Yesod 웹 응용 프로그램이 있습니다. 해당 웹 서비스에 대한 요청에 대해 yesod의 Http 관리자를 다시 사용합니다. 일부 호출에서는 Yesod 오류가 발생하며 오류 처리가 Manager에 포함되어 있지 않기 때문에 왜 Yesod 오류 처리기가 시작되는지 알지 못합니다. 내 코드가 HTTP 응답에서 자체 상태 처리를 수행합니다 (요청시 let req' = req { H.checkStatus = \_ _ _ -> Nothing }).Yese.Core.Class.Yesod의 ParseError

오류 내가 갖는 :

07/Jun/2013:14:05:15 +0200 [Error#yesod-core] ParseError {errorContexts = [], errorMessage = "Failed reading: satisfy", errorPosition = 1:1} @(yesod-core-1.2.0.4:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:471:5) 

나는 웹 서비스가 오류를 반환하는 뚜렷한 인상을 가지고 있고, Yesod 내 코드 대신에 그것을 처리한다. 내 웹 서비스 클라이언트 코드는 오류 페이지로 리다이렉트되는 예외를 throw하고 서비스 호출시 오류가 발생하면 제대로 작동하지만 일부 요청에서이 ParseError를 얻는 이유를 이해하지 못합니다.

요청과 웹 서비스에서받은 응답을 덤프하고 있습니다. 로그에 응답이 표시되지 않습니다. 이는 yesod가 응답을 가로 채고 있음을 나타내는 것 같습니다.

아이디어가 있으십니까?

답변

1

오케이, 바보 같은 질문에 사과드립니다. 알아 냈습니다. http-conduit 코드가 ParseError를 던지고 있으며, 제 코드가 그것을 잡아 내지 못해서 Yesod가 바코드를하고있었습니다. ParseError를 잡으면 오류 페이지가 나타납니다. 이제는 http-conduit이 갑작스러운 메시지로 인해 실패하는 것이 정상인지, 잘 모르겠지만 웹 서비스가 어쨌든 오작동하고 있다고 생각합니다.

+0

attoparsec 오류 메시지처럼 보입니다. aeson으로 잘못된 json 데이터를 파싱하고 있습니까? –

+0

예, 웹 서비스는 json을 되돌려 보낼 예정 이었지만 어떤 경우에는 그렇지 않았기 때문에 parseerror가 전송되어 절대로 잡히지 않았습니다. 나는 붙잡음을 추가했고 모든 것이 잘되었습니다. –