From: Christopher F. <chr...@ca...> - 2015-02-16 11:28:44
|
On 13/02/2015 01:28, Anders Nygren wrote: > Hi > Running yaws 1.91 on Red Hat Enterprise Linux AS release 4 (Nahant > Update 5) 64 bit > It used to work in 1.76. > > Is this a real bug or something that is miss-configured? > > Slightly edited for layout and to protect the client. > > ERROR erlang code crashed: > > File: appmod:0 > > Reason: {badarg,[{erlang,binary_to_list, > > [{partial,<<"<?xml version=\"1.0\" > encoding=\"UTF-8\"?><soapenv:Envelope > xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" > xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" > xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"> > <soapenv:Body> > <ns1:processMsg soapenv:encodingStyle=\"UTF-8\" > xmlns:ns1=\"http://example.com/\"> > <ns1:userId>USER</ns1:userId> > <ns1:password>PASSWORD</ns1:password> > <ns1:xmlMsg> > ... XML request body here... > </ns1:xmlMsg> > </ns1:processMsg> > </soapenv:Body> > </soapenv:Envelope>">>}]}, > > {yaws_rpc,handle_payload,3}, > {yaws_server,deliver_dyn_part,8}, > {yaws_server,aloop,3}, > {yaws_server,acceptor0,2}, > {proc_lib,init_p_do_apply,3}]} > Req: {http_request,'POST', > {abs_path,"/WebApp/services/WebService"}, > {1,1}} > > Stack: [{erlang,binary_to_list, > [{partial,<<"<?xml version=\"1.0\" > encoding=\"UTF-8\"?><soapenv:Envelope > xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" > xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" > xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"> > <soapenv:Body> > <ns1:processMsg soapenv:encodingStyle=\"UTF-8\" > xmlns:ns1=\"http://example.com/\"> > <ns1:userId>USERl</ns1:userId> > <ns1:password>PASSWORD</ns1:password> > <ns1:xmlMsg> > > ... XML request body here... > > </ns1:xmlMsg> > </ns1:processMsg> > </soapenv:Body> > </soapenv:Envelope>">>}]}, > {yaws_rpc,handle_payload,3}, > {yaws_server,deliver_dyn_part,8}, > {yaws_server,aloop,3}, > {yaws_server,acceptor0,2}, > {proc_lib,init_p_do_apply,3}] > Hi Anders, I'm not familiar with SOAP and its implementation in Yaws. But it seems that you use an appmod that calls yaws_rpc. There are 2 reasons to receive the request's body by chunk in an appmod. The first one was explained by Steve. If the body length exceeds the 'partial_post_size' value, then it will be chunked. The second one is when Yaws receives a chunk-encoded request. In all cases, when you write an appmon, you should be prepared to receive the request's body by chunk. You can handle that as an error. But it should be handled. By checking the documentation, this is not clearly explained. Here is a appmod skeleton to show you how you should do (not tested): https://gist.github.com/capflam/ef330cb3f09f032c0645 Hope that helps. -- Christopher |