Comments (9)
from restconf.
from restconf.
from restconf.
I tried your example and it works as expected. I debugged your example and compared the call stack with mine and here is what I see.
With your example we execute the line err = outputSel.LastErr
in the else.
In my case we enter in if a.Input() != nil
but not the next if input, err = readInput(r, a); err != nil
.
Then we execute this last block where sendOutput
calls fmt.Fprintf
at line 198. This is calling WriteHeader
eventually and set the 200 code. Then the handleErr
is called but setting the error code is not allowed.
if outputSel := sel.Action(input); !outputSel.IsNil() && a.Output() != nil {
w.Header().Set("Content-Type", mime.TypeByExtension(".json"))
if err = sendOutput(w, outputSel, a); err != nil {
handleErr(err, r, w)
return
}
case "POST":
if meta.IsAction(sel.Meta()) {
// RPC
a := sel.Meta().(*meta.Rpc)
var input node.Node
if a.Input() != nil {
if input, err = readInput(r, a); err != nil {
handleErr(err, r, w)
return
}
}
if outputSel := sel.Action(input); !outputSel.IsNil() && a.Output() != nil {
w.Header().Set("Content-Type", mime.TypeByExtension(".json"))
if err = sendOutput(w, outputSel, a); err != nil {
handleErr(err, r, w)
return
}
} else {
err = outputSel.LastErr
}
} else {
// CRUD - Insert
payload = nodeutil.ReadJSONIO(r.Body)
err = sel.InsertFrom(payload).LastErr
}
Now I'm trying to understand why we don't have the same call stack.
from restconf.
The difference with my request to the server is that my curl command has data specified with the "-d" option. That is why we have a different call stack and it seems we have an issue in that case.
I'm looking at the code and I think this block should be in the if a.Input() != nil
:
if outputSel := sel.Action(input); !outputSel.IsNil() && a.Output() != nil {
w.Header().Set("Content-Type", mime.TypeByExtension(".json"))
if err = sendOutput(w, outputSel, a); err != nil {
handleErr(err, r, w)
return
}
sel.Action(input)
uses input
which is retrieved above by if input, err = readInput(r, a); err != ni
Currenytly if outputSel := sel.Action(input); !outputSel.IsNil() && a.Output() != nil
and if a.Input() != nil
are at the same level and they should not.
from restconf.
If i'm reading you correctly, we need to check outputSel.LastErr
before going into that block where we potentially starting writing data in response body. I'll have to verify this later this evening but it's a good theory.
BTW: Even before this, I wanted get rid of LastErr
and just return selection and err like normal go code. the poor decision to use LastErr
thing dates back before I knew better.
from restconf.
Just calling handleErr(outputSel.LastErr, r, w)
is sending 401 and the response body correctly. sendoutput
does not seem to be required.
from restconf.
from restconf.
just pushed the fix to master. I was able to verified origin error and then verify it disappears w/the fix. thanks for reporting!
…
On Thu, Mar 23, 2023 at 12:49 PM sguay @.> wrote: Just calling handleErr(outputSel.LastErr, r, w) is sending 401 and the response body correctly. sendoutput does not seem to be required. — Reply to this email directly, view it on GitHub <#27 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAACA7XDXI3OVHQOJ3OD7ODW5R5H7ANCNFSM6AAAAAAWEGTD3U . You are receiving this because you commented.Message ID: @.>
Thanks a lot!
from restconf.
Related Issues (20)
- Feature request: Support XMLparsing HOT 1
- Feature request: Support XML output HOT 7
- ServeHTTP in server is not using Request context HOT 2
- Restconf server automatically opens a HTTP server HOT 1
- Feature request: Improve README HOT 1
- Feature request: Improve reflection support HOT 3
- Feature request: Improve error handling HOT 7
- Yang reference needs bump HOT 1
- Response content type not correctly set after XML pull request merge HOT 1
- local.go:ApplyStartupConfigFile function panics instead of returning an error HOT 2
- Restconf does not set the body in the right format (XML) for errors with a body when the accept in the request is XML HOT 2
- Restconf go.mod does not refer to latest freeconf/yang HOT 1
- Content-Type set in util::handle is overwritten by net/http/server.go HOT 1
- Response body for errors not valid in XML HOT 1
- Edit a leaf with `config false` HOT 2
- Question: how to post binary data with JSON HOT 3
- Bug in support for RFC 8525 HOT 3
- Question: how to view full config after change HOT 9
- Question: how to re-retrieve server configuration HOT 5
- For my clarification: Python way is completely "Go" free? Or not? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from restconf.